美文网首页Android知识Android开发经验谈程序员
百度地图使用踩坑之屏幕坐标和地图坐标的转换

百度地图使用踩坑之屏幕坐标和地图坐标的转换

作者: laer_L | 来源:发表于2016-08-12 14:05 被阅读4986次

    首先:关于屏幕坐标和地图经纬度转换是最好是在

    baidumap.setonmapstatuschanglistener里面的onMapstatuschangefinish回调函数里面调用最好!(总结如果使用百度地图提供方法时遇到空指针,首先考虑此时地图是否是已经绘制完成,所以处理这类操作最好是在baidumap.setonmapstatuschanglistener里面的onMapstatuschangefinish回调函数里

    坑:在onCreate中调用:baiduMap.getProjection();会报空指针异常,原因是baiduMap还没有绘制完成

    然后也许你会想了,既然在onCreate中获取时为空,那我在onResume中获取应该行了吧,遗憾的告诉你还是不行

    1.转换的方法很简单,百度地图已经提供方法:

          Point p =baiduMap.getProjection().toScreenLocation(carLatLng);

    2.获取屏幕周围的四个点坐标

    // 地图看得见的地方的左上角坐标

    Point point1 = new Point();

    point1.x = 0;

    point1.y = MainActivity.statusBarHeight

    + getResources().getDimensionPixelSize(R.dimen.main_title);// 状态栏高度加标题栏高度

    // 地图看得见的地方的左下角坐标

    Point point2 = new Point();

    point2.x = 0;

    point2.y = MainActivity.WindowHeight

    - getResources().getDimensionPixelSize(R.dimen.main_search);// 屏幕高度减去搜索栏高度

    // 地图看得见的地方的右上角坐标

    Point point3 = new Point();

    point3.x = MainActivity.WindowWidth;

    point3.y = MainActivity.statusBarHeight

    + getResources().getDimensionPixelSize(R.dimen.main_title);// 状态栏高度加标题栏高度

    // 地图看得见的地方的右下角坐标

    Point point4 = new Point();

    point4.x = MainActivity.WindowWidth;

    point4.y = MainActivity.WindowHeight

    - getResources().getDimensionPixelSize(R.dimen.main_search);// 屏幕高度减去搜索栏高度

    LatLng latlng1 = mBaiduMap.getProjection().fromScreenLocation(point1);

    LatLng latlng2 = mBaiduMap.getProjection().fromScreenLocation(point2);

    LatLng latlng3 = mBaiduMap.getProjection().fromScreenLocation(point3);

    LatLng latlng4 = mBaiduMap.getProjection().fromScreenLocation(point4);

    LatLngBounds.Builder b=new LatLngBounds.Builder();

    b.include(latlng1);

    b.include(latlng2);

    b.include(latlng3);

    b.include(latlng4);

    LatLng latlng_center=b.build().getCenter();

    latlng1,latlng2,latlng3,latlng4,latlng_center,分别代表地图上左上角,左下角,右上角,右下角,四点的中的地理经纬度坐标!里面的MainActivity.WindowWidth;等等是在MainActivity里面获得的屏幕宽高状态栏等等高等等的数据, 相信大家都知道怎样获取,而我设置的全局变量,所以在这里直接调用,测试了是可行的。

    相关文章

      网友评论

        本文标题:百度地图使用踩坑之屏幕坐标和地图坐标的转换

        本文链接:https://www.haomeiwen.com/subject/nsxesttx.html