7

こんにちは、SQL Server に次のコードがあります。@geog の sTArea を計算したいのに失敗し、@geom で成功するのはなぜですか?、どうすればこのポリゴンをジオメトリから地理データ型に変換して STArea を取得できますか?、ありがとうあなた。

DECLARE @geom geometry;
SET @geom = geometry::STGeomFromText('POLYGON ((-99.213546752929688 19.448402404785156, -99.2157974243164 19.449802398681641, -99.2127456665039 19.450002670288086, -99.213546752929688 19.448402404785156))', 4326); 
select @geom.STArea();

DECLARE @geog geography;
SET @geog = geography::STGeomFromText('POLYGON ((-99.213546752929688 19.448402404785156, -99.2157974243164 19.449802398681641, -99.2127456665039 19.450002670288086, -99.213546752929688 19.448402404785156))', 4326); 
select @geog.STArea();
4

1 に答える 1

14

少し調べてみたところ、この回答How can I convert Geometry data into a Geography data in MS SQL Server 2008? 多かれ少なかれ、http://blogs.msdn.com/b/edkatibah/archive/2008/08/19/working-with-invalid-data-and-the-sql-server-2008-geography-dataを指しています-type-part-1b.aspxは、合理的な説明と機能するコードにつながります。

要点: まず、ジオメトリを有効な地理に変換できることを確認する必要があります。

コード (確かにいくつかの操作を組み合わせることができますが、わかりやすくするためにここで分割しています。)

DECLARE @geog GEOGRAPHY;
DECLARE @geom GEOMETRY;

SET @geom = GEOMETRY::STGeomFromText('POLYGON ((-99.213546752929688 19.448402404785156, -99.2157974243164 19.449802398681641, -99.2127456665039 19.450002670288086, -99.213546752929688 19.448402404785156))', 4326); 
SET @geom = @geom.MakeValid() --Force to valid geometry
SET @geom = @geom.STUnion(@geom.STStartPoint()); --Forces the correct the geometry ring orientation
SET @geog = GEOGRAPHY::STGeomFromText(@geom.STAsText(),4326) 

SELECT @geog.STArea();

また、Spatial Ed のブログ投稿を最後まで読んでいない人のために、重要なヒントを 1 つ掲載しています。多くの場合に機能します。」

于 2013-05-24T15:10:44.640 に答える