回答:
以前は、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_bytesにWKBが保存されています。次のステップに進み、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の 後、使用してWKTに変換することができ、マイクロソフトジオメトリ、作成するために、静的メソッドをSTAsTextを。
また、Microsoftはプロプライエタリであることについて多くの欠点をキャッチしていますが、codeplexのSqlServer Spatial Toolsの多くの便利な機能にソースコードを提供しています。そのため、SqlServerTypesの外部依存性が大きすぎる場合、これを行うソースコードを見つけることができる場合があります。
DNRGPS(ライセンスのオープンソースプロジェクトここでは)との間で変換するための拡張メソッドがあるIGeometry
あなたが使用しないようにそれらを適応させる必要があるだろうが、とWKTをIObjectFactory
あなたがのArcGISアプリケーションの外にそれらを使用したい場合。
ライセンスはかなり寛容に見えるためIObjectFactory
、誰かが興味を持っている場合は、GitHubにスタンドアロンバージョンを使用します(使用しません)。
更新:出力ジオメトリオブジェクトに空間参照を適用し、何も指定されていない場合は整数座標に適したデフォルトの空間参照(Plate Carree)を使用できるように、バージョンにいくつかの改善を加えました。
GeometryBridgeをチェックしてください。役立つかもしれません。 http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//00010000039n000000