问题描述
我已经在我的应用程序的 iOS 版本上实施了 Google Maps Clustering,并且运行良好。我现在正在尝试使用 android 地图实用程序库在 Android 版本上实现聚类,但在放大或缩小时它不是去聚类/聚类。
这里是集群项类:
public class MyClusterItem implements ClusterItem {
private final LatLng position;
private final BitmapDescriptor icon;
private final String tag;
public MyClusterItem(double lat,double lng,BitmapDescriptor icon,String tag) {
this.position = new LatLng(lat,lng);
this.icon = icon;
this.tag = tag;
}
@Override
public LatLng getPosition() {
return position;
}
@Override
public String getTitle() {
return null;
}
@Override
public String getSnippet() {
return null;
}
public BitmapDescriptor getIcon() {
return icon;
}
public String getTag() {
return tag;
}
}
以下是集群管理器的实现方式:
public void onMapReady(GoogleMap googleMap) {
//Log.i ( TAG,"Google Map Ready Callback" );
mMap = googleMap;
//mMap.setonMarkerClickListener(this);
// Point the map's listeners at the listeners implemented by the cluster
// manager.
mMap.setonCameraIdleListener(mClusterManager);
mMap.getUiSettings().setMapToolbarEnabled(false);
mMap.getUiSettings().setMyLocationButtonEnabled(false);
mMap.getUiSettings().setRotateGesturesEnabled(false);
if (ActivityCompat.checkSelfPermission(MapsActivity.this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && isLocationEnabled) {
mMap.setMyLocationEnabled(true);
}
float mCurrentZoom = googleMap.getCameraPosition().zoom;
// Initialize the manager with the context and the map.
// (Activity extends context,so we can pass 'this' in the constructor.)
mClusterManager = new ClusterManager<MyClusterItem>(this,mMap);
mClusterManager.setonClusterItemClickListener(mClusterItemClickListener);
mMap.setonMarkerClickListener(mClusterManager);
mClusterManager.setonClusterClickListener(new ClusterManager.OnClusterClickListener<MyClusterItem>() {
@Override
public boolean onClusterClick(final Cluster<MyClusterItem> cluster) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
cluster.getPosition(),(float) Math.floor(mMap
.getCameraPosition().zoom + 1)),300,null);
return true;
}
});
}
markerRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot,@Nullable String s) {
try {
tableCount = tableCount+1;
markerKey = dataSnapshot.getKey();
markerData = dataSnapshot.getValue(Markers.class);
MyClusterItem markerItem = new PicNickClusterItem(markerData.y,markerData.x,BitmapDescriptorFactory.fromresource(R.drawable.verified),markerKey);
mClusterItemmap.put(markerKey,markerItem);
mClusterManager.addItem(markerItem);
if(tableCount >= numTables) {
//cluster markers
mClusterManager.cluster();
}
} catch (Error error) {
noFirebaseAccessAlert();
}
}
}
初始地图截图:
缩小时的截图:
放大时的截图:
在缩小/放大时集群项目没有被集群/去集群并且没有动画。当我缩小时,我希望集群项目移动到集群中,当我放大集群项目时,我会像在应用程序的 iOS 版本中那样从集群中分离出来。此外,当我点击集群标记时,地图会放大,但集群不会扩展为集群项目。没有一个集群项具有相同的纬度/经度并且相距很远。
在 iOS 版本中,我能够设置算法(基于非分层距离)和几个用于聚类的“存储桶”(并为每个存储桶指定自定义图标)。我需要让两个版本的外观和响应都相同,以便用户在 iOS 和 Android 设备上获得相同的体验。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)