【问题标题】:OSMDroid - Center to PolylineOSMDroid - 以折线为中心
【发布时间】:2016-09-16 10:59:20
【问题描述】:

我正在使用 OSMDroid,我有一组地理点,然后我创建了这样的折线:

private void drawPolyline(ArrayList<GeoPoint> polyline) {
    Polyline line = new Polyline(this);
    line.setPoints(polyline);
    line.setWidth(5f);
    line.setGeodesic(true);
    mv_map.getOverlays().add(line);
    mv_map.invalidate();
}

这段代码运行良好,但问题是我需要将这条路线集中在地图上。我知道我可以找到一个中点并将地图居中,但我不知道如何设置正确的缩放,我不知道是否已经有一种方法可以更有效地找到折线的中心。

谢谢。

【问题讨论】:

    标签: android osmdroid polyline


    【解决方案1】:

    一种可能的解决方案是使用方法zoomToBoundingBox。这是一个关于如何将其与点列表一起使用的小示例。

                        int minLat = Integer.MAX_VALUE;
                        int maxLat = Integer.MIN_VALUE;
                        int minLong = Integer.MAX_VALUE;
                        int maxLong = Integer.MIN_VALUE;
    
                        for (GeoPoint point : polylinePoints) {       
                            if (point.getLatitudeE6() < minLat)
                                minLat = point.getLatitudeE6();
                            if (point.getLatitudeE6() > maxLat)
                                maxLat = point.getLatitudeE6();
                            if (point.getLongitudeE6() < minLong)
                                minLong = point.getLongitudeE6();
                            if (point.getLongitudeE6() > maxLong)
                                maxLong = point.getLongitudeE6();
                        }
    
                        BoundingBoxE6 boundingBox = new BoundingBoxE6(maxLat, maxLong, minLat, minLong);
                        osmMap.zoomToBoundingBox(boundingBox.increaseByScale(1.3f));//this is some sort of padding to your bounding box
    

    我们的想法是找到一个适合所有点的正方形。

    【讨论】:

      【解决方案2】:
          // Round the Conor of the line.
          polyline.outlinePaint.strokeCap = Paint.Cap.ROUND
          // Add to map.
          binding.openMapView.overlays.add(polyline)
          // Zoom map to fit with polyline.
          binding.openMapView.post {
              binding.openMapView.zoomToBoundingBox(polyline.bounds.increaseByScale(1.5f), false)
          }
      

      例如https://github.com/osmdroid/osmdroid/blob/4094f3869a72215e5f7fb5ead78c21674b60ab07/OpenStreetMapViewer/src/main/java/org/osmdroid/samplefragments/drawing/ShowAdvancedPolylineStyles.java

      【讨论】:

      • 请添加您的代码说明。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2011-03-01
      相关资源
      最近更新 更多