为什么 Geopy Distance.Distance 错误?

8

从 GeoDjango 点字段中,我得到了以下点:

object1.point = "POINT(-113.4741271000000040 53.4235217000000020)"
object2.point = "POINT(-113.5013688000000229 53.5343457999999970)"

然后我使用geopy计算距离:

from geopy import distance
from geopy import Point

p1 = Point("-113.4741271000000040 53.4235217000000020")
p2 = Point("-113.5013688000000229 53.5343457999999970")
result = distance.distance(p1,p2).kilometers
print result
# 5.791490830933827

但使用这个工具:http://www.movable-type.co.uk/scripts/latlong.html,我得到了一个距离为12.45公里。

为什么会有这么大的差异呢?


我使用你提供的工具得到了5.77公里的结果。你能再试一次吗? - Nick ODell
1个回答

14

你的经度/纬度顺序是错误的。尝试使用以下方式:

p1 = Point("53.4235217000000020 -113.4741271000000040")
p2 = Point("53.5343457999999970 -113.5013688000000229")

结果为12.466096663282977


我假设你是在埃德蒙顿测量,而不是在南极洲的某个地方 :) - Maria Zverina
2
你是对的,Edmonton的经纬度是正确的。纬度为53,经度为-113。但是,在Geodjango PointField中表示一个点时,应该写成"POINT({lon} {lat})"。使用geopy时,是不是应该写成Point("{lat} {lon}")?(请参见更正)。如果是这样的话,我该如何找到两个GeoDjango点字段之间的距离呢? - pmah
不确定 - 不熟悉GeoDjango类。您可能想发布一个django问题。 :) 您尝试过通过字符串进行明显的转换吗?此外,我对使用lon/lat而不是非常传统的lat/log的任何框架持怀疑态度。 :) - Maria Zverina
使用 C. F. F. Karney 的 GeographicLib(http://geographiclib.sourceforge.net/)中的 Python 模块(http://geographiclib.sourceforge.net/html/other.html#python)的 Geodesic.WGS84.Inverse() 方法,我得到了 12466.096663762537 米。FWIW。 - PM 2Ring
1
为了记录: geopy有一个lonlat()方法,可以将(lon, lat)元组转换为(lat, lon)元组。如果您有一个Django Point实例,可以使用 .tuple 属性,这样您就可以执行:lonlat(*my_pnt.tuple)。顺便说一下:纬度/经度的顺序不可避免地没有标准化,并且在系统中存在很大差异,所以这不是geopy/Django对或错的问题。 - gitaarik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接