2014-03-03 94 views
0

目前,我正在使用圓圈來顯示在地圖上以米爲單位的一定寬度的對象的路徑。這是有問題的,因爲即使每小時15英里的速度,圓形方法也必須每隔幾百毫秒進行一次,以便圓形重疊,因此圓形之間不會出現間隙。一個小時後,你會以無數的圓圈和無記憶結束。谷歌地圖圈半徑替代

CircleOptions circleOptions = new CircleOptions() 
     .center(new LatLng(location.getLatitude(), location.getLongitude())); 

circleOptions.radius(radi); // In meters 

目前,我似乎無法找到在谷歌地圖的Android API V2支持使用與米設置的半徑折線,但只在像素寬度。使用不同的縮放級別和屏幕條件以及地圖的投影,這聽起來相當複雜,以便基本突出顯示具有多段線的地圖上的某個寬度的路徑。

有沒有人在api中看到過使用圓半徑方法的其他選擇?

+0

是不會解決您的問題。在地圖上一次繪製出許多地圖對象會給你帶來問題。你需要刪除一些,如果他們不在視圖中或重新思考你想要完​​成的事情 – tyczj

+0

@tyczj這就是爲什麼我正在尋找替代品。如果使用設置寬度的折線,則需要的位置點將少得多。無數的圈子需要用於重疊。寬度爲X的多段線可以突出顯示路徑寬度,理論上只需要每隔幾英尺就可以得到點,因爲它只需要2點即可生成一條線...感謝您的輸入。 – johnsonjp34

+1

你想完成什麼不是傳統的,所以我不希望有一個傳統的解決方案。預計會做很多數學計算,請至少檢查此鏈接起點https://groups.google.com/forum/#!topic/google-maps-js-api-v3/SeVrFw9wORE – tyczj

回答

1

使用android-maps-utils這個變得相對簡單:

public static PolygonOptions getPolygonOptions(LatLng point1, LatLng point2, float widthInMeters) { 

    double heading = SphericalUtil.computeHeading(point1, point2); 
    double distance = SphericalUtil.computeDistanceBetween(point1, point2); 

    LatLng corner1 = SphericalUtil.computeOffset(point2, widthInMeters/2, heading + 90); 
    LatLng corner2 = SphericalUtil.computeOffset(point2, widthInMeters/2, heading - 90); 
    LatLng corner3 = SphericalUtil.computeOffset(corner2, distance, heading + 180); 
    LatLng corner4 = SphericalUtil.computeOffset(corner3, widthInMeters, heading + 90); 

    return new PolygonOptions().add(corner1, corner2, corner3, corner4); 
} 

,然後添加多邊形連接你的觀點:採用折線,多邊形或任何其他爲此事

map.addPolygon(
     getPolygonOptions(point1, point2, 50) 
       .fillColor(Color.BLACK) 
); 
map.addPolygon(
     getPolygonOptions(point2, point3, 50) 
       .fillColor(Color.BLACK) 
); 
+0

我是對於point1,point2和point3的初始化需要什麼樣的值很困惑?我假設,因爲我從一個固定的位置停止移動當前位置說location.getPosition()將適用於point1。什麼關於point2。 – johnsonjp34

+0

而不是每秒添加多邊形,您將存儲最後一個位置(最初爲空)並將其與您定期收集的當前位置進行比較。如果最後一個位置爲空,則將其設置爲當前位置。否則,如果最後一個位置與當前位置之間的距離超過閾值,則應從最後一個位置到當前位置添加一個新的多邊形,並將最後一個位置更新爲當前位置。閾值越低,您看到的細節越多,但多邊形將添加到地圖中的位置越多。因此,取決於這種情況持續多久,您可能需要更高或更低的閾值。 –

+0

如果你想進一步優化這個,你可以應用一個軌道減少算法,也就是說,如果運動是直的或者是「相對」直的,這樣點A,B,C和D在一條線上,你可以移除內點B和C.同樣,可以使用閾值來確定導致更詳細或更多點的直線水平。如果您對此感興趣,請告訴我。 –