【Android】OpenStreetMap上の特定の範囲内のマーカーを1つに纏める方法

昨日の記事でちょこっと紹介しましたが、「osmdroid」を使って表示した OpenStreetMap 上のマーカーをまとめる方法です。
マーカーの数が少なければ使わなくても良いのかもしれませんが、狭い範囲で20個も30個もマーカーがあると、地図の倍率を下げたときにごちゃごちゃになってしまうので、ある程度の範囲内のマーカーをグループ化してまとめる方法についてです。
osmbonuspack」という「osmdroid」のサードパーティライブラリの機能を使いました。
GitHub のページはこちらから。

GitHub – MKergall/osmbonuspack: A third-party library of (very) useful additional objects for osmdroid
https://github.com/MKergall/osmbonuspack/wiki/Tutorial_3

 

実装方法は、まず build.gradle に下記を追加します。

repositories { 
     ...
     maven { url "https://jitpack.io" }
}
dependencies {
    ...
    compile 'com.github.MKergall:osmbonuspack:6.6.0'
}

上記を追加したら、Sync Now を実行します。

次に、マーカーを表示している処理に下記を追加します。

// マーカーを纏めるための MarkerCluster の設定
final RadiusMarkerClusterer clusterer = new RadiusMarkerClusterer(getBaseContext());
clusterer.setRadius(100);

// マーカーを任意の数だけ追加
for (int i = 0; i < points.size(); i++) {
    final Marker mr = new Marker(mapView);
    mr.setPosition(new GeoPoint([緯度], [経度]));
    // クラスターにマーカーを追加
    clusterer.add(mr);
    // マップにクラスターを追加
    mapView.getOverlays().add(clusterer);
}

必要な処理は以上です。
なお、3行目の setRadius() で、マーカーを纏める範囲を指定できますが、こちらは実際にアプリを動作させてみて調整するのがおすすめです。

 

以上、OpenStreetMap 上の特定の範囲内のマーカーを1つに纏める方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG