Answers:
过去,我使用过Sharpmap的转换器,但是我必须先进入WKB。我不知道现在是否是最好的选择。
SharpMap.Geometries.IGeometry sharpGeom = SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse(geombytes);
wkt = SharpMap.Converters.WellKnownText.GeometryToWKT.Write(sharpGeom);
我也不知道当前的SharpMap存储库在哪里,但是我确实在这里找到了该类的引用:
当时,我想我在使用Codeplex的SharpMap。
我忘了ZigGIS。您也许可以在该代码上进行构建-此链接是较旧的Ziggis。我认为这是可行的aoPolygonToWkt,aoPointToWkt,aoPolylineToWkt方法:https: //code.google.com/archive/p/ziggis/downloads
使用IWkb接口可以很好地完成IGeometry和WKB之间的转换。从WKB,您可以使用Microsoft.SqlServer.Types库将WKB转换为SqlGeometry,然后再转换回WKT。
IWkb wkb = geometry as (IWkb); //(Where geometry is an instance of IGeometry)
byte[] wkb_bytes = new byte[wkb.WkbSize];
int byte_count = wkb.WkbSize;
wkb.ExportToWkb(ref byte_count, out wkb_bytes[0]);
此时,您已将WKB存储在wkb_bytes中。如果要转到SqlGeometry然后转到WKT,请执行以下步骤:
SqlGeometry sqlGeom = SqlGeometry.STGeomFromWKB(new SqlBytes(wkb_bytes), srid);
string wkt = sqlGeom.ToString();
srid
这里的选择。我用了这个:int srid = feature.Shape.SpatialReference.FactoryCode;
您是否同意该实现?
您可以尝试引用Microsoft.SqlServer.Types程序集(我相信它包含在免费的Sql Server Express版本中),然后使用STGeomFromWKB 静态方法创建一个Microsoft几何,然后可以使用STAsText将其转换为WKT 。
还应注意,尽管Microsoft在专有性方面有很多缺点,但他们确实在Codeplex 的SqlServer Spatial Tools中为许多有用的功能提供了源代码。因此,如果SqlServerTypes对您来说过多的外部依赖关系,您也许可以找到执行此操作的源代码。
该DNRGPS开放源代码项目(牌这里)有扩展方法之间的转换IGeometry
和高铁总站,但你必须去适应他们不要使用IObjectFactory
,如果你想使用它们的ArcGIS应用程序之外。
该许可看起来很宽松,因此IObjectFactory
如果有人感兴趣,我将其独立版本(不使用)放到GitHub上:
更新:我对我的版本进行了一些改进,以支持为输出几何对象应用空间参考,并且如果未指定,则使用整数坐标友好的默认空间参考(Plate Carree)。
查看GeometryBridge,它可能会为您提供帮助。 http://help.arcgis.com/zh-CN/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//00010000039n000000