我正在绘制两点之间的路线,并且需要检查路线是否通过了预定位置。在api中,每个GStep都有一个起点和终点,但是路径不必是直线。给定纬度/经度点,是否有办法检查其是否与路线相交?

最佳答案

您应该能够很容易地得到GDirections生成的折线的各个顶点。首先,如果您未将getPolyline: true附加到地图,则必须确保在调用GDirections.load()时传递GDirections选项。然后,您可以简单地遍历折线的每个顶点,然后可能应该检查点是否在距预定义位置一定距离的阈值内。

考虑以下示例:

var map = new GMap2(document.getElementById("map"));
var directions = new GDirections(map);

// Your predefined point
var pt = new GLatLng(51.470, -0.453);

directions.load('from: London, UK to: Glasgow, UK', { getPolyline: true });

GEvent.addListener(directions, "load", function() {
  for (var i = 0; i < directions.getPolyline().getVertexCount(); i++) {
    if (directions.getPolyline().getVertex(i).distanceFrom(pt) < 100) {
      // Your predefined point is within 100 meters of the route
    }
  }
});


您可以通过跳过某些绝对离测试点太远的步骤来改进此方法。您可以使用getPolylineIndex()方法获取每个路线步骤的折线索引。这可以帮助您将for循环限制为一组较窄的顶点。

进一步阅读和参考:


GDirections
GRoute
GStep

07-24 18:54