【问题标题】:OSMDroid PathOverlayOSMDroid PathOverlay
【发布时间】:2012-04-23 16:16:11
【问题描述】:

今天很期待如何在OSMDroid中使用PathOverlay。

我找不到任何关于它如何工作的解释。

我需要创建一个建议的路线(不像导航系统),只是从一个点开始划一个“电路”然后返回起点。

就像这样(在谷歌地图中绘制):

我在这里问什么是正确的方法,指定自定义路径,做我想要的转弯。

谢谢!

【问题讨论】:

    标签: java android osmdroid stroke


    【解决方案1】:

    它会在地图上为您绘制一系列直线,因此您需要知道所有道路交叉口的纬度和经度(以及它们偏离直线的任何地方)。将所有这些点添加到叠加层。例如,此代码将在伦敦市中心绘制一个矩形框。

    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);
        }
    }
    

    .

    【讨论】:

    • 我们是否必须在我们想要进行的每一个转弯处添加一个 GeoPoint?
    • 是的,它只画直线,所以每一个小弯都需要一个新点。
    • 嗯,好的。谢谢你的回答!
    • PathOverlay 已弃用。有一个折线的例子会很有帮助。
    【解决方案2】:

    以下是如何在 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多