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现有项目中的一种方法。
编码愉快!