3

私は現在、Googleマップをアプリケーションの1つに統合する過程にあります。要件の1つは、ユーザー定義領域をデータベースに保管することです。これを行うために、SQL Server 2008でGeographyタイプを使用しています。ほとんどの部分で機能している間に、ブロッキングの問題が発生しました。

以下にいくつかのサンプルコードがあります。GeographyオブジェクトにGMLXML文字列を入力していますが、一部のインスタンスは機能し、一部は機能せず、機能しない論理的な理由がわかりません。

DECLARE @geoWork GEOGRAPHY
DECLARE @geoNotWork GEOGRAPHY
DECLARE @Work NVARCHAR(MAX)
DECLARE @DoesntWork NVARCHAR(MAX)

SET @Work = '<Polygon xmlns="http://www.opengis.net/gml">' +
             '<exterior>' +
             '<LinearRing>' +
             '<posList>' +
             '61.52269494598361 -6.50390625 50.84757295365389 -36.5625 32.69486597787505 -17.40234375 46.31658418182218 23.90625 61.52269494598361 -6.50390625' +
             '</posList>' +
             '</LinearRing>' +
             '</exterior>' +
             '</Polygon>'
SET @DoesntWork = '<Polygon xmlns="http://www.opengis.net/gml">' +
                  '<exterior>' +
                  '<LinearRing>' +
                  '<posList>' +
                  '51.8591074413996 -0.8425140380859375 51.790355567911845 -0.7051849365234375 51.75381501386028 -0.8191680908203125 51.80564283054998 -0.9180450439453125 51.8591074413996 -0.8425140380859375' +
                  '</posList>' +
                  '</LinearRing>' +
                  '</exterior>' +
                  '</Polygon>'

SET @geoWork = GEOGRAPHY::GeomFromGml(@Work, 4326)
SET @geoNotWork = GEOGRAPHY::GeomFromGml(@DoesntWork, 4326)

SELECT @geoWork.AsGml()
SELECT @geoNotWork.AsGml()

動作しているポリゴンは(いくつかの国のサイズにまたがる)巨大な領域を定義しますが、機能していないポリゴンは大きな町のサイズについて定義しません。失敗しているのは、これらの「より小さな」領域だけです。迷惑なことに、この小さいものは、私が必要とするものに対して十分に小さくなりません。なぜこれが起こっているのか誰か教えてもらえますか?

4

1 に答える 1

2

失敗した例では、データの方向が間違っています。

ポリゴンの内側と外側を追跡できるようにするために、SQLgeographyタイプでは、ポリゴンが正しいリング方向を持っている必要があります。これについての詳細、そこから:

楕円体システムでは、ポリゴンは方向性がないと意味がないか、あいまいです。たとえば、赤道の周りのリングは北半球または南半球を表していますか?地理データ型を使用して空間インスタンスを格納する場合は、リングの方向を指定し、インスタンスの場所を正確に記述する必要があります。楕円体システムのポリゴンの内部は、左側の法則によって定義されます。

それを修正する方法:

T-SQLを使用したSQLServer2008でのポリゴンリングの向きの「修正」

于 2012-06-26T15:56:48.957 に答える