【问题标题】:Android Google Map, Polylines and zoomAndroid 谷歌地图、折线和缩放
【发布时间】:2017-01-20 09:59:52
【问题描述】:

我正在 Google 地图上绘制折线列表。我正在寻找一种解决方案,以根据绘制的折线来适应地图的缩放。我已经计算了所有折线的中心点,所以我知道在哪个点上将地图居中。但我没有找到任何解决方案来获得缩放级别。

这里是我使用的代码:

    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(getZoomPoint(), 15));

private LatLng getZoomPoint() {
    Double minLatitude = null;
    Double minLongitude = null;
    Double maxLatitude = null;
    Double maxLongitude = null;

    for (Feature feature : features) {
        List<Coordinates> coordinates = ((LineString) feature.getGeometry()).getCoordinates();
        for (Coordinates coordinate : coordinates) {
            // --------------------------------------------------------- INITIALISATION
            if (minLatitude == null) { // No matter on wich var we check
                minLatitude = coordinate.getLatitude();
                minLongitude = coordinate.getLongitude();
                maxLatitude = coordinate.getLatitude();
                maxLongitude = coordinate.getLongitude();
            } else {
                if (coordinate.getLatitude() < minLatitude) {
                    minLatitude = coordinate.getLatitude();
                }
                if (coordinate.getLatitude() > maxLatitude) {
                    maxLatitude = coordinate.getLatitude();
                }
                if (coordinate.getLongitude() < minLongitude) {
                    minLongitude = coordinate.getLongitude();
                }
                if (coordinate.getLongitude() > maxLongitude) {
                    maxLongitude = coordinate.getLongitude();
                }
            }
        }
    }
    double meanLatitude = (minLatitude + maxLatitude) / 2;
    double meanLongitude = (minLongitude + maxLongitude) / 2;
    return new LatLng(meanLatitude, meanLongitude);
}

我的第一个问题是:有没有办法计算缩放级别值? (这里是硬编码的 '15')。

我的第二个问题是:如何根据相机缩放级别调整折线宽度?我添加了一个监听器:

mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                Log.d("ZOOM = ", "" +mMap.getCameraPosition().zoom);

        });

我可以使用setWidth(...) 方法更改折线宽度,但我没有找到计算宽度值的“公式”。现在,固定的折线不依赖于缩放级别。

有什么建议吗?

【问题讨论】:

    标签: java android google-maps


    【解决方案1】:

    您可以使用 LatLngBounds 进行固定绑定焦点。

        /**Latlng's to get focus*/
        LatLng Delhi = new LatLng(28.61, 77.2099);
        LatLng Chandigarh = new LatLng(30.75, 76.78);
        LatLng SriLanka = new LatLng(7.000, 81.0000);
        LatLng America = new LatLng(38.8833, 77.0167);
        LatLng Arab = new LatLng(24.000, 45.000);
    
        /**create for loop/manual to add LatLng's to the LatLngBounds.Builder*/
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(Delhi);
        builder.include(Chandigarh);
        builder.include(SriLanka);
        builder.include(America);
        builder.include(Arab);
    
        /**initialize the padding for map boundary*/
        int padding = 50;
        /**create the bounds from latlngBuilder to set into map camera*/
        LatLngBounds bounds = builder.build();
        /**create the camera with bounds and padding to set into map*/
        final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
        /**call the map call back to know map is loaded or not*/
        map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                /**set animated zoom camera into map*/
                map.animateCamera(cu);
            }
        });
    

    与上面的代码一样,您有一个坐标列表List&lt;Coordinates&gt;,因为我在代码中添加了手动 LatLng。将这些坐标 LatLng 对象添加到 LatLngBounds.Builder 然后为相机设置动画,它将自动缩放所有覆盖的 LatLng。

    【讨论】:

    • 太棒了,我认为这将是一项艰巨的工作,但我有一个问题,这仅适用于近距离路线,源和目的地制造商可见,但路线折线从视野中消失,有什么想法吗?
    【解决方案2】:
    mMap = googleMap;
        Log.d("mylog", "Added Markers");
        mMap.addMarker(place1);
        mMap.addMarker(place2);
        int padding = 50;
        /**create the bounds from latlngBuilder to set into map camera*/
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(new LatLng(28.429730, 77.055400));
        builder.include(new LatLng(28.403000, 77.318800));
        LatLngBounds bounds = builder.build();
        /**create the camera with bounds and padding to set into map*/
        final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
        /**call the map call back to know map is loaded or not*/
        mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                /**set animated zoom camera into map*/
                mMap.animateCamera(cu);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2015-04-25
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多