2014-03-30 52 views
3

我有一個項目,我需要在道路上跟蹤一輛汽車,我有下面的道路,我需要爲汽車添加一個標記。我已經在車上安裝了一個GPS設備,並且我從設備獲取座標,之間,GPS設備的位置精度不是很好(< 10M),我如何在地圖上設置道路標記?谷歌地圖 - 大概在公路上的位置

enter image description here

+0

http://stackoverflow.com/questions/11835623/google-maps-api-getting-street-coordinates可能的副本 –

回答

7

Google Maps Tracks API提供面向車輛/資產跟蹤的功能。對於您的特定使用情況,您可以從數據源中記錄crumbs(甚至指定您的測量精度!),然後retrieve the collected crumbs snapped to the nearest road

要獲得當前位置,只需爲​​3210和maxTimestamp選擇合適的範圍。如果你想完全避免存儲的歷史,你應該能夠只是重複使用一個固定的時間戳記:

如果麪包屑的時間戳是相同 指定的實體已經存在的麪包屑,現有面包屑將被 新麪包覆蓋。 (見「Recording crumbs」)

+0

可否請您提供一些示例代碼,我瞭解您的概念,看起來不錯,但是我怎麼能從時間戳得到最近的道路位置? – Scar

+0

請參閱此處:https://developers.google.com/maps/documentation/tracks/crumbs#identifying_roads_along_which_an_entity_traveled – jpatokal

1

使用路線服務。從興趣點到興趣點獲取行車路線。應該在路上。

var directionsService = new google.maps.DirectionsService(); 

directionsService.route({origin:homeLatlng, destination:homeLatlng, travelMode: google.maps.DirectionsTravelMode.DRIVING}, function(response, status) { 
    if (status == google.maps.DirectionsStatus.OK) 
    { 
    var homeMarker = new google.maps.Marker({ 
     position: response.routes[0].legs[0].start_location, 
     map: map, 
     vtitle: "Check this cool location", 
     icon: image, 
     shadow: shadow 
    }); 
    } else { 
    var homeMarker = new google.maps.Marker({ 
     position: homeLatlng, 
     map: map, 
     title: "Check this cool location", 
     icon: image, 
     shadow: shadow 
    }); 
     } 
}); 
+0

此解決方案每天限制2500個請求,這對我的情況無效,即使我使用商業計劃。 – Scar

+1

商業計劃在24小時內被限制在100000次使用。您將不得不支付一些費用,以便每天爲此(或類似)服務提出大量請求。 您估計了多少個請求? –

+0

我正在構建一個將從1000多人使用的iOS應用程序,他們將每10秒打開一次。會有每個用戶的請求,所以請求的數量是巨大的。那爲什麼這種方式是無效的。 – Scar

1

我建議使用OSM(OpenStreet地圖)用於獲取離線路線,這意味着你可以捕捉標記的道路,而無需使用數據,並沒有限制到谷歌的數據。最新的地圖也可以每週下載:搜索planet.osm
我正在使用GraphHopper,它使用OSM,用於我的android項目,以便捕捉道路,但並不完美,因爲它擁有更多道路,即Goolge Maps,它是Marker可能會被放置在Google Maps沒有的道路上。 所以,基本上,檢查GraphHopper,下載示例項目,下載地圖,閱讀GitHub自述文件中的說明如何設置項目並使用其路由計算來檢索到最近公路的座標,而不繪製標記或多段線。檢索座標並將它們傳遞給您的應用程序並將標記放置在接收到的座標上。