我想在我的网站上嵌入一个功能,告诉两个地址之间的距离,让我们说adress 1 : 100 Main St, IL
...和adress 2 : 200 Lincoln S
t,..
我知道一种方法:我可以使用Selenium
转到Google地图,然后以英里为单位。
有没有更有效的方法?
答案 0 :(得分:1)
我想,取决于你需要它的准确程度。您要做的第一件事是将这些地址地理编码为纬度/经度坐标。 Google提供了a handy API来做到这一点。一旦你有了这些坐标,确定它们之间的距离就是数学问题。
我曾经在其中写过a blog post这样的计算。设置有点不同,我根据已定义的距离从已知纬度/经度坐标的数据库中选择记录,但数学基本相同。根据我的查询,你基本上可以只取出计算部分,用你的一个坐标替换“center_latitude”和“center_longitude”,用另一个坐标取代“Latitude”和“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
等是您正在使用的任何代码中的数学函数这将导致两者之间的非常精确距离,使用您在半径值中使用的任何测量单位。 (我使用美国里程。)准确到几米之内,如果不是更小。
所有这些数学的原因是考虑地球的曲率(包括赤道上的凸起),以绘制沿曲线表面的两点之间的距离。