1

WGS84 座標系に多数のポイント (約 150 万) があります。ポイントは広い領域にまたがるので、投影座標系は使用できません。特定の入力座標のペアに最も近い点を見つけたい。作業中のビューがありますが、実行に時間がかかりすぎます (~2.5 秒)。

これは私のモデルです:

from django.contrib.gis.db import models

class Point(models.Model):

    id = models.IntegerField(primary_key=True)
    geom = models.PointField(srid=4326, spatial_index=True)

    objects = models.GeoManager()

これは、ビュー内のクエリです (別の SO の質問から取得しました)。

input_point = GEOSGeometry('POINT({0} {1})'.format(lon, lat))
point = Point.objects.distance(input_point).order_by('distance')[0]

これをより速く行う方法はありますか?SQLAlchemy/GeoAlchemy2 に同等のクエリがあり、実行に 0.5 秒もかからないので、それが可能であることはわかっています。

from geoalchemy2.elements import WKTElement

pt = WKTElement('POINT({0} {1})'.format(lon, lat), srid=4326)
q = session.query(Point).order_by(Point.geom.distance_box(pt)).first()

GeoDjangoで「最近点」クエリを実行するより良い方法はありますか?

4

1 に答える 1

4

確かではありませんが、これはより速いかもしれません。Google 投影 ( 900913) を使用して、データをメートル単位で取得できます。

from django.contrib.gis.measure import D

DISTANCE_LIMIT_METERS = 5000

input_point = Point(lon, lat, srid=4326)
input_point.transform(900913)
ModelContainingPoint.objects.filter(geom__dwithin=(input_point , D(m=DISTANCE_LIMIT_METERS)))

参照:

https://docs.djangoproject.com/en/dev/ref/contrib/gis/db-api/#distance-queries

于 2013-04-10T05:39:31.233 に答える