首先:关于屏幕坐标和地图经纬度转换是最好是在
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里面获得的屏幕宽高状态栏等等高等等的数据, 相信大家都知道怎样获取,而我设置的全局变量,所以在这里直接调用,测试了是可行的。