网站如何获得两个地理位置之间的距离?

时间:2013-09-11 18:43:53

标签: webpage distance

我想在我的网站上嵌入一个功能,告诉两个地址之间的距离,让我们说adress 1 : 100 Main St, IL ...和adress 2 : 200 Lincoln S t,..

我知道一种方法:我可以使用Selenium转到Google地图,然后以英里为单位。

有没有更有效的方法?

1 个答案:

答案 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是沿着地球的半径
  • SINCOSSQRTACOS等是您正在使用的任何代码中的数学函数

这将导致两者之间的非常精确距离,使用您在半径值中使用的任何测量单位。 (我使用美国里程。)准确到几米之内,如果不是更小。

所有这些数学的原因是考虑地球的曲率(包括赤道上的凸起),以绘制沿曲线表面的两点之间的距离。