使用GeoDjango检索所有最近的点

使用GeoDjango检索所有最近的点,django,postgresql,postgis,geodjango,Django,Postgresql,Postgis,Geodjango,我必须在Django项目中实现一个新特性:我必须检索距离为5km的位置纬度、经度最近的所有对象 因此,我使用Postgres+PostGIS,并集成了GeoDjango 在我的模型中,我有如下内容: class CarLocation(models.Model): carInfo = models.OneToOneField(CarInfo, related_name="carLocation") # Car location info geom = models.Po

我必须在Django项目中实现一个新特性:我必须检索距离为5km的位置纬度、经度最近的所有对象

因此,我使用Postgres+PostGIS,并集成了GeoDjango

在我的模型中,我有如下内容:

class CarLocation(models.Model):

    carInfo = models.OneToOneField(CarInfo, related_name="carLocation")
    # Car location info
    geom = models.PointField(srid=4326, spatial_index=True)
    objects = models.GeoManager()
pnt = fromstr('POINT(-96.876369 29.905320)', srid=4326)
qs = CarLocation.objects.filter(point__distance_lte=(pnt, D(km=5)))
此时,我可以进行如下查询:

class CarLocation(models.Model):

    carInfo = models.OneToOneField(CarInfo, related_name="carLocation")
    # Car location info
    geom = models.PointField(srid=4326, spatial_index=True)
    objects = models.GeoManager()
pnt = fromstr('POINT(-96.876369 29.905320)', srid=4326)
qs = CarLocation.objects.filter(point__distance_lte=(pnt, D(km=5)))
关于这个我有一些问题

这是最好的方式吗

将CarLocation模型与CarInfo表分离是一个好的解决方案吗?在我的回复中,我还必须返回CarInfo中包含的一些信息

在我的模型中,空间_index=True是一个好的解决方案吗

如果我有很多分数,例如500-600k,这仍然很好吗?在这种情况下,是否可以像在Django中一样对结果进行分页


您肯定需要一个空间索引,否则您将搜索整个点集。理想情况下,空间索引将在数据库中存储和构建一次,这样您就不必如此频繁地重建它。存储在远离属性的位置的对象可能有助于磁盘组织。您还可以考虑缓冲查询点,然后对缓冲查询点运行交叉点。@ PeterSmith THX为您的评论…缓冲查询点,然后对缓冲的查询点运行交叉点,这是什么意思?可能重复