public void Can_Serialize_MultiLineString_Feature() { var geometry = new MultiLineString(new List<LineString> { new LineString(new List<IPosition> { new GeographicPosition(52.370725881211314, 4.889259338378906), new GeographicPosition(52.3711451105601, 4.895267486572266), new GeographicPosition(52.36931095278263, 4.892091751098633), new GeographicPosition(52.370725881211314, 4.889259338378906) }), new LineString(new List<IPosition> { new GeographicPosition(52.370725881211314, 4.989259338378906), new GeographicPosition(52.3711451105601, 4.995267486572266), new GeographicPosition(52.36931095278263, 4.992091751098633), new GeographicPosition(52.370725881211314, 4.989259338378906) }) }); var expectedJson = GetExpectedJson(); var actualJson = JsonConvert.SerializeObject(new Net.Feature.Feature(geometry)); JsonAssert.AreEqual(expectedJson, actualJson); }
public void MultiLineStringSerialization() { var coordinates = new[] { new List<IPosition> { new GeographicPosition(52.370725881211314, 4.889259338378906), new GeographicPosition(52.3711451105601, 4.895267486572266), new GeographicPosition(52.36931095278263, 4.892091751098633), new GeographicPosition(52.370725881211314, 4.889259338378906) }, new List<IPosition> { new GeographicPosition(52.370725881211314, 4.989259338378906), new GeographicPosition(52.3711451105601, 4.995267486572266), new GeographicPosition(52.36931095278263, 4.992091751098633), new GeographicPosition(52.370725881211314, 4.989259338378906) }, }; var model = new MultiLineString(coordinates.Select(ca => new LineString(ca)).ToList()); var serializedData = JsonConvert.SerializeObject(model, DefaultJsonSerializerSettings); var matches = Regex.Matches(serializedData, @"(?<coordinates>[0-9]+([.,][0-9]+))"); double lng; double.TryParse(matches[0].Value, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out lng); //Double precision can pose a problem Assert.IsTrue(Math.Abs(lng - 4.889259338378906) < 0.0000001); Assert.IsTrue(!serializedData.Contains("latitude")); }
public void Can_Deserialize() { var json = GetExpectedJson(); var expectedMultiLineString = new MultiLineString(new List<LineString> { new LineString(new List<IPosition> { new GeographicPosition(52.379790828551016, 5.3173828125), new GeographicPosition(52.36721467920585, 5.456085205078125), new GeographicPosition(52.303440474272755, 5.386047363281249, 4.23) }), new LineString(new List<IPosition> { new GeographicPosition(52.379790828551016, 5.3273828125), new GeographicPosition(52.36721467920585, 5.486085205078125), new GeographicPosition(52.303440474272755, 5.426047363281249, 4.23) }) }); var multiLineString = JsonConvert.DeserializeObject<MultiLineString>(json); Assert.IsNotNull(multiLineString); Assert.AreEqual(expectedMultiLineString, multiLineString); }
public static JGeometry.MultiLineString MultiPolyline2JG(Polyline polyline) { var linestrings = (from simplePolyline in polyline.childPolylines select Polyline2JG(simplePolyline)).ToList(); JGeometry.MultiLineString multiLineString = new JGeometry.MultiLineString(linestrings); return(multiLineString); }
public void FeatureSerialization() { var coordinates = new[] { new List<IPosition> { new GeographicPosition(52.370725881211314, 4.889259338378906), new GeographicPosition(52.3711451105601, 4.895267486572266), new GeographicPosition(52.36931095278263, 4.892091751098633), new GeographicPosition(52.370725881211314, 4.889259338378906) }, new List<IPosition> { new GeographicPosition(52.370725881211314, 4.989259338378906), new GeographicPosition(52.3711451105601, 4.995267486572266), new GeographicPosition(52.36931095278263, 4.992091751098633), new GeographicPosition(52.370725881211314, 4.989259338378906) }, }; var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; IGeometryObject geometry; geometry = new LineString(coordinates[0]); JsonAssert.AssertCoordinates(JsonConvert.SerializeObject(new Feature.Feature(geometry), DefaultJsonSerializerSettings), 1, coordinates[0]); geometry = new Point(coordinates[0][0]); JsonAssert.AssertCoordinates(JsonConvert.SerializeObject(new Feature.Feature(geometry), DefaultJsonSerializerSettings), 0, coordinates[0].Take(1).ToArray()); geometry = new MultiLineString(coordinates.Select(ca => new LineString(ca)).ToList()); JsonAssert.AssertCoordinates(JsonConvert.SerializeObject(new Feature.Feature(geometry), DefaultJsonSerializerSettings), 2, coordinates); geometry = new Polygon(coordinates.Select(ca => new LineString(ca)).ToList()); JsonAssert.AssertCoordinates(JsonConvert.SerializeObject(new Feature.Feature(geometry), DefaultJsonSerializerSettings), 2, coordinates); }
private IGeometryObject ConstructGeometryPart(SinkGeometry<OpenGisGeographyType> geomPart) { IGeometryObject geometry = null; switch (geomPart.GeometryType) { case OpenGisGeographyType.Point: geometry = new Point(geomPart[0][0]); break; case OpenGisGeographyType.MultiPoint: MultiPoint mp = new MultiPoint(geomPart.Select(g => new Point(g[0])).ToList()); geometry = mp; break; case OpenGisGeographyType.LineString: geometry = new LineString(geomPart[0]); break; case OpenGisGeographyType.MultiLineString: geometry = new MultiLineString(geomPart.Select(line => new LineString(line)) .ToList() ); break; case OpenGisGeographyType.Polygon: geometry = new Polygon(geomPart.Select(line => new LineString(line)) .ToList() ); break; default: throw new NotSupportedException("Geometry type " + geomPart.GeometryType.ToString() + " is not supported yet."); } return geometry; }
private IGeometryObject GeometryFromSinkGeometryCollection(SinkGeometryCollection<OpenGisGeographyType> sinkCollection) { IGeometryObject _geometry = null; switch (sinkCollection.GeometryType) { case OpenGisGeographyType.Point: _geometry = ConstructGeometryPart(sinkCollection[0]); ((Point)_geometry).BoundingBoxes = this.BoundingBox; break; case OpenGisGeographyType.MultiPoint: _geometry = new MultiPoint(sinkCollection.Skip(1) .Select(g => (Point)ConstructGeometryPart(g)) .ToList()); ((MultiPoint)_geometry).BoundingBoxes = this.BoundingBox; break; case OpenGisGeographyType.LineString: _geometry = ConstructGeometryPart(sinkCollection[0]); ((LineString)_geometry).BoundingBoxes = this.BoundingBox; break; case OpenGisGeographyType.MultiLineString: _geometry = new MultiLineString(sinkCollection.Skip(1) .Select(g => (LineString)ConstructGeometryPart(g)) .ToList()); ((MultiLineString)_geometry).BoundingBoxes = this.BoundingBox; break; case OpenGisGeographyType.Polygon: _geometry = ConstructGeometryPart(sinkCollection.First()); ((Polygon)_geometry).BoundingBoxes = this.BoundingBox; break; case OpenGisGeographyType.MultiPolygon: _geometry = new MultiPolygon(sinkCollection.Skip(1) .Select(g => (Polygon)ConstructGeometryPart(g)) .ToList()); ((MultiPolygon)_geometry).BoundingBoxes = this.BoundingBox; break; default: throw new NotSupportedException("Geometry type " + sinkCollection.GeometryType.ToString() + " is not possible in GetConstructedGeometry."); } return _geometry; }
public ToSqlGeometryTests() { point = new Point(new GeographicPosition(53.2455662, 90.65464646)); multiPoint = new MultiPoint(new List<Point> { new Point(new GeographicPosition(52.379790828551016, 5.3173828125)), new Point(new GeographicPosition(52.36721467920585, 5.456085205078125)), new Point(new GeographicPosition(52.303440474272755, 5.386047363281249, 4.23)) }); lineString = new LineString(new List<IPosition> { new GeographicPosition(52.379790828551016, 5.3173828125), new GeographicPosition(52.36721467920585, 5.456085205078125), new GeographicPosition(52.303440474272755, 5.386047363281249, 4.23) }); multiLineString = new MultiLineString(new List<LineString> { new LineString(new List<IPosition> { new GeographicPosition(52.379790828551016, 5.3173828125), new GeographicPosition(52.36721467920585, 5.456085205078125), new GeographicPosition(52.303440474272755, 5.386047363281249, 4.23) }), new LineString(new List<IPosition> { new GeographicPosition(52.379790828551016, 5.3273828125), new GeographicPosition(52.36721467920585, 5.486085205078125), new GeographicPosition(52.303440474272755, 5.426047363281249, 4.23) }) }); polygonWithHole = new Polygon(new List<LineString> { new LineString(new List<GeographicPosition> { new GeographicPosition(0.516357421875, 47.6415668949958), new GeographicPosition(0.516357421875, 47.34463879017405), new GeographicPosition(0.977783203125, 47.22539733216678), new GeographicPosition(1.175537109375, 47.463611506072866), new GeographicPosition(0.516357421875, 47.6415668949958) }), new LineString(new List<GeographicPosition> { new GeographicPosition(0.630340576171875, 47.54944962456812), new GeographicPosition(0.630340576171875, 47.49380564962583), new GeographicPosition(0.729217529296875, 47.482669772098674), new GeographicPosition(0.731964111328125, 47.53276262898896), new GeographicPosition(0.630340576171875, 47.54944962456812) }) }); polygon = new Polygon(new List<LineString> { new LineString(new List<GeographicPosition> { new GeographicPosition(52.379790828551016, 5.3173828125), new GeographicPosition(52.36721467920585, 5.456085205078125), new GeographicPosition(52.303440474272755, 5.386047363281249, 4.23), new GeographicPosition(52.379790828551016, 5.3173828125) }) }); multiPolygon = new MultiPolygon(new List<Polygon> { new Polygon(new List<LineString> { new LineString(new List<IPosition> { new GeographicPosition(52.959676831105995, -2.6797102391514338), new GeographicPosition(52.9608756693609, -2.6769029474483279), new GeographicPosition(52.908449372833715, -2.6079763270327119), new GeographicPosition(52.891287242948195, -2.5815104708998668), new GeographicPosition(52.875476700983896, -2.5851645010668989), new GeographicPosition(52.882954723868622, -2.6050779098387191), new GeographicPosition(52.875255907042678, -2.6373482332006359), new GeographicPosition(52.878791122091066, -2.6932445076063951), new GeographicPosition(52.89564268523565, -2.6931334629377890), new GeographicPosition(52.930592009390175, -2.6548779332193022), new GeographicPosition(52.959676831105995, -2.6797102391514338) }) }), new Polygon(new List<LineString> { new LineString(new List<IPosition> { new GeographicPosition(52.89610842810761, -2.69628632041613), new GeographicPosition(52.8894641454077, -2.75901233808515), new GeographicPosition(52.89938894657412, -2.7663172788742449), new GeographicPosition(52.90253773227807, -2.804554822840895), new GeographicPosition(52.929801009654575, -2.83848602260174), new GeographicPosition(52.94013913205788, -2.838979264607087), new GeographicPosition(52.937353122653533, -2.7978187468478741), new GeographicPosition(52.920394929466184, -2.772273870352612), new GeographicPosition(52.926572918779222, -2.6996509024137052), new GeographicPosition(52.89610842810761, -2.69628632041613) }) }) }); geomCollection = new GeometryCollection(new List<IGeometryObject> { point, multiPoint, lineString, multiLineString, polygon, multiPolygon }); feature = new Feature.Feature(polygon, new Dictionary<string, object>() { { "Key", "Value" } }, "Id"); featureCollection = new FeatureCollection(new List<Feature.Feature> { feature, new Feature.Feature(multiPolygon, null) }); }
private IGeometryObject GetGeometry() { var coordinates = new List<LineString> { new LineString(new List<IPosition> { new GeographicPosition(52.370725881211314, 4.889259338378906), new GeographicPosition(52.3711451105601, 4.895267486572266), new GeographicPosition(52.36931095278263, 4.892091751098633), new GeographicPosition(52.370725881211314, 4.889259338378906) }), new LineString(new List<IPosition> { new GeographicPosition(52.370725881211314, 4.989259338378906), new GeographicPosition(52.3711451105601, 4.995267486572266), new GeographicPosition(52.36931095278263, 4.992091751098633), new GeographicPosition(52.370725881211314, 4.989259338378906) }) }; var multiLine = new MultiLineString(coordinates); return multiLine; }
private static void Internal_FillGeometryBuilder(SqlGeometryBuilder gb, MultiLineString multiLineString) { gb.BeginGeometry(OpenGisGeometryType.MultiLineString); foreach (var lineString in multiLineString.Coordinates) { gb.BeginGeometry(OpenGisGeometryType.LineString); bool beginFigureCalled = false; foreach (var ipos in lineString.Coordinates) { GeographicPosition pos = ipos as GeographicPosition; if (!beginFigureCalled) { gb.BeginFigure(pos.Longitude, pos.Latitude); beginFigureCalled = true; } else { gb.AddLine(pos.Longitude, pos.Latitude); } } gb.EndFigure(); gb.EndGeometry(); } gb.EndGeometry(); }
private static IGeometryObject GetLineGeometry(List<List<GeographicPosition>> pointList) { IGeometryObject geom; if (pointList.Count == 1) { geom = new LineString(pointList[0]); } else { geom = new MultiLineString(GetLineStringList(pointList)); } return geom; }
public void Equals_GetHashCode_Contract() { var rnd = new System.Random(); var offset = rnd.NextDouble() * 60; if (rnd.NextDouble() < 0.5) { offset *= -1; } var leftLine = new List<LineString>(); leftLine.Add(GetLineString(offset + 1)); leftLine.Add(GetLineString(offset + 2)); var left = new MultiLineString(leftLine); var rightLine = new List<LineString>(); rightLine.Add(GetLineString(offset + 1)); rightLine.Add(GetLineString(offset + 2)); var right = new MultiLineString(rightLine); Assert.AreEqual(left, right); Assert.AreEqual(right, left); Assert.IsTrue(left.Equals(right)); Assert.IsTrue(left.Equals(left)); Assert.IsTrue(right.Equals(left)); Assert.IsTrue(right.Equals(right)); Assert.IsTrue(left == right); Assert.IsTrue(right == left); Assert.AreEqual(left.GetHashCode(), right.GetHashCode()); }
protected bool Equals(MultiLineString other) { return(base.Equals(other) && Coordinates.SequenceEqual(other.Coordinates)); }
protected bool Equals(MultiLineString other) { return base.Equals(other) && Coordinates.SequenceEqual(other.Coordinates); }