计算2个城市之间的距离
我们如何计算两个城市之间的距离?
解决方案
回答
找到城市的纬度/经度,然后对纬度/经度坐标使用距离估计算法。
回答
我们使用Haversine公式。
回答
我们可以使用A *算法找到这两个城市之间的最短路径,这样我们就可以得到距离。
回答
如果我们需要一个代码示例,我想我有一个可以在家中学习的示例,但是像前面的许多答案一样,我们需要一个long / lat db来进行计算
回答
最好使用查询表来获取两个城市之间的距离。
这是有道理的,因为
*用于计算距离的公式a。的计算量很大。
*城市之间的距离不太可能改变。
因此,除非需求非常具体(例如来自卫星或者某些地形算法或者其他算法的地形图),否则我们实际上应该只将城市列表及其之间的距离保存到表格中,并根据需要进行查找。
回答
如果我们在飞机上工作,并且想要"随着乌鸦飞翔"的欧几里得距离:
// Cities are points x0,y0 and x1,y1 in kilometers or miles or Smoots[1] dx = x1 - x0; dy = y1 - y0; dist = sqrt(dx*dx + dy*y);
无需三角函数!只是勾股定理和平方始终为正的事实,因此我们无需dx = abs(x1 x0)等即可将正数传递给sqrt()。
请注意,我们可能可以在一行中执行此操作,并且编译器可能会将其减少为与上面的代码等效:
dist = sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
[1] http://en.wikipedia.org/wiki/Smoot
回答
如果我们要说的是真实球形行星(例如地球)上两个真实城市之间的最短距离,那么我们需要的是大的圆距。
回答
如果我们需要考虑地球的曲率,则大圆距就是我们想要的。 Wikipedia上的文章可能比我做得更好,解释了该公式的工作原理,并且还有一个航空公式页面,其中涵盖了更详细的内容。
但是,公式只是难题的第一部分,如果我们需要对任意城市进行这项工作,则需要一个位置数据库来获取经纬度。幸运的是,尽管有商业数据库可用(请问Google),我们可以从Geonames.org免费获得。因此,通常,请查找所需的两个城市,获取经纬度坐标,然后将其插入公式中,如Wikipedia Worked Example中所述。
其他建议:
- 对于完整的商业解决方案,有PC Miler,许多货运公司都在使用PC Miler来计算运费。
- 调用Google Maps(或者其他)api。如果我们每天需要执行许多请求,请考虑将结果缓存在服务器上。
- 同样重要的是,如果我们认为需要对数据进行分组,则考虑为城市,郊区,城镇等建立等效数据库。但是,这真的很复杂,我们可能找不到适合问题的"一刀切"的解决方案。
最后但并非最不重要的一点是,Joel不久前写了一篇有关此问题的文章,因此我们可以开始:新功能:求职
回答
我最近在做很多工作。我发现SQL2008的新功能确实使这变得容易。我可以在不到一秒的时间内找到与100k记录表的Xkm对应的所有点...不太破旧。
与Vincenty公式(地球是椭圆形假设)相比,我的测试中的大圆(球形假设)方法大约相距2.5英里。
真正的诀窍是使时间变长,因为我正在使用Google。
回答
@Jared对代码示例进行了较小的更正。第一个代码示例的最后一行应显示为:
dist = sqrt(dx*dx + dy*dy);
回答
使用SQL Server 2008中的地理类型非常容易做到这一点。
SELECT geography::Point(lat1, lon1, 4326).STDistance(geography::Point(lat2, lon2, 4326)) -- computes distance in meters using eliptical model, accurate to the mm
4326是用于WGS84椭球地球模型的SRID