2012-04-11 28 views
6

Hôm nay tôi đang mong chờ cách sử dụng PathOverlay trong OSMDroid.OSMDroid PathOverlay

Tôi không thể tìm thấy bất kỳ giải thích nào về cách hoạt động của nó.

Tôi cần tạo tuyến đường được đề xuất (không giống như hệ thống định vị), chỉ cần đột quỵ bắt đầu tại một điểm, thực hiện "mạch" và sau đó quay lại điểm bắt đầu.

Chỉ cần như thế này (vẽ trong bản đồ google):

Circuit

Tôi ở đây để hỏi cách chính xác để làm điều này là gì, cách xác định một con đường tùy chỉnh, làm lần lượt tôi muốn.

Cảm ơn!

Trả lời

29

Nó sẽ vẽ một loạt các đường thẳng cho bạn trên đầu bản đồ, vì vậy bạn cần biết vĩ độ và kinh độ của tất cả các nút giao của bạn (và ở khắp mọi nơi chúng uốn cong từ một đường thẳng). Thêm tất cả các điểm này vào lớp phủ. Ví dụ, mã này sẽ vẽ một hộp hình chữ nhật ở trung tâm London.

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

Chúng ta phải thêm một GeoPoint trên mỗi lượt duy nhất chúng tôi muốn thực hiện? – silentw

+1

Có, nó chỉ vẽ các đường thẳng, vì vậy mọi uốn cong nhẹ sẽ cần một điểm mới. – NickT

+0

Hmm, được rồi. Cảm ơn bạn vì câu trả lời! – silentw

4

Dưới đây là hướng dẫn làm thế nào để vẽ đường với Polyline trong OSMBonusPack: https://github.com/MKergall/osmbonuspack/wiki/Tutorial_1

Nó là khá dễ dàng và tôi đã sử dụng thành công này trong ứng dụng của tôi.

Mã của tôi dựa trên hướng dẫn đó là tìm kiếm như thế này:

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

Đã thêm ví dụ về mã của tôi dựa trên liên kết hướng dẫn –

+0

tuyệt vời - cảm ơn :-) – kleopatra