1

Django で Web アプリを開始しています。これは、1 つの簡単なタスクを提供する必要があります。他のレコードに十分近い DB からすべてのレコードを取得します。

例: 私は latlang (50, 10) を使用しており、私から 5 km 以内にある latlang のすべてのレコードを取得する必要があります。

GeoDjango と呼ばれる geodjango を見つけましたが、GEOS、POSTGIS、およびその他の必要のない他の多くの依存関係とライブラリが含まれています。この 1 つの範囲機能だけが必要です。

では、GeoDjango を使用するか、独自の範囲計算クエリを作成する必要がありますか?

4

1 に答える 1

2

絶対に自分で書いてはいけません。地理データに慣れると、この特定の計算がまったく単純ではないことに気付くでしょう。詳細な議論については、たとえばこの質問を参照してください。ただし、その質問で与えられた解決策 (回答) のほとんどは、おおよその結果しか生成しません。地球が完全な球体ではないことも一因です。

一方、mysql (5.7 以降) または postgresql の地理空間拡張機能を使用する場合は、ST_DWithin関数を利用できます。

ST_DWithin — ジオメトリが互いに指定された距離内にある場合に true を返します。ジオメトリの単位は空間参照の単位であり、地理の単位はメートルであり、測定はデフォルトで use_spheroid=true (回転楕円体の周囲を測定) に設定されています。チェックを高速化するには、use_spheroid=false を使用して球に沿って測定します。

ST_DWithin は、自家製のソリューションでは使用できない空間インデックスを利用します。GeoDjango が有効になっている場合、ST_DWithin はdwithinの形式で django クエリセットへのフィルターとして使用できるようになります

最後になりましたが、独自のコードを作成する場合、それをテストするためにも多くのコードを作成する必要があります。一方、dwithin は徹底的にテストされています。

于 2015-09-24T14:16:45.323 に答える