graphql-platform icon indicating copy to clipboard operation
graphql-platform copied to clipboard

Spatial output: MultiLineString gets mangled into a LineString

Open fredrik-stock opened this issue 3 years ago • 2 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Describe the bug

MultiLineStrings should be represented as [LineString, LineString, ...]. As of HC 12.12 / 13 it seems all the contained LinesStrings get concatenated into one single array of coordinates, which gets really wonky if the LineStrings aren't actually contigous:

BrokenMultiLineString

Manually serializing the same string with NTS.IO and sending it as a raw string gives the expected result: CorrectMultiLineString

Steps to reproduce

  1. Create a MultiLineString consisting of 2 or more LineStrings.
  2. Request the MLS from your gql client.
  3. Observe that the returned output is 2-dimensional, not 3-dimensional.

Relevant log output

No response

Additional Context?

From existing issues and PRs it seems a similiar problem was fixed for MultiPolygon already.

Product

Hot Chocolate

Version

12.12.1

fredrik-stock avatar Aug 29 '22 13:08 fredrik-stock

This might actually be an easy fix, since @PascalSenn already implemented the needed functionality in #4394.

MultiPolygons were updated to be correctly handled as a GeometryCollection, reading out the contained coordinate arrays through indexed access: https://github.com/ChilliCream/hotchocolate/blob/ef1b268c7e624808862f18c43a190fba6303677a/src/HotChocolate/Spatial/src/Types/GeoJsonMultiPolygonType.cs#L19-L23

MultiLineStrings meanwhile still access MultiLineString.Coordinates for their Coordinates field. This property "Collects all coordinates of all subgeometries into an Array", thus we get the flat structure observed: https://github.com/ChilliCream/hotchocolate/blob/ef1b268c7e624808862f18c43a190fba6303677a/src/HotChocolate/Spatial/src/Types/GeoJsonMultiLineStringType.cs#L18-L20

Worth noting is that in NTS there are three classes that extend GeometryCollection. MultiPolygon, MultiLineString and MultiPoint. MultiPoint probably wouldn't need this change since it's basically a LineString, dimension-wise.

fredrik-stock avatar Aug 30 '22 06:08 fredrik-stock

@fredrik-stock Thanks for reporting! yes this could indeed be the same problem

PascalSenn avatar Aug 30 '22 07:08 PascalSenn