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で「最近点」クエリを実行するより良い方法はありますか?