2017-12-12 22 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

당신은 너무 먼저 구글지도의 중심 위치를 활용하기 위해 필요한 모든 기능과 현재지도 위치에 따라 여러 개의 마커를 표시 할을 그래서이 카메라 변경 청취자

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(); 
      } 
     }); 

이 더 위도와 긴 반환 나누었다지도의 위도 긴 현재 중심 위치를 표시합니다 추가 그 위치의 위도와 경도를 얻을. 그래서 당신은 현재 위치와 fatch 기록에 따라 API를 호출 할 때 구글 맵스 유휴 상태가 필요하다.

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

레코드를받은 후 처음으로 Google지도를 지우고지도에서 추가 된 모든 마커를 제거하십시오. googleMap.clear(); 지도에 새 아이콘을 추가하십시오.

이렇게하면 도움이 될 것입니다.