1
日付変更線上の最も近い点を効率的に見つける方法は?
数十万のPostGIS POINTを持つPostgreSQL 9.1テーブルがあります。これらのそれぞれについて、POINTの別のテーブルで最も近いポイントを見つけたいと思います。2番目の表の点は、全世界のグリッドを表しています。そのため、常に1度以内で一致することがわかります。これは、これまでに使用したクエリで、GISTインデックスを使用しているため、かなり高速です(合計約30秒)。 SELECT DISTINCT ON (p.id) p.id, ST_AsText(p.pos) , ST_AsText(first_value(g.location) OVER (PARTITION BY p.id ORDER BY ST_Distance(p.pos, g.location::geography))) FROM point p JOIN grid g ON ST_DWithin(p.pos::geometry, g.location, 1) 唯一の問題は日付変更線です。グリッドポイントの緯度は180度のみで、-180ではありません。ST_Distanceのジオメトリバージョンを使用する場合、これは日付変更線の反対側のポイントを返しません。例えば。p.posがPOINT(-179.88056 -16.68833)最も近いグリッドポイントである可能性がありますPOINT(180 -16.25)が、上記のクエリはそれを返しません。これを修正する最良の方法は何ですか? 1つのグリッドポイントに2つの座標(-180と+180)を使いたくありません。この特定のケースをチェックする独自の関数を追加しようとしましたが、おそらくインデックスを使用できなくなったため、クエリが5分で返されません。ST_DWithinの地理バージョンも使用してみましたが、そのクエリも5分後に返されませんでした。