2013-04-14 5 views
2

내 앱에서 Android지도 (v2) 구현에 대한 마커를 관리하는 방법을 찾으려고합니다. 표시 가능한 경계 안에있는 마커를 그리는 동시에 특정 확대/축소 수준 위에 만 마커를 표시하고 싶습니다. 그것은 일반적인 문제처럼 보입니다. 그래서, 여기 누가 마커 매니저 라이브러리 같은 것을 사용하는지 묻고 있습니다. 일을 더 쉽게하고 처음부터 다시 만들 필요가 없습니다. 감사.Android Google지도 v2 마커 관리자가 있습니까?

답변

2

아직 관리자는 아니지만 클러스터링 기능이있는 Android Maps Extensions을 확인하고 싶을 수 있습니다.

편집 :

AME에서, 가시 영역 내부 그리기 마커 사용에 의해 달성 될 수있다 :

map.setClustering(new ClusteringSettings().addMarkersDynamically(true)); 

또는

map.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true)); 

당신 만 클러스터링을하지 않으려면 많은 마커를 추가 할 때 대/소문자를 최적화하십시오.

특정 확대/축소 수준을 맞춘 경우에만 마커를 표시하는 것은 아직 완전히 구현되지 않았지만 이미 here으로 요청되었습니다.

1

나는이 질문이 꽤 오래되었다는 것을 알고있다. 그러나 누군가가 여전히 같은 문제를 가지고 있다면, Google Maps Android Marker Clustering Utility을 사용할 수있다. 주의해야
단계는 다음과 같습니다 :

  1. 지도에 마커를 표현하기 위해 ClusterItem를 구현합니다. 클러스터 항목은 마커의 위치를 ​​LatLng 개체로 반환합니다.
  2. 새 ClusterManager를 추가하여 확대/축소 수준에 따라 클러스터 항목 (마커)을 그룹화합니다.
  3. 지도의 OnCameraChangeListener()를 ClusterManager에 설정합니다. 이는 ClusterManager가 수신기를 구현하기 때문입니다.
  4. 마커 클릭 이벤트에 대한 응답으로 특정 기능을 추가하려면 ClusterManager가 리스너를 구현하기 때문에 맵의 OnMarkerClickListener()를 ClusterManager로 설정하십시오.
  5. 마커를 ClusterManager에 넣습니다.

예 구현 :

public class MyItem implements ClusterItem { 
    private final LatLng mPosition; 

    public MyItem(double lat, double lng) { 
     mPosition = new LatLng(lat, lng); 
    } 

    @Override 
    public LatLng getPosition() { 
     return mPosition; 
    } 
} 


private void setUpClusterer() { 
    // Declare a variable for the cluster manager. 
    private ClusterManager<MyItem> mClusterManager; 

    // Position the map. 
    getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10)); 

    // Initialize the manager with the context and the map. 
    // (Activity extends context, so we can pass 'this' in the constructor.) 
    mClusterManager = new ClusterManager<MyItem>(this, getMap()); 

    // Point the map's listeners at the listeners implemented by the cluster 
    // manager. 
    getMap().setOnCameraChangeListener(mClusterManager); 
    getMap().setOnMarkerClickListener(mClusterManager); 

    // Add cluster items (markers) to the cluster manager. 
    addItems(); 
    } 

private void addItems() { 

    // Set some lat/lng coordinates to start with. 
    double lat = 51.5145160; 
    double lng = -0.1270060; 

    // Add ten cluster items in close proximity, for purposes of this example. 
    for (int i = 0; i < 10; i++) { 
     double offset = i/60d; 
     lat = lat + offset; 
     lng = lng + offset; 
     MyItem offsetItem = new MyItem(lat, lng); 
     mClusterManager.addItem(offsetItem); 
    } 
} 

자세한 내용은 here를 확인할 수 있으며, library's Github page

관련 문제