2017-12-12 9 views
1

Googleマップにマーカーを表示したいAndroidアプリケーションを開発しています。ユーザーが地図を移動するときにマーカーを取得したいのですが、場所に基づいてデータベースに保存されている膨大な数のマーカーがあります。マーカーを取得するには、マップカメラ上の現在の中間位置でリクエストする必要があります。地図の移動でGoogleマップでマーカーを取得する

私が尋ねるのは、地図のユーザーの動きと現在のズームレベルに基づいて、マーカーをリクエストするためのより良い基準があるかどうかです。ここでは、同じマーカーを再度要求する必要がないなどの最適化が必要です。

注:ここで重要な点は、マーカーを取得するための不要な要求を作成せず、クライアント側のメモリ内のマーカーの数を増やさないことです。

答えて

1

あなたはGoogleMap.OnCameraMoveStartedListener、GoogleMap.OnCameraMoveListener、GoogleMap.OnCameraMoveCanceledListener、GoogleMap.OnCameraIdleListenerをオーバーライドすることによって、現在の中央のカメラの位置を取得することができます。

@Override 
    public void onCameraIdle() { 
     double nextlatitude = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter().latitude; 
     double nextlongitude = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter().longitude; 

     System.out.println("Location Next : "+nextlatitude+" "+nextlongitude); 
    } 

    @Override 
    public void onCameraMoveCanceled() { 
//  Toast.makeText(getActivity(), "Camera movement canceled.", 
//    Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCameraMove() { 

    } 

    @Override 
    public void onCameraMoveStarted(int reason) { 
//  if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE) { 
//   Toast.makeText(getActivity(), "The user gestured on the map.", 
//     Toast.LENGTH_SHORT).show(); 
//  } else if (reason == GoogleMap.OnCameraMoveStartedListener 
//    .REASON_API_ANIMATION) { 
//   Toast.makeText(getActivity(), "The user tapped something on the map.", 
//     Toast.LENGTH_SHORT).show(); 
//  } else if (reason == GoogleMap.OnCameraMoveStartedListener 
//    .REASON_DEVELOPER_ANIMATION) { 
//   Toast.makeText(getActivity(), "The app moved the camera.", 
//     Toast.LENGTH_SHORT).show(); 
//  } 
    } 

、あなたは、このことにより、現在のズームレベルを取得することができます。

map.getCameraPosition().zoom 
0

あなたはとても最初は、Googleマップの中心位置を取得するために必要なすべての現在の地図の位置に応じて、複数のマーカーを表示したいとしたがって、このカメラ変更リスナー

View viewMap=mapFragment.getView(); 
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 
      @Override 
      public void onCameraChange(CameraPosition cameraPosition) { 
       Point point=new Point(); 
       point.set((int)viewMap.getX(),(int)viewMap.getY()); 
       latLng=googleMap.getProjection().getVisibleRegion().latLngBounds.getCenter(); 
      } 
     }); 

これはより多くの緯度と長い返し.butマップの緯度長い現在の中心位置が表示されますを追加し、その位置の緯度と経度を取得します。だからあなたは、現在の位置とfatchの記録に従ってAPIを呼び出すアイドル時にGoogleマップを必要とする、このコードを使用します。

googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
     @Override 
     public void onCameraIdle() { 
      Log.e("bug"," location is "+latLng.latitude+ ", "+latLng.longitude); 
      //call api 
     } 
    }); 

最初にレコードを取得してから、マップからすべてのマーカーを削除するようにしてください。 googleMap.clear(); を入力し、地図上に新しいマーカーを追加します。

これはあなたの助けになります。

関連する問題