线路居中显示

这里记录一下地图使用遇到的一些困难和官网没有详细说明的一些方法,相比较而言高德地图的官网文档说明还是比较详细的,百度地图的吐槽的太多了,我也不说了,这里主要记录一下线路全览的方法(设置多点居中显示)。

高德线路全览

LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(new LatLng(latitude, longitude));
builder.include(new LatLng(latitude1, longitude1));
builder.include(new LatLng(latitude2, longitude2));
//第二个参数为四周留空宽度
aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 80));

百度地图线路全览

百度地图的全览方法在官网找了半天都没找到,最后问百度技术之后百度技术提供了方法:

LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(new LatLng(latitude, longitude));
builder.include(new LatLng(latitude1, longitude1));
builder.include(new LatLng(latitude2, longitude2));

 aMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                mapWidth = aMap.getMapStatus().winRound.right - aMap.getMapStatus().winRound.left - 400;
                mapHeight = aMap.getMapStatus().winRound.bottom - aMap.getMapStatus().winRound.top - 400;
                MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(builder.build(), mapWidth, mapHeight);
        		aMap.setMapStatus(mapStatusUpdate);
            }
        });

按照百度技术提供的方法测试了一下,由于我这边的经纬度都是后台返回的,所以我这边是网络请求完成后才调用的百度技术提供的代码,发现这个方法偶尔会出现失效的情况,地图还是显示北京为中心,经过调试发现是setOnMapLoadedCallback中的onMapLoade方法居然没有回调,这个就有点郁闷了,猜测可能是map没有加载完成,然后百度一下找到了一篇博客,这里和我遇到的是同样的情况,看了之后豁然开朗。

百度线路全览优化

建议将地图的加载监听放到OnCreate中,用于获取地图显示宽高,将全览代码提取出来,等待后加载完成的一方去调用。

 private Integer mapWidth;
 private Integer mapHeight;
 private LatLngBounds latlngBounds;

 private void initMap() {
        if (aMap == null) 
            aMap = mapView.getMap();

        //地图加载监听
        aMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                mapWidth = aMap.getMapStatus().winRound.right - aMap.getMapStatus().winRound.left - 400;
                mapHeight = aMap.getMapStatus().winRound.bottom - aMap.getMapStatus().winRound.top - 400;
                if (latlngBounds!=null){
                    lineCenter();
                }
            }
        });
    }

 @Override
  public void lineCenter(LatLngBounds.Builder newbounds) {
        latlngBounds = newbounds.build();
        if (mapWidth != null && mapHeight != null){
            lineCenter();
        }
    }

    private void lineCenter(){
        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(latlngBounds, mapWidth, mapHeight);
        aMap.setMapStatus(mapStatusUpdate);
    }

忍不住还是要吐槽一下百度地图的官方文档写的实在是有点敷衍,但也不得不说百度还是很强大的。。。。。。。。直接百度都不需要文档了,哈哈哈哈哈