6

私はPostGISでGeoDjangoを使用しており、ポリゴンを使用してデータベースからレコードを取得しようとしています。

地球の面積の半分よりも大きいポリゴンを定義すると、ポリゴンの「内側」が「外側」として意図したより小さい領域であると想定され、その外側にある結果のみが返されます。

この小さく間違った領域を使用して、結果を除外することができます。Polygon.area は私の意図を知っているように見えるので、これを使用して検索をいつ包括的または排他的にするかを判断できます。この問題はおそらく一般的だと思いますが、それを解決するより良い方法はありますか?

更新: 180 度の経度がポリゴン内にある場合、これはまったく機能しません。今回は GEOS のせいのようです。この画像は、私が信じている理由を示しています。緑は私が定義した多角形で、赤はそれをどのように解釈しているように見えるかです。地球上のポリゴン繰り返しになりますが、これは頻繁に発生する問題のようであり、GEOS のようなライブラリが対処するように作られています。方法はありますか?

4

1 に答える 1

6

わかりました、答えはありません。これが私がやったことです。

GEOS は 180 度子午線を横切るものを好まないため:
まず、ポリゴンが 180 度子午線を横切るかどうかを確認します。交差している場合は、その線に沿って 2 つのポリゴンに分割します。

PostGIS はポリゴンが可能な限り小さいと想定しているため、1 つのポリゴンで世界の半分以上をカバーすることはできません。そのため
、ポリゴンまたは分割された各ポリゴンが世界の半分以上をカバーしているかどうかを確認します。そうであれば、半分に分割します。

結果から MultiPolygon を構築します。

于 2011-04-25T01:05:21.113 に答える