2つのGeography変数を宣言したSQLクエリがあり、次にそれらに値が割り当てられた後にポリゴンの中心点を検索しようとしています変数。Geography変数でEnvelopeCenterを使用すると、SQL Serverで正しい値が返されない
DECLARE @g1 GEOGRAPHY;
DECLARE @g2 GEOGRAPHY;
SET @g1 = geography::STGeomFromText('POLYGON((-90.06875038146973 35.512324341620996,-90.06767749786377 35.51504904492378,-90.06407260894775 35.51499664765537,-90.06381511688232 35.512219543493465,-90.06875038146973 35.512324341620996))',4326);
SET @g2 = geography::STGeomFromText('POLYGON ((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))',4326);
SELECT @g1 AS 'G1' ,
@g2 AS 'G2';
SELECT 'G1' AS 'Polygon' ,
@g1.EnvelopeCenter().Lat AS 'Lat' ,
@g1.EnvelopeCenter().Long AS 'Long'
UNION ALL
SELECT 'G2' AS 'Polygon' ,
@g2.EnvelopeCenter().Lat AS 'Lat' ,
@g2.EnvelopeCenter().Long AS 'Long'
は次に、第2のポリゴンのために、それは47.6545001086162、-122.352999904254として正しく中央緯度/ long値を返します。
は、これは私のコードです。しかし、最初のものでは、90、0の値を返します。
最初のポリゴンの中心点が正しくないのはなぜですか?何らかの理由でこのようにできない場合は、WKT文字列の中心点を見つけることができる他の方法がありますか?
これは完璧です! 35.513、-90.066が私が期待していたものです。しかし、私は通常、入力されたポイントのシーケンスを制御しませんし、私のポリゴンのいくつかには穴があります。値が90、0の場合は、スペースを逆にする方法はありますか?手動でポイントシーケンスを変更すると、特にポリゴンに穴がある場合は乱雑になる可能性があります。 – Raj
できない場合は問題ありません。私は代わりに 'ジオメトリ'変数の重心を返すSTCentroid()メソッドを使用して同様の値を得ることが可能であることを発見しました(ちょうどおおよその値が必要でした)。その場合、シーケンスは重要ではないようです。しかし、私はそれが可能かどうか疑問に思っていただけです。どちらのケースでも、私の問題を解決してくれてありがとう! – Raj
@Raj - 'STArea'を使ってサニティチェックを追加することもできます。もしそれがかなり大きければ、現在の地理と' FullGlobe'の間に 'STDifference'を使うことができますか? –