【发布时间】:2017-10-01 11:04:14
【问题描述】:
我想在谷歌地图上显示公交车站的位置。问题是有很多,当我缩小它变得非常混乱。我不能只显示特定缩放级别以上的标记或使它们随地图调整大小吗?
【问题讨论】:
标签: android google-maps android-activity google-maps-markers
我想在谷歌地图上显示公交车站的位置。问题是有很多,当我缩小它变得非常混乱。我不能只显示特定缩放级别以上的标记或使它们随地图调整大小吗?
【问题讨论】:
标签: android google-maps android-activity google-maps-markers
也许这不是你想要的,但它可以帮助你。它对我有用。
根据 Paul Trebilcox Ruiz 在this web 中创建的教程:
当一张地图在一个小区域内有很多数据点时,它可以得到 当用户缩小时,很快就会变得混乱。不仅如此,而且 一次显示太多标记可能会导致某些设备 速度大大减慢。
为了帮助减轻一些由这些引起的挫败感 问题,您可以使用 Google Maps Utils 库为您的 标记成簇。您需要做的第一件事是创建一个新的 实现
ClusterItem接口的模型对象。该型号 需要从ClusterItem实现getPosition方法 接口以返回一个有效的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;
}
}
创建模型后,您可以创建一个名为
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 库处理其他所有内容 我们。
【讨论】:
这就是你要找的东西。
创建一个全局变量来存储标记。
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
【讨论】:
您可以将Marker Clustering 添加到您的地图中。
当用户缩小时,制造商被组合成集群,这使得查看地图更容易。当用户放大时,标记会显示在地图上。
【讨论】: