1
我正在绘制两点之间的路线,我需要检查路线是否经过了预定位置。在api中,每个GStep都有一个起点和终点,但路径不一定是直的。给定经纬度点,有没有办法检查它是否与路线相交?如何检查Google Maps API中的经纬度点是否位于GRoute上?
我正在绘制两点之间的路线,我需要检查路线是否经过了预定位置。在api中,每个GStep都有一个起点和终点,但路径不一定是直的。给定经纬度点,有没有办法检查它是否与路线相交?如何检查Google Maps API中的经纬度点是否位于GRoute上?
您应该能够非常容易地获得由GDirections
生成的折线的各个顶点。首先,如果您未将GDirections
附加到地图,则在致电GDirections.load()
时,必须确保通过getPolyline: true
选项。然后,您可以简单地遍历多段线的每个顶点,然后您应该检查点是否在预定义位置的某个距离阈值内。
请看下面的例子:
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循环限制为更窄的一组顶点。
进一步阅读和参考:
该方法将不起作用。有些步骤可能会超过50公里(例如沿着同一条高速公路行驶时)。如果我的兴趣点在这一步的上半部分,检查该点是否在25公里半径范围内会产生很多误报。我需要知道该点是否恰好在该路线上。 – Pavel 2010-05-21 15:47:24
@Pavel:你说得对。检查更新的答案。它必须遍历多段线顶点,而不是像我之前建议的那样通过路线步骤。 – 2010-05-21 16:20:18