【问题标题】:Determine if a place falls in within a route using google maps api使用 google maps api 确定一个地方是否在路线内
【发布时间】:2015-09-30 07:37:33
【问题描述】:

我正在编写一个后端(MongoDB、express、NodeJs),它从 android 应用程序获取纬度和经度。我必须确定某个地方是否在特定路线内。

假设有一条路线

A --> B

现在有一个地方叫C,我想知道它是否位于A和B之间。

A--> C --> B

我还想确保与A-->B之间的距离相比,A-->C-->B 的总行驶距离在可容忍的距离内

当我试图解决这个问题时,我遇到了两个解决方案

  1. 几何库对 isLocationOnEdge() 的使用
  2. 使用很棒的名为 routeBoxer 的库

但不幸的是,我无法使用它们中的任何一个,因为它们都是库而不是 npm 模块。有没有办法使用它们,或者有没有其他可用的解决方案?

谢谢

【问题讨论】:

  • 一种方法是沿折线中的每个点创建半径圆并检查您的位置,看看它是否在这些圆的范围内。

标签: node.js google-maps google-maps-api-3 google-places-api


【解决方案1】:

假设您要测量的距离是严格线性的,Google Maps JavaScript API 的几何库中包含一个名为google.maps.geometry.spherical.computeDistanceBetween 的函数。它接受两个LatLngs 作为参数。

var originalDist = google.maps.geometry.spherical.computeDistanceBetween(a, b)
var newDist = google.maps.geometry.spherical.computeDistanceBetween(a, c) + google.maps.geometry.spherical.computeDistanceBetween(c, b)
var difference = newDist - originalDist

如果您想弄清楚C 与构成A-->B 折线的任何点之间的距离,您可以采用迭代方法:

min(
  polyline.map(
    function(pt){
      return google.maps.geometry.spherical.computeDistanceBetween(pt, c)
    }
  )
)

这比画圆要高效得多,因为它不涉及对象的初始化。

google.maps.geometry.spherical.computeDistanceBetween 的替代品是 Haversine Formula(方便地用 JavaScript 编写)。

【讨论】:

  • 感谢您的回答。我已经在使用 Haversine 公式来计算两个非常接近的位置之间的距离,因此我们可以假设它们是严格线性的。但我更关注计算行进的距离而不是位移。而且我正在使用 MEAN 堆栈,所以我在引用任何不能作为 npm 模块使用的 JS 库时遇到问题:(
猜你喜欢
  • 2014-01-25
  • 2012-02-21
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多