python - 在 GeoDjango 中获取距离最近的几何图形的最快方法

标签 python django geodjango

我在 WGS84 坐标系中有大量点(约 150 万个)。这些点跨越很大的区域,因此我无法使用投影坐标系。我想找到距离给定的输入坐标对最近的点。我有一个工作 View ,但执行时间太长(约 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()

这是 View 中的查询(我从另一个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 进行“最近点”查询?

最佳答案

不确定,这可能会更快。您可以使用 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

关于python - 在 GeoDjango 中获取距离最近的几何图形的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915801/

相关文章:

python - 使用 GeoDjango 获取相关位置字段

python - 如何在连字符之前获取字符串

python - 从列表中生成循环批处理

python - python django View 中的错误

Django 中间件和 HttpRequest 的变化

django.db.utils.ProgrammingError : type "raster" does not exist

python - python 中的多重继承以及向继承类传递参数

python - 按模型创建记录

python - 用于按类别生成产品的模板过滤器

python - psycopg2.操作错误: fe_sendauth: no password supplied