如何在 SwiftUI 中聚类 Google 地图标记? 我尝试了一些代码,但是它不起作用。
func makeUIView(context: Context) -> GMSMapView {
let camera = GMSCameraPosition.camera(withLatitude: 37.7749, longitude: -122.4194, zoom: 12.0)
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
// Set up the cluster manager with the supplied icon generator and renderer.
let iconGenerator = GMUDefaultClusterIconGenerator()
let algorithm = GMUNonHierarchicalDistanceBasedAlgorithm()
let renderer = GMUDefaultClusterRenderer(mapView: mapView, clusterIconGenerator: iconGenerator)
let clusterManager = GMUClusterManager(map: mapView, algorithm: algorithm, renderer: renderer)
// Register self to listen to GMSMapViewDelegate events.
mapView.delegate = context.coordinator
clusterManager.setDelegate(nil, mapDelegate: mapView.delegate)
mapView.settings.compassButton = true
mapView.settings.myLocationButton = true
generateClusterItems(clusterManager: clusterManager, mapView: mapView)
clusterManager.cluster()
return mapView
}
private func generateClusterItems(clusterManager: GMUClusterManager, mapView: GMSMapView) {
let extent = 0.2
for index in 1...4 {
let lat = 34.442083 + extent * randomScale()
let lng = 129.152915 + extent * randomScale()
let name = "Item \(index)"
let item = POIItem(position: CLLocationCoordinate2DMake(lat, lng), name: name)
if (clusterManager == nil) {
print("cluster add - nil generate")
} else {
print("cluster not null")
let pos = CLLocationCoordinate2D(latitude: lat, longitude: lng)
let marker = GMSMarker(position: pos)
marker.map = mapView
clusterManager.add(marker)
}
}
clusterManager.cluster()
}
private func randomScale() -> Double {
return Double(arc4random()) / Double(UINT32_MAX) * 2.0 - 1.0
}
func updateUIView(_ view: GMSMapView, context: Context) {
// No-op
}
func makeCoordinator() -> Coordinator {
Coordinator()
}
class Coordinator: NSObject, GMSMapViewDelegate, GMUClusterManagerDelegate {
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
if let item = marker.userData as? POIItem {
print("Did tap marker for cluster item \(item.name)")
} else {
print("Did tap a normal marker")
}
return false
}
}
}
我期待那组标记会聚集在一起。看到一些针对 UIKit 的解决方案 (https://github.com/googlemaps/google-maps-ios-utils/tree/master/samples/SwiftDemoApp),但我需要 SwiftUI。 我是 Swift 和 iOS 开发的新手。