我在 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 进行“最近点”查询?