Android地图仅在特定缩放级别显示标记

时间:2015-05-31 09:31:14

标签: android google-maps android-activity google-maps-markers

我想在谷歌地图上显示公交车站的位置。问题是有很多,当我缩小时,它变得非常混乱。我不能只显示特定缩放级别以上的标记或使用地图调整大小吗?

3 个答案:

答案 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

相关问题