/// <summary> /// Converts from Mapsui Geometry type to NetTopologySuite Geometry type, then converts to GeoJSON. /// Writes the point list to wkt format, the uses Geometry2GeoJSON to convert to geojson /// </summary> /// <param name="pointList"></param> /// <returns>GeoJSON</returns> public static string CoordinatesToGeoJSON(List <Mapsui.Geometries.Point> pointList) { var wkt = ""; if (pointList.Count == 1) { var point = pointList[0]; wkt = Mapsui.Geometries.WellKnownText.GeometryToWKT.Write(point); } else if (pointList[0] == pointList[pointList.Count - 1]) { var polygon = new Mapsui.Geometries.Polygon(); foreach (var coord in pointList) { polygon.ExteriorRing.Vertices.Add(new Mapsui.Geometries.Point(coord.X, coord.Y)); } wkt = Mapsui.Geometries.WellKnownText.GeometryToWKT.Write(polygon); } else { var line = new Mapsui.Geometries.LineString(pointList); wkt = Mapsui.Geometries.WellKnownText.GeometryToWKT.Write(line); } WKTReader reader = new WKTReader(); NetTopologySuite.Geometries.Geometry geom = reader.Read(wkt); var geojson = DataDAO.Geometry2GeoJSON(geom); return(geojson); }
private async Task Load() { var service = new EpanetService(); service.InpPath = @"Samples\INP(Dr-누수량배분-연결요소수정).inp"; service.Run(); var nodeLayer = new WritableLayer() { Style = GetNodeLayerStyle() }; var linkLayer = new WritableLayer() { Style = GetLinkLayerStyle() }; foreach (var node in service.Nodes) { var point = new Mapsui.Geometries.Point(node.X, node.Y); var feature = new Mapsui.Providers.Feature(); feature.Geometry = point; nodeLayer.Add(feature); } foreach (var link in service.Links) { var vertices = new List <Mapsui.Geometries.Point>(); vertices.Add(new Mapsui.Geometries.Point(link.Node1.X, link.Node1.Y)); foreach (var v in link.Vertices) { vertices.Add(new Mapsui.Geometries.Point(v.X, v.Y)); } vertices.Add(new Mapsui.Geometries.Point(link.Node2.X, link.Node2.Y)); var lineString = new Mapsui.Geometries.LineString(vertices); var feature = new Mapsui.Providers.Feature(); feature.Geometry = lineString; linkLayer.Add(feature); } mapControl.Map.Layers.Add(nodeLayer); mapControl.Map.Layers.Add(linkLayer); var p = (Mapsui.Geometries.Point)nodeLayer.GetFeatures().First().Geometry; mapControl.Navigator.NavigateTo(p, 11); await Animation(service, nodeLayer); }
private WritableLayer GetLinkLayer(IEnumerable <Link> links) { var layer = new WritableLayer(); foreach (var link in links) { var vertices = new List <Mapsui.Geometries.Point>(); vertices.Add(ToMapsuiPoint(link.FirstNode)); foreach (var v in link.Vertices) { vertices.Add(ToMapsuiPoint(v)); } vertices.Add(ToMapsuiPoint(link.SecondNode)); var lineString = new Mapsui.Geometries.LineString(vertices); var feature = new Mapsui.Providers.Feature(); feature.Geometry = lineString; layer.Add(feature); _links.Add(feature, link); } return(layer); }