1.前言
首先我想喷一下那些写博客写一半的家伙,写的是有头无尾。他们是直接粘贴复制网上的代码。也不管里面的代码都用到了哪些东西,也不知道是不是解决了自己的问题,反正就是直接粘贴,我看了好几篇IGeometry转WKT,WKB的博客。清一色都是粘贴复制,里面用到的类,也不知道是从哪来的,啥也不说,就是粘贴复制,我呸你妹的!就这都不能解我心头之气,真是垃圾。好了不说了,还是言归正传吧。
2. IGeometry转WKT
在ArcEngine中应该是没有直接的方法可以实现(如果有请留言告诉我),但是有IGeometry转WKB的接口
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;
}
但是经过上网查找,发现有个第三方的库,可以将WKB转成WKT,那么就很好办了,首先下载类库,然后添加引用即可,然后调用下面这段代码。
public static byte[] ConvertWKTToWKB(string wkt)
{
WKBWriter writer = new WKBWriter();
WKTReader reader = new WKTReader();
return writer.Write(reader.Read(wkt));
}
调用示例:
string strWKT = ConvertWKBToWKT(ConvertGeometryToWKB(pFeature.Shape as IGeometry));