【发布时间】:2018-09-27 02:28:47
【问题描述】:
我正在尝试以英里为单位计算两个位置之间的距离,但是我得到的结果不正确。
我认为它不正确的原因是因为我在website 上放置了位置(纬度和经度),而我得到的距离(以英里为单位)为0.055。这是我的代码中的详细信息
PointField A : (-122.1772784, 47.7001663)
PointField B : (-122.1761632, 47.700408)
Distance : 0.001141091551967795
但是,根据网站,距离应该是
Distance: 0.055 miles
这是我计算距离的方法。
这是我的模特
class modelEmp(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
location = models.PointField(srid=4326,max_length=40, blank=True, null=True)
objects = GeoManager()
这就是我计算距离的方式
result = modelEmpInstance.location.distance(PointFieldBLocation)
where result = 0.001141091551967795
关于我在这里可能做错了什么以及为什么我的结果与网站不同的任何建议?
【问题讨论】:
-
FWIW 我刚刚在 Google 地球中输入了您的点,并测量了 282 英尺或 0.0534091 英里之间的直接距离
-
这意味着另一个网站是正确的,由于某种原因我在代码中的计算是错误的
-
变量
modelEmpInstance和PointFieldBLocation来自哪里? (旁注 - 如果您使用 PEP8 conventions,您的代码对其他人的可读性会更高 - 使用驼峰命名法表示变量是不受欢迎的)。 -
答案是正确的——以度为单位!我对 GeoDjango 知之甚少,无法给出答案,但要从 PostGIS 获得以米为单位的结果,您要么需要以米为单位的 SRID,要么使用地理而不是几何类型,或者使用 st_distance_sphere。由于您的距离非常小,您最准确的选择可能是使用本地投影。
标签: django geospatial postgis geodjango