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);
            }
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }