private (double[] xys, double[] zs) ReprojectGeometry(TGeometry geometry) { var xys = geometry.GetXYArray(); var zs = geometry.GetZArray(); Reproject.ReprojectPoints(xys, zs, _projection, Wgs1984, 0, zs.Length); return(xys, zs); }
public TMBR GetMBR() { TGeometry geom = this.GetGeometry(); if (geom == null) { return(null); } else { return(geom.GetMBR()); } }
private Geometry GetKmlGeometry(TGeometry geom) { if (geom.IsEmpty() || !geom.IsValid()) { return(null); } switch (geom.GetType().ToString()) { case "RosReestrImp.Geometry.TPoint": return(GetKml((TPoint)geom)); case "RosReestrImp.Geometry.TLineString": return(GetKml((TLineString)geom)); case "RosReestrImp.Geometry.TPolygon": return(GetKml((TPolygon)geom)); case "RosReestrImp.Geometry.TGeometryCollection": case "RosReestrImp.Geometry.TMultiPolygon": return(GetKml((TGeometryCollection)geom)); default: return(null); } }
/// <summary>Добавить сущность</summary> /// <param name="rec">Запись</param> /// <returns></returns> public Feature AddFeature(MyRecord rec) { TGeometry geom = rec.GetGeometry(); FeatureType type = FeatureType.TABFC_NoGeom; if (geom != null) { switch (geom.GetGeometryType()) { case GeometryType.Point: type = FeatureType.TABFC_Point; break; case GeometryType.LineString: type = FeatureType.TABFC_Polyline; break; case GeometryType.Polygon: case GeometryType.MultiPolygon: type = FeatureType.TABFC_Region; break; case GeometryType.No: break; case GeometryType.GeometryCollection: break; default: throw new ArgumentOutOfRangeException(); } if (geom.IsValid()) { return(this.AddFeature(type, this.GetParts(geom), GetFieldValues(rec), null)); } } return(type == FeatureType.TABFC_NoGeom ? this.AddFeature(type, new List <List <Vertex> >(), GetFieldValues(rec), null) : null); }
private List <List <Vertex> > GetParts(TGeometry geom) { List <List <Vertex> > res = new List <List <Vertex> >(); List <Vertex> plist; switch (geom.GetGeometryType()) { case GeometryType.Point: TPoint p = geom as TPoint; res.Add(new List <Vertex>() { new Vertex(p.Coord.X, p.Coord.Y) }); break; case GeometryType.LineString: TLineString ls = geom as TLineString; plist = new List <Vertex>(); foreach (MyPoint np in ls.Coords) { plist.Add(new Vertex(np.X, np.Y)); } res.Add(plist); break; case GeometryType.Polygon: TPolygon poly = geom as TPolygon; foreach (TLineString ring in poly.Rings) { plist = new List <Vertex>(); foreach (MyPoint np in ring.Coords) { plist.Add(new Vertex(np.X, np.Y)); } res.Add(plist); } break; case GeometryType.MultiPolygon: TMultiPolygon mpoly = geom as TMultiPolygon; TPolygon spoly; foreach (TGeometry sg in mpoly.Geometries) { spoly = sg as TPolygon; foreach (TLineString ring in spoly.Rings) { plist = new List <Vertex>(); foreach (MyPoint np in ring.Coords) { plist.Add(new Vertex(np.X, np.Y)); } res.Add(plist); } } break; case GeometryType.No: break; case GeometryType.GeometryCollection: break; default: throw new ArgumentOutOfRangeException(); } return(res); }
private List <List <Vertex> > GetParts(TGeometry geom) { var res = new List <List <Vertex> >(); List <Vertex> plist; switch (geom.GetGeometryType()) { case GeometryType.Point: if (geom is TPoint p) { res.Add(new List <Vertex>() { new Vertex(p.Coord.X, p.Coord.Y) }); } break; case GeometryType.LineString: plist = new List <Vertex>(); if (geom is TLineString ls) { plist.AddRange(ls.Coords .Select(np => new Vertex(np.X, np.Y))); } res.Add(plist); break; case GeometryType.Polygon: if (geom is TPolygon poly) { foreach (var ring in poly.Rings) { plist = ring.Coords.Select(np => new Vertex(np.X, np.Y)).ToList(); res.Add(plist); } } break; case GeometryType.MultiPolygon: if (geom is TMultiPolygon mPoly) { foreach (var ring in mPoly.Geometries.OfType <TPolygon>() .SelectMany(sPoly => sPoly.Rings)) { plist = ring.Coords.Select(np => new Vertex(np.X, np.Y)).ToList(); res.Add(plist); } } break; case GeometryType.No: break; case GeometryType.GeometryCollection: break; default: throw new ArgumentOutOfRangeException(); } return(res); }