Android中的谷歌地图标记集群
在Android应用程序中,有没有为谷歌地图实现标记集群的通用方法Android中的谷歌地图标记集群,android,android-mapview,android-maps,Android,Android Mapview,Android Maps,在Android应用程序中,有没有为谷歌地图实现标记集群的通用方法 MapView mMapView; private GoogleMap googleMap; ClusterManager<MyItem> mClusterManager; mClusterManager = new ClusterManager<MyItem>
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);
}
}
我有一个大约10000个位置的数据库,我希望以更智能的方式显示它们,而不仅仅是在一个很少比火柴盒大的显示器上倾倒数千个标记。。。
理想情况下,应该可以从网站URL检索标记,尽管我不确定从可用性的角度来看,使用通常的异步函数是否有意义 我使用了这个解决方案,它对我非常有效,我希望它能有所帮助
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);
}
}
我使用了这个解决方案,它对我非常有效,我希望它能有所帮助
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);
}
}
会对你有用的。示例应用程序中高级模式下的选项之一是在全球范围内聚集10000个随机点。集群是在后台线程上完成的,因此即使在较旧的设备上也能正常工作。使其在大数据集上运行的关键是将“扩展边界因子(overdraw)”设置为0。它在我的银河系连接上飞行。对你有用。示例应用程序中高级模式下的选项之一是在全球范围内聚集10000个随机点。集群是在后台线程上完成的,因此即使在较旧的设备上也能正常工作。使其在大数据集上运行的关键是将“扩展边界因子(overdraw)”设置为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);
}
}
主类
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);
}
}
以下代码适用于我:
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);
}
}
主类
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);
}
}