私は Sql Server 2008 のジオメトリ データ型を見ていますが、興味深いように見えますが、ドキュメントはそれほど良くないようです。円錐、円柱、球を WKT 形式で保存できますか? これらのフィーチャは従来、数百のポイントではなく、半径を持っています。
3 に答える
私の知る限りでは、外部アプリケーションを使用してシェイプを多数のポイントとしてレンダリングする必要があります。円をレンダリングする手法については、このブログを参照してください。
考慮すべき 1 つの可能性は、必要な図形をレンダリングするための CLR プロシージャと、インデックス付きのビューです。それがどれほどうまく機能するかはわかりませんが、うまくいくかもしれません。
返事が遅れて申し訳ありません。2 つのプロパティ、つまりCentroidとRadiusを使用して、 Circleという名前の独自のUser-Defined-Typeをいつでも作成できます。
新しく形成された UDT 内で、プロパティ Centroid ( Point3D ) と Radius ( Double )を取るメソッドを作成します。この後、 SqlGeometryとSqlGeometryBuilderの両方を使用して新しく形成されたオブジェクトを構築するメソッドを作成します。
まず、GeometryのPointインスタンスを作成します。クラス オブジェクトから Centroid 値を継承し、 Pointオブジェクトから派生した別のGeometry Polygonを作成し、それをSTBuffer ( Radius ) にします。
以下は私の例です:(30分で書かれました)
public SqlGeometry ToSQLGeometry()
{
int srid = this.SRID; // i.e. 4326
SqlGeometry geom = new SqlGeometry();
SqlGeometryBuilder gb = new SqlGeometryBuilder();
OpenGisGeometryType pt = OpenGisGeometryType.Point;
gb.SetSrid(srid);
gb.BeginGeometry(pt);
gb.BeginFigure(this.Centroid.X, this.Centroid.Y, this.Centroid.Z, this.Centroid.M);
gb.EndFigure();
gb.EndGeometry();
geom = gb.ConstructedGeometry;
geom = geom.MakeValid(); // Optional for Point data
SqlGeometry geomCircle = new SqlGeometry();
geomCircle = geom.STBuffer(this.Radius);
return geomCircle;
}
CLR プロジェクト タイプを使用して VS2010 でこれを行ったら、それをデータベースにデプロイできます。
SQL では、次のようにオブジェクトを呼び出すことができます:: Parse(XYZM,R)
declare @c Circle
set @c = Circle::Parse('5 6 7 8,2')
select 'Circle', @c.ToString(), @c.ToSQLGeometry()
ざっと見てみると、Spatial Samplesでこの MSDN ページが見つかりました。WKT、WKB、および XML(GML) でデータを入力するためのすべてのメソッドと、人間が読める形式で表示するための関数をカバーしています。MakeValid、STIsValid、STSrid もカバーしています。
役に立つと思われる SQL の例はかなり少ないようです。