android - osmdroid 的集群太多
问题描述
我使用 osmdroid 库在我的应用程序中使用 osm 地图。我已经使用下面的代码成功地在 osm 映射中实现了集群
private void populateMarkers(final List<Datum> datumList) {
RadiusMarkerClusterer poiMarkers = new RadiusMarkerClusterer(this);
map.getOverlays().add(poiMarkers);
for (int i = 0; i < datumList.size(); i++) {
Marker marker = new Marker(map);
marker.setPosition(new GeoPoint(Double.parseDouble(datumList.get(i).getLat()), Double.parseDouble(datumList.get(i).getLng())));
Drawable currentDraw = ResourcesCompat.getDrawable(getResources(), R.drawable.location_marker, null);
marker.setIcon(currentDraw);
final int finalI = i;
marker.setOnMarkerClickListener(new Marker.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker, MapView mapView) {
if (marker.isInfoWindowShown()) {
InfoWindow.closeAllInfoWindowsOn(mapView);
} else {
getMarkerDetails(marker, datumList.get(finalI).getId());
}
return false;
}
});
poiMarkers.add(marker);
Drawable clusterIconD = getResources().getDrawable(R.drawable.marker_cluster);
Bitmap clusterIcon = ((BitmapDrawable) clusterIconD).getBitmap();
poiMarkers.setIcon(clusterIcon);
map.invalidate();
}
progressDialog.dismiss();
}
这可行,但问题是它显示了许多小集群,而不是附近地方的单个大集群。请参阅下图了解我的意思
同样对于集群,我正在使用osmdroid 奖励包依赖项
解决方案
如果您查看 的源代码,RadiusMarkerClusterer
您可以看到有一个setRadius
方法:
/** Set the radius of clustering in pixels. Default is 100px. */
public void setRadius(int radius){
mRadiusInPixels = radius;
}
我认为您所要做的就是设置更大的半径以将更多的点合并到一个集群中。
推荐阅读
- excel - 第二张表中的列表框
- php - laravel lumen 包中的动态模型命名空间
- strongloop - 如何在环回 4 中加密密码?
- javascript - 为什么我的加载器只使用 Firefox?
- protractor - 在量角器黄瓜中, getAttribute(Value) 返回 Object (browser_, then, ...) 而不是返回数据
- memory-leaks - 在 MAT 中,我保留了 0 浅堆的堆(?!?)
- jenkins-pipeline - 在 Scripted Pipeline(从 SCM 中提取 Jenkinsfile)方法中,我们如何将工件发布到 Artifactory?
- java - 我的班级有一些未知错误,当运行时,JFrame 在输入值后没有响应
- excel - 动态选择要在 VBA 函数中使用的单元格
- installation - 在 Windows 10 上安装 autokeras 时出错