6

postGISでGeoDjangoを使用するのはこれが初めてです。インストールとすべてが正常に実行されているいくつかのテストの後、テーブルの行が大きくなるときのクエリのパフォーマンスが心配です。

Googleジオコーディング(WGS84、またはSRID 4326)から取得したジオメトリポイントの経度と緯度を保存しています。私の問題は、距離操作が私のアプリケーションで非常に一般的であるということです。私はしばしばランドマークからスポットに近づく必要があります。幾何学の計算は非常に複雑なので、空間インデックスを持っていても、近くのエリアに1000を超えるスポットがあると、将来的には時間がかかりすぎる可能性があります。

では、このジオメトリタイプを投影して、距離操作をより高速に実行する方法はありますか?これらのポイントのいくつかを含むGoogleマップをレンダリングできるDjangoライブラリを知っている人はいますか?

GeoDjangoで空間クエリを高速化する方法に関するアドバイスはありますか?

4

3 に答える 3

3

私はこのトピックについて研究しています。私が見つけた限りでは、geopy ライブラリから取得した座標は SRID 4326 形式であるため、ジオメトリ フィールド タイプに問題なく格納できます。これは、ジオメトリを使用した GeoDjango モデルの例です。

class Landmark(models.Model):
   point = models.PointField(spatial_index = True,
                           srid = 4326,
                           geography = True)

   objects = models.GeoManager()

ところで、経度/緯度を正確な順序で PointField に渡すには十分注意してください。geopy は緯度/経度の座標を返すため、それらを逆にする必要があります。

ある座標系のポイントを別の座標系に変換するには、GeoDjango で GEOS を使用できます。この例では、4326 のポイントを有名な Google 投影 900913 に変換します。

from django.contrib.gis.geos import Point
punto = Point(40,-3)
punto.set_srid(900913)
punto.transform(4326)
punto.wkt
Out[5]: 'POINT (0.0003593261136478 -0.0000269494585230)'

このようにして、座標を投影システムに保存できるため、計算のパフォーマンスが向上します。管理サイト インターフェイスで Google マップにポイントを表示するため。この素晴らしい記事を使用できます。

geography タイプを使用することにしました。パフォーマンスを改善する必要がある場合に備えて、将来的に変換します。

于 2010-08-27T14:08:38.670 に答える
3

作業領域を地図投影に合わせることができれば、距離計算などに必要な数学呼び出しが少なくなるため、常に高速になります。ただし、真にグローバルなデータがある場合は、それを吸い上げます。地理を使用してください。米国本土のデータしかない場合は、EPSG:2163 http://spatialreference.org/ref/epsg/2163/のようなものを使用します。

作業領域を制限すればするほど、地図投影でより正確な結果を得ることができます。米国の地域の高度に制約された正確な予測については、州平面の予測を参照してください。または、より大きな準国家地域の UTM 予測。

于 2010-08-24T17:09:24.413 に答える
0

通常、GeoDjango は必要に応じてジオメトリ列に空間インデックスを作成して使用します。

ポイント間の距離を主に扱うアプリケーションの場合、Geography タイプ(PostGIS 1.5 で導入され、GeoDjango でサポートされている) が適している場合があります。GeoDjango は、「WGS84 距離クエリのパフォーマンスが大幅に向上する」[リンク]と述べています。

于 2010-08-23T19:50:30.427 に答える