【发布时间】:2011-09-03 20:23:38
【问题描述】:
可以不使用地图,仅使用经度和纬度来计算行车距离吗?
我正在编写服务器端应用程序,并尽量避免使用 Web 服务、API 和第三方工具。
你能帮我实现这个目标吗?
【问题讨论】:
可以不使用地图,仅使用经度和纬度来计算行车距离吗?
我正在编写服务器端应用程序,并尽量避免使用 Web 服务、API 和第三方工具。
你能帮我实现这个目标吗?
【问题讨论】:
使用您拥有的数据
你可以像乌鸦一样做一个简单的计算:
sqrt((lat1 - lat2)^2 + (long1 - long2)^2) = distance
你可以做一个简单的曼哈顿距离计算:
abs(lat1 - lat2) + abs(long1 - long2) = distance
您可以进行简单的全球距离计算。见:http://www.ehow.com/how_6353104_calculate-between-two-points-globe.html
这些对于某些目的来说足够准确,对于您的目的来说可能足够准确,但并不完全准确。
要完全准确,您需要更多数据点。路线图数据或已知路线信息。
【讨论】:
“haversine”公式计算两点之间的大圆距离——即地球表面上的最短距离——给出两点之间的“as-the-crow-flies”距离点忽略任何山丘!、曲线、道路、障碍物等。
Haversine 公式:
R = earth’s radius (mean radius = 6,371km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c
您还可以研究余弦球定律
【讨论】:
当您计算行驶距离时,您的应用程序不需要“as the crow flies distance”,因为它是最小距离,但绝对不是行驶距离。
这里有两个选择。首先,使用网络服务(Google Directions API)并创建您自己的图形表示。
您已经取消了第一个选项,因此您需要查看第二个选项。第二个选项是,创建一个具有确切步骤的图形(一个步骤是方向路线中的一个明显转弯)并制作一个巨大的本地图形数据库来查询(可能使用 OLAP)。这将需要一个非常强大的数据库,我的建议仍然是使用第一个选项,但您也可以打开第二个选项。
【讨论】:
对于美国,您可以随时下载联邦 TIGER 人口普查地图数据并自行计算。如果您想要行驶距离,那么您就无法获得某种地图数据。
http://arcdata.esri.com/data/tiger2000/tiger_statelayer.cfm?sfips=19
【讨论】: