昨日の記事でちょこっと紹介しましたが、「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つに纏める方法でした。
ご参考になれば幸いです。