首先:關(guān)于屏幕坐標和地圖經(jīng)緯度轉(zhuǎn)換是最好是在
baidumap.setonmapstatuschanglistener里面的onMapstatuschangefinish回調(diào)函數(shù)里面調(diào)用最好?。偨Y(jié)如果使用百度地圖提供方法時遇到空指針,首先考慮此時地圖是否是已經(jīng)繪制完成,所以處理這類操作最好是在baidumap.setonmapstatuschanglistener里面的onMapstatuschangefinish回調(diào)函數(shù)里)
坑:在onCreate中調(diào)用:baiduMap.getProjection();會報空指針異常,原因是baiduMap還沒有繪制完成
然后也許你會想了,既然在onCreate中獲取時為空,那我在onResume中獲取應(yīng)該行了吧,遺憾的告訴你還是不行
1.轉(zhuǎn)換的方法很簡單,百度地圖已經(jīng)提供方法:
? ? ? Point p =baiduMap.getProjection().toScreenLocation(carLatLng);
2.獲取屏幕周圍的四個點坐標
// 地圖看得見的地方的左上角坐標
Point point1 = new Point();
point1.x = 0;
point1.y = MainActivity.statusBarHeight
+ getResources().getDimensionPixelSize(R.dimen.main_title);// 狀態(tài)欄高度加標題欄高度
// 地圖看得見的地方的左下角坐標
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);// 狀態(tài)欄高度加標題欄高度
// 地圖看得見的地方的右下角坐標
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,分別代表地圖上左上角,左下角,右上角,右下角,四點的中的地理經(jīng)緯度坐標!里面的MainActivity.WindowWidth;等等是在MainActivity里面獲得的屏幕寬高狀態(tài)欄等等高等等的數(shù)據(jù), 相信大家都知道怎樣獲取,而我設(shè)置的全局變量,所以在這里直接調(diào)用,測試了是可行的。