ArcGIS Engine IGeometry和WKB的转换

xiaoxiao2021-02-27  431

using System; using System.Collections.Generic; using System.Text; using GisSharpBlog.NetTopologySuite.IO; using ESRI.ArcGIS.Geometry; namespace Utils { /// <summary> /// This class is used to convert a GeoAPI Geometry to ESRI and vice-versa. /// It can also convert a ESRI Geometry to WKB/WKT and vice-versa. /// </summary> public static class Converters { public static byte[] ConvertGeometryToWKB(IGeometry geometry) { IWkb wkb = geometry as IWkb; ITopologicalOperator oper = geometry as ITopologicalOperator; oper.Simplify(); IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3; byte[] b = factory.CreateWkbVariantFromGeometry(geometry) as byte[]; return b; } public static byte[] ConvertWKTToWKB(string wkt) { WKBWriter writer = new WKBWriter(); WKTReader reader = new WKTReader(); return writer.Write(reader.Read(wkt)); } public static string ConvertWKBToWKT(byte[] wkb) { WKTWriter writer = new WKTWriter(); WKBReader reader = new WKBReader(); return writer.Write(reader.Read(wkb)); } public static string ConvertGeometryToWKT(IGeometry geometry) { byte[] b = ConvertGeometryToWKB(geometry); WKBReader reader = new WKBReader(); GeoAPI.Geometries.IGeometry g = reader.Read(b); WKTWriter writer = new WKTWriter(); return writer.Write(g); } public static IGeometry ConvertWKTToGeometry(string wkt) { byte[] wkb = ConvertWKTToWKB(wkt); return ConvertWKBToGeometry(wkb); } public static IGeometry ConvertWKBToGeometry(byte[] wkb) { IGeometry geom; int countin = wkb.GetLength(0); IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3; factory.CreateGeometryFromWkbVariant(wkb, out geom, out countin); return geom; } public static IGeometry ConvertGeoAPIToESRI(GeoAPI.Geometries.IGeometry geometry) { WKBWriter writer = new WKBWriter(); byte[] bytes = writer.Write(geometry); return ConvertWKBToGeometry(bytes); } public static GeoAPI.Geometries.IGeometry ConvertESRIToGeoAPI(IGeometry geometry) { byte[] wkb = ConvertGeometryToWKB(geometry); WKBReader reader = new WKBReader(); return reader.Read(wkb); } } }

// GisSharpBlog.NetTopologySuite.IO 可以使用NuGet包管理器下载,传送门

转载链接:http://www.cnblogs.com/zuiyirenjian/p/3410141.html ArcMap中使用ArcPy实现Geometry与WKT的相互转换:http://blog.csdn.net/linghe301/article/details/29554257(此种方法的缺点,如果线或者面比较复杂,4000的字符串长度根本不够,赋值会出错)

转载请注明原文地址: https://www.6miu.com/read-1598.html

最新回复(0)