Google标记群集

Google iOS库提供了基于网格的聚类技术,该技术可将地图划分为正方形并将标记(注释)分​​组到每个正方形网格中。它提供了摘要标记,可让您大致了解缩放级别下的“下方”。

在这里,我参考Google官方API编写此博客。 在本博客中,将讨论一个演示,该演示具有Google地图集群的示例实现。 逐步会看到并学习实现。

第1步:最初,您应该在项目文件夹中包含pod(终端命令:pod init)文件,然后在同一文件中添加Google-Maps-iOS-Utils Pod。 安装Pod之后,打开生成的.xcworkspace扩展文件。

步骤2:以这种方式初始打开ViewController并覆盖方法

 私人var mapView:GMSMapView! 
 私有var clusterManager:GMUClusterManager! 
 覆盖func loadView(){ 
  let camera = GMSCameraPosition.camera(withLatitude:37.4220,经度:-122.0841,缩放:17) 
  mapView = GMSMapView.map(withFrame:CGRect.zero,camera:camera) 
  self.view = mapView 
  } 

步骤3:在viewDidLoad方法内部添加代码,如下所示

 覆盖func viewDidLoad(){ 
  super.viewDidLoad() 
  //使用默认的图标生成器和渲染器设置集群管理器。 
 让iconGenerator = GMUDefaultClusterIconGenerator() 
  let算法= GMUNonHierarchicalDistanceBasedAlgorithm() 
 让渲染器= GMUDefaultClusterRenderer(mapView:mapView,clusterIconGenerator:iconGenerator) 
  clusterManager = GMUClusterManager(地图:mapView,算法:算法,渲染器:渲染器) 
  //生成随机项并将其添加到集群管理器。 
  generateClusterItems() 
  clusterManager.cluster() 
  //注册self来侦听GMUClusterManagerDelegate和GMSMapViewDelegate事件。 
  clusterManager.setDelegate(self,mapDelegate:self) 
  } 
 私人功能generateClusterItems(){ 
 让范围= 0.2 
 用于1 ... kClusterItemCount中的索引{ 
 令lat = kCameraLatitude +范围* randomScale() 
 令lng = kCameraLongitude +范围* randomScale() 
 让名称=“项目\(索引)” 
  let item = POIItem(位置:CLLocationCoordinate2DMake(lat,lng),名称:name) 
  clusterManager.add(项目) 
  } 
  } 
 私人函数randomScale()-> Double { 
 返回Double(arc4random())/ Double(UINT32_MAX)* 2.0-1.0 
  } 

从“集群管理器”对象开始,我们通过使用算法,渲染器和mapView来初始化该对象。 此方法generateClusterItems()生成随机注释,并将其添加到集群管理器。 调用方法cluster到clusterManager的对象,这使所有注释都可以执行聚类,并且一旦用户缩小并根据mapView的放大作用进行扩展,便可以进行分散。

步骤4:实施mapview所需的委托方法,如下所示

  func mapView(_ mapView:GMSMapView,didTap标记:GMSMarker)-> Bool { 
 如果让poiItem = marker.userData为?  POIItem { 
  NSLog(“集群项目\(poiItem.name)的水龙头标记”) 
  }其他{ 
  NSLog(“点击常规标记”) 
  } 
 返回假 
  } 

和ClusterManager委托为

  func clusterManager(_ clusterManager:GMUClusterManager,didTap cluster:GMUCluster)-> Bool { 
 让newCamera = GMSCameraPosition.camera(withTarget:cluster.position, 
 缩放:mapView.camera.zoom +1) 
 让更新= GMSCameraUpdate.setCamera(newCamera) 
  mapView.moveCamera(更新) 
 返回假 
  } 

运行您的项目,您将在地图视图中看到带有动画的聚类功能。

这是将google map clustering集成到iOS现有项目中的一种方法。

编码愉快!