【问题标题】:Why is Geopy Distance.Distance wrong?为什么 Geopy Distance.Distance 错误?
【发布时间】:2012-06-13 04:52:02
【问题描述】:

从 GeoDjango Point Field,我得到以下几点:

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 公里。你能再试一次吗?

标签: python geopy


【解决方案1】:

您的纬度/经度方向错误。试试:

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

给我结果 = 12.466096663282977

【讨论】:

  • 我假设您在埃德蒙顿而不是在南极洲某处测量 :)
  • 你是对的,埃德蒙顿是对的。纬度 = 53,经度 = -113。但是,当在 Geodjango PointField 中表示一个点时,它是作为“POINT({lon} {lat})”完成的。使用geopy,它是Point(“{lat} {lon}”)吗? (见更正)。如果是这种情况,我将如何找到两个 GeoDjango 点场之间的距离?
  • 不确定 - 不熟悉 GeoDjango 类。您可能想发布一个 django 问题。 :) 您是否尝试过通过字符串进行明显的转换?此外,我怀疑任何使用 lon/lat 而不是非常传统的 lat/log 的框架。 :)
  • FWIW,使用 Geodesic.WGS84.Inverse() 方法 (the Python module from C. F. F. Karney's GeographicLib 我得到 12466.096663762537 米。
  • 为了文档起见:geopy 有一个 lonlat() 方法将 (lon, lat) 元组转换为 (lat, lon) 元组。如果你有一个 Django Point 实例,你可以使用.tuple 属性,所以你可以这样做:lonlat(*my_pnt.tuple)。顺便说一句:不幸的是,纬度/经度的顺序没有标准化,并且在系统中差异很大,所以这不是 geopy/Django 错误或正确的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2013-04-20
  • 1970-01-01
相关资源
最近更新 更多