我想在谷歌地图上显示公交车站的位置。问题是有很多,当我缩小时,它变得非常混乱。我不能只显示特定缩放级别以上的标记或使用地图调整大小吗?
答案 0 :(得分:2)
也许它并不是你想要的,但它可以帮助你。它对我有用。
根据Paul Trebilcox Ruiz在this web中创建的教程:
当地图在一个小区域内有很多数据点时,它就可以得到 当用户缩小时,它很快就会混乱。不仅如此,而且 一次显示太多标记会导致某些设备出现问题 慢慢减速。
为了帮助缓解这些引起的一些挫败感 问题,您可以使用Google Maps Utils库为您的动画制作动画 标记成簇。您需要做的第一件事是创建一个新的 实现ClusterItem
接口的模型对象。这个模型 需要实施getPosition
中的ClusterItem
方法 接口,以便返回有效的LatLng
对象。
public class ClusterMarkerLocation implements ClusterItem
{
private LatLng position;
public ClusterMarkerLocation( LatLng latLng )
{
position = latLng;
}
@Override
public LatLng getPosition()
{
return position;
}
public void setPosition( LatLng position ) {
this.position = position;
}
}
创建模型后,您可以创建一个名为的新Activity
ClusterMarkerActivity
并将其添加到您的清单中。初始化时 您的地图,您需要创建一个ClusterManager
,并将其与您的地图相关联GoogleMap
,并将LatLng
位置添加为ClusterMarkerLocations
实用程序的ClusterManager
知道要集群的内容。拿一个 查看initMarkers
的实现,以便更好地理解 这很有效。
private void initMarkers()
{
ClusterManager<ClusterMarkerLocation> clusterManager = new ClusterManager<ClusterMarkerLocation>( this, mGoogleMap);
mGoogleMap.setOnCameraChangeListener(clusterManager);
double lat;
double lng;
Random generator = new Random();
for(int i = 0; i < 1000; i++)
{
lat = generator.nextDouble() / 3;
lng = generator.nextDouble() / 3;
if(generator.nextBoolean())
{
lat = -lat;
}
if(generator.nextBoolean())
{
lng = -lng;
}
clusterManager.addItem( new ClusterMarkerLocation(new LatLng( mCenterLocation.latitude + lat, mCenterLocation.longitude + lng)));
}
}
在此示例中,我们创建了1000个随机点来显示和添加它们 到地图。 Google Maps Utils库可处理其他所有内容 我们。
答案 1 :(得分:0)
您可以将Marker Clustering添加到地图中。
当用户缩小时,制作者会合并到群集中,这使得查看地图更容易。当用户放大时,标记会显示在地图上。
答案 2 :(得分:0)
这就是你要找的。
创建一个全局变量来存储标记。
List<Marker> list = new ArrayList<>();
添加所有标记,如。
Marker marker = googleMap.addMarker(new MarkerOptions().position(latlng).title(name).snippet(snippet));
list.add(marker);
然后设置OnCameraChangeListener
。
googleMap.setOnCameraChangeListener(new
GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
for(Marker m:list){
m.setVisible(cameraPosition.zoom>8);
//8 here is your zoom level, you can set it as your need.
}
}
});
请参阅我的完整答案here