我正在尝试计算以英里为单位的两个位置之间的距离,但是我得到的结果不正确。
我认为它不正确的原因是因为我在此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
关于我在这里可能做错了什么以及为什么我的结果与网站不同的任何建议吗?
答案 0 :(得分:2)
您的计算没错,但是结果以EPSG:4326
的单位为degrees
为单位。为了计算所需单位的距离,我们需要执行以下操作:
将这些点转换为meter
个单位的EPSG。
EPSG:3857
(但结果将是0.08104046068988752mi
)。32148
。创建一个Distance
对象,其距离计算单位为米
最后,将其转换为miles
:
from django.contrib.gis.measure import Distance
result = Distance(
m = modelEmpInstance.location.transform(
32148, clone=True
).distance(PointFieldBLocation.transform(32148, clone=True)
)
print(
'Raw calculation: {}\nRounded calculation: {}'
.format(result.mi, round(result.mi, 2)
)
这将打印:
Raw calculation: 0.0546237743898667
Rounded calculation: 0.055