如何使用 Google Cluster Manager 自定义默认引脚标记?

Posted

技术标签:

【中文标题】如何使用 Google Cluster Manager 自定义默认引脚标记?【英文标题】:How to customize default pin marker using Google Cluster Manager? 【发布时间】:2019-08-26 13:15:28 【问题描述】:

如何使用 Google 集群管理器自定义默认的 NOT CLUSTER,但红色 pin 标记?周围有一些类似的问题,但没有有效的答案。 当我使用:

func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) 

        marker.icon = UIImage(named: "my_marker")
        marker.setIconSize(scaledToSize: .init(width: 18, height: 24))


它也可以自定义集群和图标。如何只自定义 pin 标记而不是集群标记?

【问题讨论】:

【参考方案1】:

marker 有一个属性iconView,它是一个 UIView。由于它是 UIView,因此您可以根据需要进行自定义。

func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) 
    marker.iconView = MyView()

【讨论】:

效果与使用“icon”属性相同——集群图像和pin标记图像是iconView。我想要集群的默认标记和我的自定义图像 pin 标记 - 摆脱默认的红色 pin google 标记。如何区分它们? 在您的didRenderMarker 中检查marker.userData 是否为GMUStaticCluster 类型。如果是,那么您知道它是一个集群标记。然后你可以相应地切换你的标记视图。 我已经在willRenderMarker 中完成了。就是这样,谢谢!【参考方案2】:

在 Swift 5 中工作

class POIItem: NSObject, GMUClusterItem 
  var position: CLLocationCoordinate2D
  var name: String!
  var icon: UIImage

  init(position: CLLocationCoordinate2D, name: String, icon: UIImage) 
    self.position = position
    self.name = name
    self.icon = icon
  


class PrincipalViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        self.google_map.clear()

        let iconGenerator = GMUDefaultClusterIconGenerator()
        let algorithm = GMUNonHierarchicalDistanceBasedAlgorithm()
        let renderer = GMUDefaultClusterRenderer(mapView: self.google_map, clusterIconGenerator: iconGenerator)
        renderer.delegate = self
        self.clusterManager = GMUClusterManager(map: self.google_map, algorithm: algorithm, renderer: renderer)
        self.clusterManager.setDelegate(self, mapDelegate: self)


        //insert your markers type POIItem
        //self.clusterManager.add(item)

        self.clusterManager.cluster()
    



extension PrincipalViewController: GMUClusterRendererDelegate 
    func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) 

        if marker.userData is POIItem 

            if let item = marker.userData as? POIItem 
                marker.icon = item.icon
                marker.title = item.name
            

        

        if marker.userData is GMUStaticCluster 

            if let staticCluster = marker.userData as? GMUStaticCluster 

                //this is a custom UIView (.xib) contain a UIImage with custom marker and one label (countLabel) where show number of grouped markers
                let customClusterMarker:CustomClusterMarker = CustomClusterMarker()

                customClusterMarker.countLabel.text = "\(staticCluster.count)"

                let view = UIView(frame: CGRect(x: 0, y: 0, width: 52, height: 70))

                view.addSubview(customClusterMarker)
                marker.iconView = view

            
        


    


extension PrincipalViewController: GMUClusterManagerDelegate 
    func clusterManager(_ clusterManager: GMUClusterManager, didTap clusterItem: GMUClusterItem) -> Bool 
        print("didTap clusterItem")
        return true
    

    func clusterManager(_ clusterManager: GMUClusterManager, didTap cluster: GMUCluster) -> Bool 
        print("didTap cluster")
        return true
     

【讨论】:

以上是关于如何使用 Google Cluster Manager 自定义默认引脚标记?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform data.google_container_cluster.cluster.endpoint 为空

calico更换地址池

在 google dataproc 上执行 hive 作业时如何使用参数/属性标志值

#云原生征文# 在 Google Kubernetes Cluster 上使用 HANA Expression Database Service

Android Google Maps V2 Cluster 隐藏 infoWindow

Google Maps Api Marker Cluster 激活?