Проблемы маршрутизации OSMDroid при следовании руководству

Я использую следующий код для наложения маршрута на карту дроидов 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);



}//===================================================================================================

person Andrew S    schedule 04.02.2013    source источник
comment
Ты нашел решение, Андрей?   -  person user1840255    schedule 20.11.2013


Ответы (1)


У меня была эта проблема сегодня, и мне удалось ее решить. Проблема заключается в старой версии бонусного пакета. Я обновился до версии osmbonuspack_v4.1.jar с osmbonuspack_v3.8.jar, и это решило проблему. Я также использовал опцию MapQuestRoadManager(), а не OSRMRoadManager(). Однако стоит помнить, что при этом несколько методов супертипа изменились в бонусном пакете, например, метод onOpen() для ExtendedOverlayItem требуется его параметр будет приведен после вызова.

final RoadManager manager= new MapQuestRoadManager();
manager.addRequestOption("routeType=fastest");
person user1840255    schedule 20.11.2013
comment
Я не тестировал это и, в конце концов, не разрабатывал эту функцию в финальном приложении. Тем не менее, ваше предложение звучит правдоподобно. - person Andrew S; 29.11.2013