有沒有辦法獲得設備上顯示的當前區域的座標?Android谷歌地圖:如何獲取屏幕設備當前顯示的區域?
背景是,我們想顯示「附近」的地方,它們存儲在我們自己的數據庫中。所以我們可以說,用戶查看地圖的下列片段:
我們怎樣在屏幕(或在屏幕的中間點和半徑的經度/緯度,其涵蓋了一切?)。請記住,地圖的中心通常不是當前位置,因爲用戶可以移動卡的中心!
有沒有辦法獲得設備上顯示的當前區域的座標?Android谷歌地圖:如何獲取屏幕設備當前顯示的區域?
背景是,我們想顯示「附近」的地方,它們存儲在我們自己的數據庫中。所以我們可以說,用戶查看地圖的下列片段:
我們怎樣在屏幕(或在屏幕的中間點和半徑的經度/緯度,其涵蓋了一切?)。請記住,地圖的中心通常不是當前位置,因爲用戶可以移動卡的中心!
使用map.getProjection().getVisibleRegion()
。從VisibleRegion
你可以得到LatLngBounds
,這很容易處理。您也可以直接嘗試可能是梯形的區域。
是啊!正是我期待的! – longilong
我發現谷歌地圖API第2版的解決方案,從幾個對策:
stackoverflow#1和 stackoverflow#2
因此,需要從GoogleMap.OnCameraChangeListener接口
private static final int REQUEST_CODE_GOOGLE_PLAY_SERVECES_ERROR = -1; private static final double EARTH_RADIOUS = 3958.75; // Earth radius; private static final int METER_CONVERSION = 1609; private GoogleMap mGoogleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(mContext); if (status != ConnectionResult.SUCCESS) { Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, activity, REQUEST_CODE_GOOGLE_PLAY_SERVECES_ERROR); dialog.show(); mGoogleMap = null; } else { mGoogleMap = ((SupportMapFragment) getFragmentManager().findFragmentById( R.id.fragment_shops_layout_maps_fragment)).getMap(); mGoogleMap.setOnCameraChangeListener(this); } }
監聽器,該工作實現活動當地圖縮放時。確定爲LatLng顯示地圖的左下角,右下角,左上角和右上角的位置。通過屏幕最大的一面和兩個點,我們可以從地圖中心獲得半徑。
@Override public void onCameraChange(CameraPosition cameraPosition) { // Listener of zooming; float zoomLevel = cameraPosition.zoom; VisibleRegion visibleRegion = mGoogleMap.getProjection().getVisibleRegion(); LatLng nearLeft = visibleRegion.nearLeft; LatLng nearRight = visibleRegion.nearRight; LatLng farLeft = visibleRegion.farLeft; LatLng farRight = visibleRegion.farRight; double dist_w = distanceFrom(nearLeft.latitude, nearLeft.longitude, nearRight.latitude, nearRight.longitude); double dist_h = distanceFrom(farLeft.latitude, farLeft.longitude, farRight.latitude, farRight.longitude); Log.d("DISTANCE: ", "DISTANCE WIDTH: " + dist_w + " DISTANCE HEIGHT: " + dist_h); }
2點之間的返回距離,以米爲單位存儲爲2對位置;
public double distanceFrom(double lat1, double lng1, double lat2, double lng2) { // Return distance between 2 points, stored as 2 pair location; double dLat = Math.toRadians(lat2 - lat1); double dLng = Math.toRadians(lng2 - lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double dist = EARTH_RADIOUS * c; return new Double(dist * METER_CONVERSION).floatValue(); }
如果你想獲得區域的半徑,在屏幕上顯示,這只是需要靠2.
devided我希望能有用!
你正在使用哪個API? –
API支持至少API 11,但支持API 8-10會很好 – longilong
我在問你的地圖api版本。它是1,2或3 –