2014-01-19 7 views
6

ここではチュートリアルhttps://code.google.com/p/osmbonuspack/wiki/Tutorial_1に従っていますが、正しい経路が正しく表示されないというエラーが発生しました。それはちょうど点Aから点Bへの直線を示しています。osmdroidエラーのRoadManager

私が達成したいのは、これらの点から正しい経路を示すことです。私は、間違っていると推測しています。

同様の質問も尋ねられました。質問をうまく説明していないと、同じ問題があると私は想定しています。

同様の質問はここで見つけることができます:OSMDroid Routing problems when following a tutorial

ここでは、ここでRoadManager

を使用して、私のコードの一部は、コードの一部です。

try { 

       //get current longlat 
       gpsLocator.getLocation(); 
       cur_loc_lat =gpsLocator.getLatitude(); 
       cur_loc_long =gpsLocator.getLongitude(); 

      } catch (Exception e) { 
       // TODO: handle exception 
      } 

      //--- Create Another Overlay for multi marker 
      anotherOverlayItemArray = new ArrayList<OverlayItem>(); 
      anotherOverlayItemArray.add(new OverlayItem(
        "UST", "UST", new GeoPoint(testlat, testlong))); 

      //--- Create Another Overlay for multi marker 
      anotherOverlayItemArray.add(new OverlayItem(
        locDefine[0], "UST", new GeoPoint(sel_latitude, sel_longitude))); 


      ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay 
      = new ItemizedIconOverlay<OverlayItem>(
       TomWalks.this, anotherOverlayItemArray, myOnItemGestureListener); 

      myOpenMapView.getOverlays().add(anotherItemizedIconOverlay); 
      //--- 

      //Add Scale Bar 
      ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(TomWalks.this); 
      myOpenMapView.getOverlays().add(myScaleBarOverlay); 


      try { 


       //1 Routing via road manager 
       RoadManager roadManager = new MapQuestRoadManager(); 
       roadManager.addRequestOption("routeType=pedestrian"); 
       /* 
       roadManager.addRequestOption("units=m"); 
       roadManager.addRequestOption("narrativeType=text"); 
       roadManager.addRequestOption("shapeFormat=raw"); 
       roadManager.addRequestOption("direction=0"); 
       */ 
       //Then, retrieve the road between your start and end point: 
       ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>(); 
       waypoints.add(new GeoPoint(testlat, testlong)); 
       waypoints.add(new GeoPoint(sel_latitude,sel_longitude)); //end point 

       Road road = roadManager.getRoad(waypoints); 


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


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


       final ArrayList<ExtendedOverlayItem> roadItems = 
          new ArrayList<ExtendedOverlayItem>(); 
       ItemizedOverlayWithBubble<ExtendedOverlayItem> roadNodes = 
          new ItemizedOverlayWithBubble<ExtendedOverlayItem>(TomWalks.this, roadItems, myOpenMapView); 



       myOpenMapView.getOverlays().add(roadNodes); 
       myOpenMapView.invalidate();//refesh map 



       int nodesize=road.mNodes.size(); 
       double length = road.mLength; 


       Drawable marker = getResources().getDrawable(R.drawable.marker_node); 

       Toast.makeText(TomWalks.this, " Distance : " + length + " Nodes : "+nodesize ,Toast.LENGTH_SHORT).show(); 

        for (int i=0; i<road.mNodes.size(); i++) 
        { 
          RoadNode node = road.mNodes.get(i); 
          ExtendedOverlayItem nodeMarker = new ExtendedOverlayItem("Step "+i, "", node.mLocation, TomWalks.this); 
          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 = getResources().getDrawable(R.drawable.marker_node); 
          nodeMarker.setImage(icon); 

        }//end for 

        myOpenMapView.getOverlays().add(roadNodes); 
        myOpenMapView.invalidate();//refesh map 


      } catch (Exception e) { 
       // TODO: handle exception 


       Toast.makeText(TomWalks.this,e.getMessage(),Toast.LENGTH_SHORT).show(); 


      } 

      myMapController.setCenter(new GeoPoint(sel_latitude, sel_longitude)); 


     } catch (Exception e) { 
      // TODO: handle exception 
     }   
    } 

} 

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

どこにあなたのコードだそれを呼び出しますか? – SamB

+0

私の質問@SamB編集、コードを追加しました。 – user3211403

+0

@ user3211403問題を解決しましたか?私は同じ問題があります。 – kittu88

答えて

4

この非常に頻繁な質問に完全に答えてみましょう。

「直線」を得ると、RoadManagerにエラーが発生したことを意味します。

だから、すべての最初は、あなたのコードでは、あなたは、この方法をgetRoadの結果を確認する必要があります

if (road.mStatus != Road.STATUS_OK){ 
    //handle error... warn the user, etc. 
} 

、このエラーがから来ていますか? => logcatで検索する必要があります。送信された完全なURLと、おそらくエラーに関するスタックトレースが見つかります。

この完全なURLをブラウザにコピーして貼り付けて、結果を確認することを強くお勧めします。

1)あなたはdidntは」Tutorial_0の先頭に慎重に 『重要な注意』を読んで、あなたはメインスレッドでネットワーク呼び出しをやろうとしている。ここで

は確率を減少させることによって、一般的なエラーですSDK> = 3.0を使用します。 =>この「重要な注意」をお読みください。

2)不可能なルート(実際には不可能、奇妙な位置、またはサポートされていないオプションを設定しているため)を求めました。 =>これは、Webブラウザで完全なURLをコピー/貼り付け、その答えを見ることで簡単に確認できます。

3)お使いのデバイスはネットワークに接続されていません。

4)ルーティングサービスがAPIを変更しました(これは何度も起こりました...)。 =>ブラウザで完全なURLをコピー/貼り付けすることで確認できました。 この場合、OSMBonusPackプロジェクトで問題を発生させてください。そうすれば、できるだけ早く考慮に入れることができます。

5)ルーティングサービスがダウンしています。 =>ブラウザで完全なURLをコピー/貼り付けすることで簡単に確認できます。

+0

3)お使いのデバイスはネットワークに接続していません。こんにちは@MKerは、オフラインで経路を描くことができますか? – max

+0

すべてのOSMBonusPack RoadManagersはオンラインサービスです。オフラインルーティングの場合は、Android用GraphHopperをご覧ください。 – MKer

2
new Thread(new Runnable() 
{ 
    public void run() 
    { 
     RoadManager roadManager = new OSRMRoadManager(); 
     ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>(); 
     GeoPoint startPoint = new GeoPoint(source_lat, source_longi);    
     waypoints.add(startPoint); 
     GeoPoint endPoint = new GeoPoint(desti_lat,desti_longi); 
     waypoints.add(endPoint);      
     try 
     { 
      road = roadManager.getRoad(waypoints); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     runOnUiThread(new Runnable() 
     { 
      public void run() 
      { 
       if (road.mStatus != Road.STATUS_OK) 
       { 
         //handle error... warn the user, etc. 
       } 

       Polyline roadOverlay = RoadManager.buildRoadOverlay(road, Color.RED, 8, context); 
       map.getOverlays().add(roadOverlay);     
      } 
     }); 
    } 
}).start(); 

And i am use two jar files 1)slf4j-android-1.5.8.jar and 2)osmdroid-android-4.2.jar and osmbonuspack library. 
4

私はこのケースでAsyncTasksを使用することをお勧めだと思います:

/** 
    * Async task to get the road in a separate thread. 
    */ 
    private class UpdateRoadTask extends AsyncTask<Object, Void, Road> { 

     protected Road doInBackground(Object... params) { 
      @SuppressWarnings("unchecked") 
      ArrayList<GeoPoint> waypoints = (ArrayList<GeoPoint>)params[0]; 
      RoadManager roadManager = new OSRMRoadManager(); 


      return roadManager.getRoad(waypoints); 
                 } 
     @Override 
     protected void onPostExecute(Road result) { 
      road = result; 
      // showing distance and duration of the road 
      Toast.makeText(getActivity(), "distance="+road.mLength, Toast.LENGTH_LONG).show(); 
      Toast.makeText(getActivity(), "durée="+road.mDuration, Toast.LENGTH_LONG).show(); 

      if(road.mStatus != Road.STATUS_OK) 
      Toast.makeText(getActivity(), "Error when loading the road - status="+road.mStatus, Toast.LENGTH_SHORT).show(); 
      Polyline roadOverlay = RoadManager.buildRoadOverlay(road,getActivity()); 

      map.getOverlays().add(roadOverlay); 
      map.invalidate(); 
      //updateUIWithRoad(result); 
                } 
    } 

その後、new UpdateRoadTask().execute(waypoints);

関連する問題