Search code examples
iosswiftgoogle-mapsmarkerclusterergoogle-maps-ios-utils

How set minClusterSize in google map?


In Android SDK there is minClusterSize property that when we set it to 1 it show's every elements as cluster not marker. But in iOS SDK doesn't exist minClusterSize and DefaultRenderer by default show's lower than 3 items as items not cluster. There is any solution ? Thanks.

enter image description here


Solution

  • import UIKit
    
    class CustomClusterRenderer: GMUDefaultClusterRenderer {
    
        let GMUAnimationDuration: Double = 0.5
        var mapView: GMSMapView?
    
        override init(mapView: GMSMapView, clusterIconGenerator iconGenerator: GMUClusterIconGenerator) {
            super.init(mapView: mapView, clusterIconGenerator: iconGenerator)
            self.mapView = mapView
        }
    
        func markerWith(position: CLLocationCoordinate2D, from: CLLocationCoordinate2D, userData: AnyObject, clusterIcon: UIImage, animated: Bool) -> GMSMarker {
    
            let initialPosition = animated ? from : position
            let marker = GMSMarker(position: initialPosition)
            marker.userData = userData
    
            marker.icon = clusterIcon
            marker.groundAnchor = CGPoint(x: 0.5, y: 0.5)
    
            marker.map = mapView
            if animated {
                CATransaction.begin()
                CAAnimation.init().duration = GMUAnimationDuration
                marker.layer.latitude = position.latitude
                marker.layer.longitude = position.longitude
                CATransaction.commit()
            }
            return marker
        }
    
        func getCustomUIImageItem(userData: AnyObject) -> UIImage {
            if let item = userData as? Marker {
                return item.merkerIcon
            }
            return UIImage()
        }
    
        override func shouldRender(as cluster: GMUCluster, atZoom zoom: Float) -> Bool {
            print("Zoom Level is \(zoom) , and result is \(zoom<=14)")
            return zoom <= 14;
        }
    
    
    }
    
    
    class Marker: NSObject, GMUClusterItem {
    
        var position: CLLocationCoordinate2D
        var estate: Estate
    
        init(estate: Estate) {
    
            self.estate = estate
            self.position = CLLocationCoordinate2D(latitude: estate.latitude,longitude: estate.longitude)
    
        }
    
    }
    

    enter image description here