有没有实现在Android应用中的谷歌地图标记簇任何常见的方式?
我有大约10000位置的数据库,并希望在更智能的方式来显示它们不仅仅是一个显示这是很少超过一个火柴盒大...理想倾销数千个标记,应该可以从网站上检索标记URL,虽然我不知道,如果使用普通的异步功能,即使使从一个可用性点感觉。
有没有实现在Android应用中的谷歌地图标记簇任何常见的方式?
我有大约10000位置的数据库,并希望在更智能的方式来显示它们不仅仅是一个显示这是很少超过一个火柴盒大...理想倾销数千个标记,应该可以从网站上检索标记URL,虽然我不知道,如果使用普通的异步功能,即使使从一个可用性点感觉。
Clusterkraf会为你工作。 其中一个样品应用在高级模式中,选项是全球群集万个随机点。 聚类是在后台线程中完成的,因此它的性能非常好,即使旧设备上。 关键以使其与大型数据集执行是设置了“扩大范围因子(透支)”为0。苍蝇在我的Galaxy Nexus。
下面的代码对我的工作:
大类
MapView mMapView;
private GoogleMap googleMap;
ClusterManager<MyItem> mClusterManager;
mClusterManager = new ClusterManager<MyItem>(getActivity(), googleMap);
mMapView = (MapView) v.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume();// needed to get the map to display immediately
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
googleMap = mMapView.getMap();
//below code use in onPost() of Asynctask
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(currentlat,currentlng), 15));
mClusterManager = new ClusterManager<MyItem>(getActivity(), googleMap);
googleMap.setOnCameraChangeListener(mClusterManager);
googleMap.setOnMarkerClickListener(mClusterManager);
CustomRenderer customRenderer = new CustomRenderer(getActivity(), googleMap, mClusterManager);
mClusterManager.setRenderer(customRenderer);
for(int i=0;i<jarray.length();i++)
{
JSONObject jobj_root=jarray.getJSONObject(i);
JSONObject j_j_record=jobj_root.getJSONObject("Record");
lat=j_j_record.getDouble("latitude");
lng=j_j_record.getDouble("longitude");
Location loc1 = new Location("");
loc1.setLatitude(temp_lat);
loc1.setLongitude(temp_lng);
Location loc2 = new Location("");
loc2.setLatitude(lat);
loc2.setLongitude(lng);
float distanceInMeters = loc1.distanceTo(loc2);
if(distanceInMeters<2000)
{
//Toast.makeText(getActivity(), " kresp="+distanceInMeters, 34).show();
MyItem offsetItem = new MyItem(lat,lng);
mClusterManager.addItem(offsetItem);
}
}
CustomRenderer.class
public class CustomRenderer extends DefaultClusterRenderer<MyItem>{
private boolean shouldCluster = true;
private static final int MIN_CLUSTER_SIZE = 1;
public CustomRenderer(Context context, GoogleMap map,ClusterManager<MyItem> clusterManager) {
super(context, map, clusterManager);
// TODO Auto-generated constructor stub
}
public void setMarkersToCluster(boolean toCluster)
{
this.shouldCluster = toCluster;
}
@Override
protected boolean shouldRenderAsCluster(Cluster<MyItem> cluster) {
if(shouldCluster)
{
return cluster.getSize() > MIN_CLUSTER_SIZE;
}
else
{
return shouldCluster;
}
}
}
MyItem.class
public class MyItem implements ClusterItem {
private final LatLng mPosition;
public MyItem(double lat, double lng) {
mPosition = new LatLng(lat, lng);
}
@Override
public LatLng getPosition() {
return mPosition;
}
}
我用这个解决方案,它工作得很好对我来说,我希望它能帮助。
http://code.google.com/p/android-playground-erdao/wiki/PhotSpot