2012-04-11 15 views
6

今日、私はOSMDroidでPathOverlayを使う方法を楽しみにしています。OSMDroid PathOverlay

どのように動作するか説明が見つかりません。

提案ルート(ナビゲーションシステムのようなものではない)を作成する必要があります。ちょうど一点で始まり、 "回路"を作って出発点に戻るストロークだけです。 (Googleマップで描かれた)ただ、このような

Circuit

は、私が欲しいのターンをして、カスタムパスを指定して、これを行うための正しい方法だものを尋ねるためにここです。

ありがとうございます!

答えて

29

地図の上に一連の直線を描画するので、すべての道路分岐点(直線から離れてどこでも曲がる)の緯度と経度を知る必要があります。これらすべての点をオーバーレイに追加します。一例として、このコードはロンドン中心部に長方形のボックスを描画します。

public class OsmdroidDemoMap extends Activity { 

    private MapView mMapView; 
    private MapController mMapController; 
    int mIncr = 10000; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.osm_main); 
     mMapView = (MapView) findViewById(R.id.mapview); 
     mMapView.setTileSource(TileSourceFactory.MAPNIK); 
     mMapView.setBuiltInZoomControls(true); 
     mMapView.setMultiTouchControls(true); 
     mMapController = mMapView.getController(); 
     mMapController.setZoom(13); 
     GeoPoint gPt0 = new GeoPoint(51500000, -150000); 
     GeoPoint gPt1 = new GeoPoint(gPt0.getLatitudeE6()+ mIncr, gPt0.getLongitudeE6()); 
     GeoPoint gPt2 = new GeoPoint(gPt0.getLatitudeE6()+ mIncr, gPt0.getLongitudeE6() + mIncr); 
     GeoPoint gPt3 = new GeoPoint(gPt0.getLatitudeE6(), gPt0.getLongitudeE6() + mIncr); 
     mMapController.setCenter(gPt0); 
     PathOverlay myPath = new PathOverlay(Color.RED, this); 
     myPath.addPoint(gPt0); 
     myPath.addPoint(gPt1); 
     myPath.addPoint(gPt2); 
     myPath.addPoint(gPt3); 
     myPath.addPoint(gPt0); 
     mMapView.getOverlays().add(myPath); 
    } 
} 

。ここで

+0

は、我々がしたいすべての単一のターンにGeoPointを追加する必要がありますか? – silentw

+1

はい、直線を描画するだけなので、わずかな曲げには新しい点が必要です。 – NickT

+0

ええ、大丈夫です。あなたの答えをありがとう! – silentw

4

はOSMBonusPackにポリラインで道路を描画する方法のチュートリアルです: https://github.com/MKergall/osmbonuspack/wiki/Tutorial_1

それは非常に簡単ですし、私は私のアプリでこれを成功裏に使用しています。そのチュートリアルに基づいて

私のコードは次のように探しています:

RoadManager roadManager = new OSRMRoadManager(); 

    ArrayList<GeoPoint> track = new ArrayList<>(); 
    // TODO: Fill the list with your track points 

    Road road = roadManager.getRoad(track); 
    Polyline roadOverlay = RoadManager.buildRoadOverlay(road, context); 
    mapView.getOverlays().add(roadOverlay); 
    mapView.invalidate(); 
+0

チュートリアルのリンク –

+0

cool - thanks :-)に基づいて私のコード例を追加しました – kleopatra

関連する問題