我想在我的网站上嵌入一个功能,可以告诉两个地址之间的距离,比如说adress 1 : 100 Main St, IL
......和adress 2 : 200 Lincoln S
t,..
我知道一种方法:我可以使用Selenium
谷歌地图,然后以英里为单位显示距离。
有没有更有效的方法?
我想这取决于你需要它有多准确。您要做的第一件事是将这些地址地理编码为纬度/经度坐标。谷歌为此提供了一个方便的 API 。一旦你有了这些坐标,确定它们之间的距离就是一个数学问题。
我曾经写过一篇博文,里面有这样的计算。设置有点不同,我根据定义的距离从已知纬度/经度坐标的数据库中选择记录,但数学基本相同。从我的查询中,您基本上可以只提取计算部分并将“center_latitude”和“center_longitude”替换为您的一个坐标,并将“纬度”和“经度”替换为另一个。像这样的东西:
ACOS(
COS($latitudeA * (PI()/180)) *
COS($longitudeA* (PI()/180)) *
COS($latitudeB * (PI()/180)) *
COS($longitudeB * (PI()/180)) +
COS($latitudeA * (PI()/180)) *
SIN($longitudeA * (PI()/180)) *
COS($latitudeB * (PI()/180)) *
SIN($longitudeB * (PI()/180)) +
SIN($latitudeA * (PI()/180)) *
SIN($latitudeB * (PI()/180))
) *
(
($equatorial_radius * $polar_radius) /
(
SQRT(
($equatorial_radius * $equatorial_radius) -
(
(
($equatorial_radius * $equatorial_radius) -
($polar_radius * $polar_radius)
) *
(
COS($latitudeA) *
COS($latitudeA)
)
)
)
)
)
在哪里:
$latitudeA
是第一个坐标的纬度$longitudeA
是第一个坐标的经度$latitudeB
是第二个坐标的纬度$longitudeB
是第二个坐标的经度$equitorial_radius
是地球绕赤道的半径$polar_radius
是地球沿两极的半径SIN
, COS
, SQRT
,ACOS
等是您使用的任何代码中的数学函数使用您在半径值中使用的任何测量单位,这应该会导致两者之间的距离非常准确。(我用的是美国英里。)精确到几米之内,如果不是更小的话。
所有这些数学的原因是考虑地球的曲率(包括赤道的凸起),以便绘制沿该曲线表面的两点之间的距离。