2013-02-04 61 views
1

我利用下面的代碼將路由覆蓋圖放到OSM droid地圖上,使用從以下教程獲得的代碼(http://code.google.com/p/osmbonuspack/wiki/Tutorial_1),但略微調整爲自定義方法,而不是用於OnCrerate方法。OSMDroid遵循教程時的路由問題

現在這確實路由並在地圖上生成綠色疊加層。但是,從For循環開始就出現了一個問題。這是因爲road.mNodes始終爲零,表示沒有指令正在下降。

意外地我還檢查了RoadNodes和RoadItems,兩者的大小都是零。這意味着氣泡(ExtendedOVerlayItems)從不顯示在路線上。

任何意見將不勝感激。

//====================================================================================================== 
/** 
* Add a route overlay between two geopoints with Bubble overlays on the route points. 
* 
* @param startPoint Route start. 
* @param endPoint Route end. 
*// 
//====================================================================================================== 
public void addRouteOverlay(GeoPoint startPoint, GeoPoint endPoint) 
{ 
    //1 Routing via road manager 
    RoadManager roadManager = new OSRMRoadManager(); 
    roadManager.addRequestOption("routeType=bicycle"); 

    //Then, retreive the road between your start and end point: 
    ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>(); 
    waypoints.add(startPoint); 
    waypoints.add(endPoint); //end point 

    Road road = roadManager.getRoad(waypoints); 

    // then, build an overlay with the route shape: 
    PathOverlay roadOverlay = RoadManager.buildRoadOverlay(road, map.getContext()); 
    roadOverlay.setColor(Color.GREEN); 


    //Add Route Overlays into map 
    map.getOverlays().add(roadOverlay); 

    map.invalidate();//refesh map 

    Drawable marker = ctx.getResources().getDrawable(R.drawable.map_marker_blue); 

    final ArrayList<ExtendedOverlayItem> roadItems = 
       new ArrayList<ExtendedOverlayItem>(); 
      ItemizedOverlayWithBubble<ExtendedOverlayItem> roadNodes = 
       new ItemizedOverlayWithBubble<ExtendedOverlayItem>(ctx, roadItems, map); 


     for (int i=0; i<road.mNodes.size(); i++) 
     { 
       RoadNode node = road.mNodes.get(i); 
       ExtendedOverlayItem nodeMarker = new ExtendedOverlayItem("Step "+i, "", node.mLocation, ctx); 
       nodeMarker.setMarkerHotspot(OverlayItem.HotspotPlace.CENTER); 
       nodeMarker.setMarker(marker); 
       roadNodes.addItem(nodeMarker); 

       nodeMarker.setDescription(node.mInstructions); 
       nodeMarker.setSubDescription(road.getLengthDurationText(node.mLength, node.mDuration)); 
       Drawable icon = ctx.getResources().getDrawable(R.drawable.ic_continue); 
       nodeMarker.setImage(icon); 

     }//end for 

     map.getOverlays().add(roadNodes); 



}//=================================================================================================== 
+0

你找到一個解決方案安德魯? – user1840255

回答

0

我今天有這個問題,並設法解決它。問題在於舊版本的獎勵包。我從osmbonuspack_v3.8.jar更新到版本osmbonuspack_v4.1.jar並解決了問題。我也使用了MapQuestRoadManager()選項,而不是OSRMRoadManager()。但是,值得注意的是,當執行此操作時,獎勵包中的一些超類型方法發生了更改 - 例如需要ExtendedOverlayItem的onOpen()方法它的參數在調用後被施放。

final RoadManager manager= new MapQuestRoadManager(); 
manager.addRequestOption("routeType=fastest"); 
+0

我沒有測試過這個,最終沒有在最終的應用程序中開發這個功能。但是,您的建議聽起來似乎合理。 –