GeoDjango lon/lat PointFields distance正在使用几何图形而不是地理位置

2024-06-06 22:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用GeoDjango将lat/lon存储在PointField中,然后查询两个PointField之间的距离(以公里为单位)。导致距离计算返回几何距离而不是地理距离的操作不起作用。我在模型中使用了geography=True,但它似乎没有帮助。我用的是postgispostgresql

型号:

from django.contrib.gis.db import models

class Customer(models.Model):
    location = models.CharField(max_length=100)
    gis_location = models.PointField(u"longitude/latitude",
                                     geography=True, 
                                     blank=True, 
                                     null=True)

测试:

^{pr2}$

输出:

Customer 1:  SRID=4326;POINT (-79.2999999999999972 43.6000000000000014)  
Customer 2:  SRID=4326;POINT (-89.2000000000000028 48.3999999999999986)  
Distance: 11.002272492535353

这只返回两点之间的几何距离,而不是地理距离。有谁能给我一些建议,让它返回球面上的KMs距离?在

谢谢!在


Tags: true距离models单位locationcustomer地理point
1条回答
网友
1楼 · 发布于 2024-06-06 22:16:57

通过阅读文档,我发现GEOSGeometry类中的这种距离计算不考虑SRID,并且与PostGIS数据库直接提供的距离计算不同。在

我使用了python库geopy,它提供了计算距离的distance方法。在

from geopy.distance import distance as geopy_distance
geopy_distance(customer1.gis_location, customer2.gis_location).kilometers

不幸的是,我仍然无法使用Django的GIS库来计算两个Point的距离。在

相关问题 更多 >