【问题标题】:Osmdroid maximum zoom level displaying two geo locationsOsmdroid 最大缩放级别显示两个地理位置
【发布时间】:2017-08-01 10:09:38
【问题描述】:

我正在使用 osmdroid 库来渲染地图。我有两个间歇性变化的地理点,并希望 org.osmdroid.views.MapView 调整大小和翻译以确保两个点始终可见。我可以轻松地将地图重新​​居中于两者之间的中间点,但如何设置缩放级别以确保我的两个点可见?

更新

  //Getting pickup and destination latitude and longitude
                GeoPoint pickupLocation = null;
                if (tripRequest.getPickupLat() != null && tripRequest.getPickupLong() != null) {
                    pickupLocation = new GeoPoint(tripRequest.getPickupLat(), tripRequest.getPickupLong());
                }
                GeoPoint destinationLocation = null;
                if (tripRequest.getDestinationLat() != null && tripRequest.getDestinationLong() != null) {
                    destinationLocation = new GeoPoint(tripRequest.getDestinationLat(), tripRequest.getDestinationLong());
                }

                if (destinationLocation != null && pickupLocation != null) {
                    //Adding destination marker to map
                    Marker destinationLocationMarker = new Marker(map);
                    destinationLocationMarker.setPosition(destinationLocation);
                    destinationLocationMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
                    destinationLocationMarker.setIcon(context.getResources().getDrawable(R.mipmap.pin_green_small));
                    map.getOverlays().add(destinationLocationMarker);
                    //Adding pickup marker to map
                    Marker pickupLocationMarker = new Marker(map);
                    pickupLocationMarker.setPosition(pickupLocation);
                    pickupLocationMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
                    pickupLocationMarker.setIcon(context.getResources().getDrawable(R.mipmap.pin_red_small));
                    map.getOverlays().add(pickupLocationMarker);


                    BoundingBox boundingBox = BoundingBox.fromGeoPoints(Arrays.asList(destinationLocation, pickupLocation));
                    mapController = map.getController();

                    mapController.setCenter(boundingBox.getCenter());

                    mapController.setZoom(10);// I need to set this zoom properly
                    touchListener = new TouchListener();
                    map.setOnTouchListener(touchListener);

【问题讨论】:

    标签: android geolocation maps osmdroid


    【解决方案1】:

    使用 zoomToBoundingBox。它应该可以工作,如果没有问题将在其他地方。

    试试:

    map.zoomToBoundingBox(boundingBox, false);
    map.invalidate();
    

    这仍然不起作用,请检查此响应: zoom mapView to a certain bounding box on osmdroid

    如果您真的想自己计算缩放,您可以随时在source code of zoomToBoundingBox method 中找到灵感并修改计算以满足您的需求。

    【讨论】:

    • 我评论了我已经尝试过的 Spy 的回复:map.zoomToBoundingBox(boundingBox, false);它不起作用。我不相信其他地方有问题;因为地图适用于静态缩放级别。
    • @MarianneAbdelmalek 这很奇怪。我确定我最近使用了这种方法并且它一直在工作。也许尝试在您的代码中重现来自source 的功能,并使用调试器逐步完成它。
    【解决方案2】:

    我相信您正在寻找地图视图或地图控制器中的缩放到边界。使用您的点的最大/最小纬度。你会想在日期线和赤道测试

    【讨论】:

    • 感谢您的建议,我已更新以添加我的代码。我可以以边界框为中心,但似乎无法在缩放中使用该边界框。
    • 我也试过 map.zoomToBoundingBox(boundingBox, false);但它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2014-04-12
    • 2023-04-05
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多