ArcGIS Engine IGeometry和WKB的转换
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://blog.csdn.net/yh0503/article/details/71158193