【问题标题】:Is there a way to draw dotted line using osmdroid polyline on osm map?有没有办法在 osm 地图上使用 osmdroid 折线绘制虚线?
【发布时间】:2019-06-20 11:57:17
【问题描述】:

我目前正在使用折线在 OSM 地图上绘制 gpx 轨迹。

我想知道是否有办法使用 osmdroid 绘制虚线而不是实线? 这是我的代码:

        Double firstLat, lastLat, firstLong, lastLong;
        firstLat = lastLat = firstLong = lastLong = -100.0;


        for (Track track : gpx.getTracks()) {

                for (TrackSegment trackSegment : track.getTrackSegments()) {


                        Polyline line = new Polyline(mMap);
                        ArrayList<GeoPoint> trajet = new ArrayList<>();

                        for (TrackPoint trackPoint : trackSegment.getTrackPoints()) {
                            GeoPoint geoPoint = new GeoPoint(trackPoint.getLatitude(), trackPoint.getLongitude());
                            trajet.add(geoPoint);

                            if (firstLat == -100.0) { firstLat = trackPoint.getLatitude(); }

                            if (lastLat == -100.0) { lastLat = trackPoint.getLatitude(); }

                            if (firstLong == -100.0) { firstLong = trackPoint.getLongitude(); }

                            if (lastLong == -100.0) { lastLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLatitude() < firstLat) { firstLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLatitude() > lastLat) { lastLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLongitude() < firstLong) { firstLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLongitude() > lastLong) { lastLong = trackPoint.getLongitude(); }
                        }



                        line.setPoints(trajet);
                        line.setInfoWindow(null);
                        line.setColor(Color.rgb(0,191,255));

                        mMap.getOverlays().add(0, line);
                        mMap.invalidate();
        }

谢谢!

编辑:使用line.getPaint().setPathEffect(new DashPathEffect(new float[]{10, 20}, 0)); 可以解决这个问题。

【问题讨论】:

  • 一般来说,应该查看所述库和所述类的文档并检查实现所需操作或效果的方法。在这种情况下,它是 osmdroid 的 Polyline。只有setColor()setWidth()。或者可以简单地搜索“osmdroid dotted line”并找到a discussion about it in osmdroid issue tracker。看起来目前不可能。
  • 但是在 osmdroid 的情况下,如果您缺少某个功能,总是值得查看 osmdroid Bonus Pack。虽然我认为它不会以任何方式改变Polyline
  • 感谢@MarkusKauppinen 的回答,我会看看这些链接。

标签: android osmdroid


【解决方案1】:

使用 getpaint().setPathEffect() 工作的代码:

Double firstLat, lastLat, firstLong, lastLong;
        firstLat = lastLat = firstLong = lastLong = -100.0;


        for (Track track : gpx.getTracks()) {

                for (TrackSegment trackSegment : track.getTrackSegments()) {


                        Polyline line = new Polyline(mMap);
                        ArrayList<GeoPoint> trajet = new ArrayList<>();

                        for (TrackPoint trackPoint : trackSegment.getTrackPoints()) {
                            GeoPoint geoPoint = new GeoPoint(trackPoint.getLatitude(), trackPoint.getLongitude());
                            trajet.add(geoPoint);

                            if (firstLat == -100.0) { firstLat = trackPoint.getLatitude(); }

                            if (lastLat == -100.0) { lastLat = trackPoint.getLatitude(); }

                            if (firstLong == -100.0) { firstLong = trackPoint.getLongitude(); }

                            if (lastLong == -100.0) { lastLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLatitude() < firstLat) { firstLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLatitude() > lastLat) { lastLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLongitude() < firstLong) { firstLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLongitude() > lastLong) { lastLong = trackPoint.getLongitude(); }
                        }



                        line.setPoints(trajet);
                        line.setInfoWindow(null);
                        line.setColor(Color.rgb(0,191,255));
                        line.getPaint().setPathEffect(new DashPathEffect(new float[]{10, 20}, 0));


                        mMap.getOverlays().add(0, line);
                        mMap.invalidate();
        }

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2013-05-23
    • 2020-03-05
    相关资源
    最近更新 更多