【问题标题】:Customize the marker on google map with clusters使用集群自定义谷歌地图上的标记
【发布时间】:2017-05-09 09:00:55
【问题描述】:

我在我的应用程序中使用谷歌地图 SDK 并在选定的 let long 上绘制标记并在标记上进行分组我正在使用 GMUClusterManager 在标记上添加集群,但是我面临着更改标记图像的问题,如果我用 GMUClusterManager 绘制标记,则没有选项可以更改标记图像。因此,任何人都知道在用户放大地图时将所有标记分组或更改制造商图像的任何其他方式。

【问题讨论】:

    标签: ios iphone google-maps swift3


    【解决方案1】:

    在创建 GMUDefaultClusterRenderer 设置它的委托后,我使用了我正在使用的视图控制器,然后实现 GMUClusterRendererDelegate

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

    之后,您从协议中实现func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker)。此方法使您可以访问标记和标记中包含的数据。 使用 If let 语句访问数据并为标记提供所需的 iconView if let markerData = marker.userData

    【讨论】:

    • 太棒了!请务必记住稍后将其标记为答案@Chetansharma
    【解决方案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, markerFor object: Any) -> GMSMarker? {
            switch object {
            case let item as POIItem:
    
                let marker = GMSMarker()
    
                marker.position = item.position
                marker.icon = UIImage(named: "your_custom_marker")
    
                return marker
            case let staticCluster as GMUStaticCluster:
    
                let marker = GMSMarker()
    
                marker.position = staticCluster.position
                marker.icon = UIImage(named: "your_gruped_custom_marker")
    
                return marker
            default:
                return nil
            }
        }
    }
    
    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
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-03
      • 2013-01-13
      • 2016-11-21
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2023-03-20
      相关资源
      最近更新 更多