【问题标题】:Determining suitable zoom level based on a set of locations for OSMDroid根据 OSMDroid 的一组位置确定合适的缩放级别
【发布时间】:2023-04-05 18:18:01
【问题描述】:

从 Google Maps Android API v2,我了解到可以通过这种方法完成:

LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Location loc : allLocations) {
    LatLng position = new LatLng(loc.getLatitude(), loc.getLongitude());
    builder.include(position);
}

CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(builder.build(), someMarginValue);
map.moveCamera(cu);

但是我似乎无法为 OSMDroid 找到一种方法。是否有解决方案/类来帮助根据一组位置确定缩放级别?

【问题讨论】:

    标签: android osmdroid


    【解决方案1】:

    这对我有用:

        mapController.setZoom(10.0);
        map.post(new Runnable() {
            @Override
            public void run() {
                mapController.setCenter(boundingBox.getCenterWithDateLine());
                mapController.zoomToSpan(boundingBox.getLatitudeSpan(), boundingBox.getLongitudeSpan());
                map.invalidate();
            }
        });
    

    没有初始缩放级别,它根本不起作用。第二部分 map.post 可以删除,但我认为它有助于 zoomToSpan() 在计算时处于 isLayoutOccurred() 状态。 你可以像这样获取boundingBox:

    final BoundingBox boundingBox = BoundingBox.fromGeoPoints(geoPoints);
    

    geoPointes 只是 GeoPoint 对象的列表。

    【讨论】:

      【解决方案2】:

      在 osmdroid 中,您可以从一组位置确定最小/最大坐标,然后调用

       Mapview.zoomToBoundingBox(...)
      

      设置缩放级别。

      【讨论】:

        【解决方案3】:

        这对我来说很好用:

            ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
            waypoints.add(new GeoPoint(35.37, -119.01));
            waypoints.add(new GeoPoint(35.35, -119.01));
            waypoints.add(new GeoPoint(35.11, -118.32));
            waypoints.add(new GeoPoint(35.10, -118.32));
            waypoints.add(new GeoPoint(35.10, -118.15));
            waypoints.add(new GeoPoint(35.09, -118.14));
            waypoints.add(new GeoPoint(35.63, -117.88));
            waypoints.add(new GeoPoint(35.65, -117.72));
            waypoints.add(new GeoPoint(35.62, -117.67));
        
            final BoundingBoxE6 boundingBoxE6 = BoundingBoxE6.fromGeoPoints(waypoints);
            mMapView.zoomToBoundingBox(boundingBoxE6,true);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-30
          • 2014-04-12
          • 1970-01-01
          • 2015-01-05
          • 1970-01-01
          • 2017-06-19
          • 2013-08-25
          • 1970-01-01
          相关资源
          最近更新 更多