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

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

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里面获得的屏幕宽高状态栏等等高等等的数据, 相信大家都知道怎样获取,而我设置的全局变量,所以在这里直接调用,测试了是可行的。

你可能感兴趣的:(百度地图使用踩坑之屏幕坐标和地图坐标的转换)