1

我利用以下代码将路线叠加到 OSM 机器人地图上,使用从以下教程 ( http://code.google.com/p/osmbonuspack/wiki/Tutorial_1 ) 获得的代码,但稍微调整为自定义方法,而不是在 OnCrerate 方法中使用。

现在这确实路由并在地图上产生绿色覆盖。但是,从 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);



}//===================================================================================================
4

1 回答 1

0

我今天遇到了这个问题并设法解决了它。问题在于奖金包的旧版本。我从 osmbonuspack_v3.8.jar 更新到版本 osmbonuspack_v4.1.jar 并解决了问题。我还使用了 MapQuestRoadManager() 选项,而不是 OSRMRoadManager()。但是,值得记住的是,在执行此操作时,奖励包中的一些超级类型方法发生了变化 - 例如所需的 ExtendedOverlayItem 上的 onOpen() 方法调用后要转换的参数。

final RoadManager manager= new MapQuestRoadManager();
manager.addRequestOption("routeType=fastest");
于 2013-11-20T11:39:40.807 回答