12/08/2018, 14:17

Google Maps Android Marker Clustering Utility

Tạo nhóm cho các marker trên map, ta vẫn có thể đặt một số lượng lớn các marker trên map mà không làm cho map trở nên khó đọc. Giới thiệu: Các tiện ích tạo nhóm sẽ giúp bạn quản lý dễ dàng hơn các marker ở các mức độ zoom khác nhau. Để chính xác, các marker thì được coi là các item tại ...

Tạo nhóm cho các marker trên map, ta vẫn có thể đặt một số lượng lớn các marker trên map mà không làm cho map trở nên khó đọc.

  • Giới thiệu:

    • Các tiện ích tạo nhóm sẽ giúp bạn quản lý dễ dàng hơn các marker ở các mức độ zoom khác nhau. Để chính xác, các marker thì được coi là các item tại mỗi điểm trên map và nó trở thành marker khi chúng được rendered. Các marker được nhóm vào trong một thư mục và hiển thị số lượng các item thuộc nhóm đó.

    • Khi người dùng zoom đến mức cao, các marker sẽ được hiển thị ra trên map. Khi người dùng thực hiện zoom out đến một mức nào đó, các marker sẽ được nhóm lại thành một nhóm các marker và nó cũng làm cho map trở nên dễ nhìn hơn.

    • Marker clustering utility là một phần của Google Maps Android API Utility Library.

    • alt

    • Để sử dụng marker clustering utility, bạn cần thêm các marker như là đối tượng ClusterItem đến ClusterManager. ClusterManager thông các phép tính toán, thuật toán để nhóm các marker lại thành một nhóm. ClusterRenderer làm nhiệm vụ rendering, bằng việc là thêm hay gỡ bỏ các marker hay các nhóm. ClusterRenderer và Algorithm (thuật toán) thì hoàn toàn có thể tuỳ chỉnh.

  • Thêm một marker clusterer: Hãy làm theo các bước bên dưới để tạo một cluster cho 10 marker. Kết quả sẽ được như hình dưới, dựa trên số lượng các marker shown/clustered sẽ thay đổi khi zoom: alt

  • Tóm tắt một số các bước cần thiết:

    • Implement ClusterItem để đại diện cho một marker trên bản đồ. Các nhóm trả về vị trí của các marker như một đối tượng LatLng.
    • Thêm một ClusterManager mới vào nhóm các cluster items (markers) dựa trên mức độ zoom.
    • Đặt OnCameraIdleListener() của bản đồ đến ClusterManager, từ khi ClusterManager implement listener.
    • Nếu bạn muốn thêm một chức năng cụ thể khi click vào marker thì set OnMarkerClickListener() của map đến ClusterManager, từ lúc ClusterManager (implement)thực thi listener.
    • Cung cấp dữ liệu các markers cho ClusterManager.
  • Xem các bước chi tiết hơn:

    • Để tạo 1 cluster đơn giản cho 10 marker thì việc đầu tiên tạo 1 class MyItem để thực thi ClusterItem:

    Screen Shot 2016-11-28 at 10.28.11 AM.png

    • Trong map activity, thêm ClusterManager và đưa dữ liệu vào với các cluster items. Chú ý kiểu tham số là <MyItem> cái mà thiết lập ClusterManager với kiểu MyItem:

    Screen Shot 2016-11-28 at 10.35.18 AM.png

  • Customize the marker clusters:

    • ClusterManager constructor tạo ra một DefaultClusterRenderer và một NonHierarchicalDistanceBasedAlgorithm. Bạn có thể thay đổi các phương thức của ClusterManager: ClusterRenderer và Algorithm sử dụng setAlgorithm(Algorithm <T> algorithm) và setRenderer(ClusterRenderer <T> view).
    • Bạn có thể thực thi ClusterRenderer để tùy chỉnh các rendering của clusters. DefaultClusterRenderer cung cấp một cơ sở tốt để bắt đầu. Với lớp con DefaultClusterRenderer, bạn có thể ghi đè lên giá trị mặc định.
    • Ảnh dưới là kết quả của một ví dụ demo về customize marker clusters:

    alt

    • Các CustomMarkerClusteringDemoActivity xác định các nhóm riêng, một người, và render nó bằng cách kế thừa DefaultClusterRenderer như PersonRenderer.
  • Demo này cũng cho thấy làm thế nào để implement các interface ClusterManager.OnClusterClickListener<Person> để hiển thị nhiều hơn thông tin về person khi các cluster được click. Bạn cũng có thể implement ClusterManager.OnClusterItemClickListener<Person> một cách tương tự.

Bài viết được dịch từ Marker-clustering

0