⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntsgeometryconverter.cs

📁 C# 的地图开发例子(sharp map)
💻 CS
📖 第 1 页 / 共 2 页
字号:
            SharpMap.Geometries.LinearRing exterior = new SharpMap.Geometries.LinearRing(vertices);
            return new SharpMap.Geometries.Polygon(exterior);
        }

        /// <summary>
        /// Converts the <see cref="SharpMap.Geometries.BoundingBox"/> instance <paramref name="boundingBox"/>
        /// into a correspondant <see cref="GisSharpBlog.NetTopologySuite.Geometries.Envelope"/>.
        /// </summary>
        /// <param name="boundingBox"></param>
        /// <returns></returns>
        public static GisSharpBlog.NetTopologySuite.Geometries.Envelope ToNTSEnvelope(SharpMap.Geometries.BoundingBox boundingBox)
        {            
            return new GisSharpBlog.NetTopologySuite.Geometries.Envelope(boundingBox.Min.X, boundingBox.Max.X, boundingBox.Min.Y, boundingBox.Max.Y);
        }

        #region Internal NTS Converters     
   
        internal static GisSharpBlog.NetTopologySuite.Geometries.Coordinate ToNTSCoordinate(SharpMap.Geometries.Point point, 
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {            
            return new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(point.X, point.Y);               
        }
        
        internal static GisSharpBlog.NetTopologySuite.Geometries.Point ToNTSPoint(SharpMap.Geometries.Point point,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            return factory.CreatePoint(ToNTSCoordinate(point, factory));            
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.LineString ToNTSLineString(SharpMap.Geometries.LineString lineString,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.Coordinate[] coordinates = new GisSharpBlog.NetTopologySuite.Geometries.Coordinate[lineString.NumPoints];
            int index = 0;
            foreach (SharpMap.Geometries.Point point in lineString.Vertices)
                coordinates[index++] = ToNTSCoordinate(point, factory);
            return factory.CreateLineString(coordinates);
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.LinearRing ToNTSLinearRing(SharpMap.Geometries.LinearRing linearRing,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.Coordinate[] coordinates = new GisSharpBlog.NetTopologySuite.Geometries.Coordinate[linearRing.NumPoints];
            int index = 0;
            foreach (SharpMap.Geometries.Point point in linearRing.Vertices)
                coordinates[index++] = ToNTSCoordinate(point, factory);
            return factory.CreateLinearRing(coordinates);
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.Polygon ToNTSPolygon(SharpMap.Geometries.Polygon polygon,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.LinearRing shell = ToNTSLinearRing(polygon.ExteriorRing, factory);
            GisSharpBlog.NetTopologySuite.Geometries.LinearRing[] holes = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing[polygon.InteriorRings.Count];
            int index = 0;
            foreach (SharpMap.Geometries.LinearRing hole in polygon.InteriorRings)
                holes[index++] = ToNTSLinearRing(hole, factory);
            return factory.CreatePolygon(shell, holes);
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.MultiPoint ToNTSMultiPoint(SharpMap.Geometries.MultiPoint multiPoint,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.Point[] points = new GisSharpBlog.NetTopologySuite.Geometries.Point[multiPoint.Points.Count];
            int index = 0;
            foreach (SharpMap.Geometries.Point point in multiPoint.Points)
                points[index++] = ToNTSPoint(point, factory);
            return factory.CreateMultiPoint(points);
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.MultiLineString ToNTSMultiLineString(SharpMap.Geometries.MultiLineString multiLineString,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.LineString[] lstrings = new GisSharpBlog.NetTopologySuite.Geometries.LineString[multiLineString.LineStrings.Count];
            int index = 0;
            foreach (SharpMap.Geometries.LineString lstring in multiLineString.LineStrings)
                lstrings[index++] = ToNTSLineString(lstring, factory);
            return factory.CreateMultiLineString(lstrings);
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.MultiPolygon ToNTSMultiPolygon(SharpMap.Geometries.MultiPolygon multiPolygon,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.Polygon[] polygons = new GisSharpBlog.NetTopologySuite.Geometries.Polygon[multiPolygon.Polygons.Count];
            int index = 0;
            foreach (SharpMap.Geometries.Polygon polygon in multiPolygon.Polygons)
                polygons[index++] = ToNTSPolygon(polygon, factory);
            return factory.CreateMultiPolygon(polygons);
        }

        internal static GisSharpBlog.NetTopologySuite.Geometries.GeometryCollection ToNTSGeometryCollection(SharpMap.Geometries.GeometryCollection geometryCollection,
            GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
        {
            GisSharpBlog.NetTopologySuite.Geometries.Geometry[] geometries = new GisSharpBlog.NetTopologySuite.Geometries.Geometry[geometryCollection.Collection.Count];
            int index = 0;
            foreach (SharpMap.Geometries.Geometry geometry in geometryCollection.Collection)
                geometries[index++] = ToNTSGeometry(geometry, factory);
            return factory.CreateGeometryCollection(geometries);
        }

        #endregion

        #region Internal SharpMap Converters

        internal static SharpMap.Geometries.Point ToSharpMapPoint(GisSharpBlog.NetTopologySuite.Geometries.Coordinate coordinate)
        {            
            return new SharpMap.Geometries.Point(coordinate.X, coordinate.Y);
        }

        internal static SharpMap.Geometries.Point ToSharpMapPoint(GisSharpBlog.NetTopologySuite.Geometries.Point point)
        {            
            Debug.Assert(point.Coordinates.Length == 1);
            return ToSharpMapPoint(point.Coordinate);
        }

        internal static SharpMap.Geometries.LineString ToSharpMapLineString(GisSharpBlog.NetTopologySuite.Geometries.LineString lineString)
        {
            Collection<SharpMap.Geometries.Point> vertices = new Collection<SharpMap.Geometries.Point>();
            foreach (GisSharpBlog.NetTopologySuite.Geometries.Coordinate coordinate in lineString.Coordinates)
                vertices.Add(ToSharpMapPoint(coordinate));            
            return new SharpMap.Geometries.LineString(vertices);
        }

        internal static SharpMap.Geometries.LinearRing ToSharpMapLinearRing(GisSharpBlog.NetTopologySuite.Geometries.LinearRing lineString)
        {
            Collection<SharpMap.Geometries.Point> vertices = new Collection<SharpMap.Geometries.Point>();
            foreach (GisSharpBlog.NetTopologySuite.Geometries.Coordinate coordinate in lineString.Coordinates)
                vertices.Add(ToSharpMapPoint(coordinate));
            return new SharpMap.Geometries.LinearRing(vertices);
        }

        internal static SharpMap.Geometries.Polygon ToSharpMapPolygon(GisSharpBlog.NetTopologySuite.Geometries.Polygon polygon)
        {
            SharpMap.Geometries.LinearRing exteriorRing = ToSharpMapLinearRing((GisSharpBlog.NetTopologySuite.Geometries.LinearRing)polygon.ExteriorRing);
            Collection<SharpMap.Geometries.LinearRing> interiorRings = new Collection<SharpMap.Geometries.LinearRing>();
            foreach (GisSharpBlog.NetTopologySuite.Geometries.LineString interiorRing in polygon.InteriorRings)
                interiorRings.Add(ToSharpMapLinearRing((GisSharpBlog.NetTopologySuite.Geometries.LinearRing)interiorRing));
            return new SharpMap.Geometries.Polygon(exteriorRing, interiorRings);
        }

        internal static SharpMap.Geometries.MultiPoint ToSharpMapMultiPoint(GisSharpBlog.NetTopologySuite.Geometries.MultiPoint multiPoint)
        {
            SharpMap.Geometries.MultiPoint collection = new SharpMap.Geometries.MultiPoint();
            foreach(GisSharpBlog.NetTopologySuite.Geometries.Point point in multiPoint.Geometries)
                collection.Points.Add(ToSharpMapPoint(point));
            return collection;
        }

        internal static SharpMap.Geometries.MultiLineString ToSharpMapMultiLineString(GisSharpBlog.NetTopologySuite.Geometries.MultiLineString multiLineString)
        {
            SharpMap.Geometries.MultiLineString collection = new SharpMap.Geometries.MultiLineString();
            foreach (GisSharpBlog.NetTopologySuite.Geometries.LineString lineString in multiLineString.Geometries)
                collection.LineStrings.Add(ToSharpMapLineString(lineString));
            return collection;
        }

        internal static SharpMap.Geometries.MultiPolygon ToSharpMapMultiPolygon(GisSharpBlog.NetTopologySuite.Geometries.MultiPolygon multiPolygon)
        {
            SharpMap.Geometries.MultiPolygon collection = new SharpMap.Geometries.MultiPolygon();
            foreach (GisSharpBlog.NetTopologySuite.Geometries.Polygon polygon in multiPolygon.Geometries)
                collection.Polygons.Add(ToSharpMapPolygon(polygon));
            return collection;
        }

        internal static SharpMap.Geometries.GeometryCollection ToSharpMapGeometryCollection(GisSharpBlog.NetTopologySuite.Geometries.GeometryCollection geometryCollection)
        {
            SharpMap.Geometries.GeometryCollection collection = new SharpMap.Geometries.GeometryCollection();
            foreach (GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry in geometryCollection.Geometries)
                collection.Collection.Add(ToSharpMapGeometry(geometry));
            return collection;
        }

        #endregion

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -