首页 / 知识
关于算法:计算2个城市之间的距离
2023-04-12 23:15:00

Calculating Distance Between 2 Cities您如何计算两个城市之间的距离? 如果您需要考虑地球的曲率,则大圆距就是您想要的。 Wikipedia上的文章可能比我在解释该公式的工作方式上做得更好,并且还有一个航空公式页面,其中涵盖了更多细节。 但是,公式只是难题的第一部分,如果您需要对任意城市进行这项工作,则需要一个位置数据库来获取经纬度。幸运的是,尽管有商业数据库可用(请问Google),您可以从Geonames.org免费获得。因此,一般而言,查找所需的两个城市,获取经纬度坐标,然后将其插入公式中,如Wikipedia Worked Example中所述。 其他建议:
最后但并非最不重要的一点是,Joel不久前写了一篇有关此问题的文章,因此您可以开始:新功能:求职 您使用Haversine公式。 使用SQL Server 2008中的地理类型非常容易做到这一点。
4326是用于WGS84椭球地球模型的SRID
您可以从Google Map API获取两个城市之间的距离。
示例链接:https://gist.github.com/sarathsp06/cf063e47bcc515b51c84 如果要说的是真实球形地球(例如地球)上两个真实城市之间的最短距离,则需要较大的圆周距离。 如果您在飞机上工作,并且想要"随着乌鸦飞翔"的欧几里得距离:
无需三角函数!只是毕达哥拉斯定理和平方始终为正的事实,因此您无需dx = abs(x1-x0)等即可得到正数传递给sqrt()。 请注意,您可能可以在一行中执行此操作,并且编译器可能会将其减少为与上面的代码等效:
[1] http://en.wikipedia.org/wiki/Smoot 您可以使用A *算法找到这两个城市之间的最短路径,这样您就可以确定距离。
我用距离 我同意,一旦获得信息,如果它不会改变,请以某种方式存储它。 @Marko Tinto感谢您的T-SQL示例。对于那些无法访问SQL Server或希望使用其他方法的用户:如果需要高精度,请查看Wikipedia在Vincenty算法上的条目以获取更多信息。我相信有一个js实现,可以(如果尚未实现)很容易地移植到其他语言。同样,在该页面的底部是geoLibrary的链接,它的准确性比Vincenty算法高1000倍(如果您的数据很好,那可能很重要)。 为什么要使用Vincenty方法?因为地球不是一个完美的球体,所以像这样的方法可以输入更准确的长轴和短轴来对地球进行建模。 @Jared-对您的代码示例的较小更正。第一个代码示例的最后一行应显示为:
我最近为此做了很多工作。我发现SQL2008的新功能确实使这变得容易。我可以在不到一秒的时间内找到与100k记录表的Xkm对应的所有点...不太破旧。 与Vincenty公式(地球是椭圆形假设)相比,我的测试中的大圆(球形假设)方法大约相距2.5英里。 真正的诀窍是使时间变长,因为我正在使用Google。 最好使用查询表来获取两个城市之间的距离。
这是有道理的,因为 因此,除非您的需求非常具体(例如来自卫星或某些地形算法或其他算法的地形图),否则您实际上应该只将城市列表及其之间的距离保存到表格中,并根据需要进行查找。 如果您需要一个代码示例,我想我有一个可以在家中学习的示例,但是像前面的许多答案一样,您需要一个long / lat db来进行计算 找到城市的纬度/经度,然后对纬度/经度坐标使用距离估计算法。 |
最新内容
相关内容
python如何读取列表中元素的位置?
python如何读取列表中元素的位置?,位置,数据,异常,培训,字符串,元素,索引,方法,示例,结果,python读取列表中元素位置的方法:1、使用index()方python如何导入txt数据库?
python如何导入txt数据库?,数据,时间,代码,培训,数据库,函数,读数,数据表,以上,方法,python将TXT数据导入数据库的方法代码如下:#!/usr/bin/pypython是解释型吗?
python是解释型吗?,工作,平台,培训,解释性,虚拟机,语言,高层次,源码,脚本语言,之前,python是一种跨平台的计算机程序设计语言。是一个高层次python怎样获取json数据类型?
python怎样获取json数据类型?,培训,数据类型,类型,正则,火狐,以上,方法,更多,内容,列表,python中获取json不同数据类型的方法:1、获取"key":vpython数据怎么添加列?
python数据怎么添加列?,数据,位置,培训,方法,属性,结果,示例,函数,前面,以上,python在DataFrame数据中添加列的方法:1、使用concat方法在数据怎样用python计算矩阵乘法?
怎样用python计算矩阵乘法?,位置,矩阵,培训,一致,乘法,数组,函数,示例,作用,标量,python中计算矩阵乘法的方法:1、使用np.multiply()函数计算Python中怎么计算圆周长?
Python中怎么计算圆周长?,公式,培训,圆周,半径,浮点,以上,结果,更多,内容,python中怎么计算圆周长呢?1、首先输入圆的半径2、其次将输入的半实数是不是python的数据类型?
实数是不是python的数据类型?,数字,标准,培训,实数,数据类型,数轴,复数,有限小数,无理数,虚数,实数是python的数据类型。实数,是有理数和无理python怎么筛选列表中大于0的数据?
python怎么筛选列表中大于0的数据?,数据,培训,函数,结果,以上,方法,更多,内容,列表,python筛选列表中大于0的数据的方法:1、使用匿名函数lamb怎么查看python模块在什么位置
怎么查看python模块在什么位置,位置,代码,培训,模块,路径,下面,以上,文件,方法,更多,查看python模块在什么位置的方法:若要获取模块的文件名为python如何计算程序运算时间
python如何计算程序运算时间,时间,系统,单位,培训,程序,方法,浮点,以来,类型,纪元,python计算程序运算时间的方法:方法1:importdatetimestarttipython字典类型的数据怎么保存
python字典类型的数据怎么保存,数据,培训,字典,中间,类型,文件,相似性,变量,算法,效率,在使用python编程过程中,我们往往需要借助字典来提高编