空間データ型の相互運用をArcObjectsで


Well-Known Text(WKT)は、幾何情報をあつかうテキスト形式

詳しくは以下
http://en.wikipedia.org/wiki/Well-known_text

http://msdn.microsoft.com/ja-jp/library/bb895335(v=sql.105).aspx

バイナリはWell-Known Binary (WKB)

ArcObjectsでは以下の様なコードで変換可能(v10.0)

byte[] shape = (byte[])srcDt.Rows[0]["Shape"];
string pref = (string)srcDt.Rows[0]["PREF"];

IGeometryFactory3 geomfact = new GeometryEnvironmentClass();

ESRI.ArcGIS.Geometry.IGeometry comGeom;
int countin = shape.GetLength(0);
geomfact.CreateGeometryFromWkbVariant(shape, out comGeom, out countin);

shape = (byte[])geomfact.CreateWkbVariantFromGeometry(comGeom);

System.Data.SqlTypes.SqlBytes bytes = new SqlBytes(shape);
Microsoft.SqlServer.Types.SqlGeometry geom = SqlGeometry.STGeomFromWKB(bytes, 0);

Microsoft.SqlServer.Types.SqlGeometryは、以下の様にSQL ServerのDLLを参照
C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll

※バージョン等によって場所は違うので注意

srcDtは、System.Data.DataTable
ESRI OLE DB providerでWKBのByte配列を取っている
http://resources.esri.com/help/9.3/arcgisengine/dotnet/0ec7f577-5dbd-4a60-b1f3-d5ef4a1426e4.htm

これで、Microsoftのサポートしていいるジオメトリ操作が可能
http://msdn.microsoft.com/ja-jp/library/bb895268(v=sql.105).aspx

ArcGISなしでDBにジオメトリ格納-バッファやインターセクト等の基本操作はOK

描画はArcGIS等でQuery Layer等で引っ張ってくる形がとれるのでクラサバのライセンスが,,,(ry

空間データ型が一般化してきている(SQL Server 2008あたりから)ので
ArcSDEの役割が薄れているが、バージョニング等ではまだ存在意義がある?

ArcSDE 10.1から実体がほぼ無くなりレガシーサポート状態?
ライセンスはあるが、ArcCatalogからダイレクト接続が基本系
PostgreSQL/OracleではST_Geometryライブラリを提供するが
SQL Serverは格納型がMicrosoft標準の空間データ型となる。

MSの空間データ型は.NETで回せるし、かなり楽なのでありがたい

ちなみにIGeometryFactory / IWkb共にServerや64ジオプロ用にコンパイルすると正常動作しない
不具合なのか仕様なのか恐らくbyte配列を扱うので64bitのメモリ空間のアドレスを全く考慮していない。

カテゴリー: 開発 タグ: , パーマリンク