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