2013-04-17 13 views
7

デバイスに表示されている現在のエリアの座標を取得する方法はありますか?Android Googleマップ:画面デバイスに現在表示されている領域を取得するにはどうすればよいですか?

バックグラウンドは、私たち自身のデータベースに保存されている「近くの」場所を表示することです。したがって、ユーザーは、マップの次のクリップを見て、のは言わせて:

enter image description here

どのように我々は、画面(または画面中央のポイントの経度/緯度と半径入手できますかすべてをカバーしていますか?)。ユーザーがカードの中心を動かすことができるので、地図の中心は通常現在の位置ではありません!

+0

どのapiを使用していますか? –

+0

APIは少なくともAPI 11をサポートしていますが、API 8-10をサポートすると便利です – longilong

+0

マップapiのバージョンについて質問しています。それは1,2,3です –

答えて

20

map.getProjection().getVisibleRegion()を使用してください。 VisibleRegionからはLatLngBoundsを得ることができます。これは使いやすいです。あなたは台形かもしれない地域で直接試してみてください。

+0

はい!まさに私が探していたもの! – longilong

7

私は応答の数からGoogleマップAPI v2の解決策が見つかりました:

stackoverflow#1stackoverflow#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として決定します。スクリーンの最大辺と2点で、地図の中心から半径を得ることができます。

 
    @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.

で割っ必要がある画面に示された領域の半径を、取得したい場合!

関連する問題