0

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

我知道一种方法:我可以使用Selenium谷歌地图,然后以英里为单位显示距离。

有没有更有效的方法?

4

1 回答 1

1

我想这取决于你需要它有多准确。您要做的第一件事是将这些地址地理编码为纬度/经度坐标。谷歌为此提供了一个方便的 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等是您使用的任何代码中的数学函数

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

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

于 2013-09-11T18:56:06.587 回答