【发布时间】:2021-08-29 17:12:09
【问题描述】:
我的目标是在地图上聚类注释并显示集群中的项目数,我没有 UIKit 经验并尽量避免它。是否可以仅使用 swiftUI 来完成?如果不是如何减少UIKit的干预? This is how it should look like
import SwiftUI
import MapKit
struct ContentView: View {
@State private var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 43.64422936785126, longitude: 142.39329541313924),
span: MKCoordinateSpan(latitudeDelta: 1.5, longitudeDelta: 2)
)
var body: some View {
Map(coordinateRegion: $region, annotationItems: data) { annotation in
MapAnnotation(coordinate: annotation.coordinate) {
Image(systemName: "person.circle.fill")
.resizable()
.frame(width: 20, height: 20)
.foregroundColor(Color.purple)
}
}
.edgesIgnoringSafeArea(.all)
}
}
struct SampleData: Identifiable {
var id = UUID()
var latitude: Double
var longitude: Double
var coordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: latitude,
longitude: longitude)
}
}
var data = [
SampleData(latitude: 43.70564024126748, longitude: 142.37968945214223),
SampleData(latitude: 43.81257464206404, longitude: 142.82112322464369),
SampleData(latitude: 43.38416585162576, longitude: 141.7252598737476),
SampleData(latitude: 45.29168643283501, longitude: 141.95286751470724),
SampleData(latitude: 45.49261392585982, longitude: 141.9343973160499),
SampleData(latitude: 44.69825427301145, longitude: 141.91227845284203)
]
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
【问题讨论】:
-
你将不得不做一些grouping 与区域大小相关的
CLLocation有一个distancefunction -
我认为您可能必须回复 UIKit 组件才能实现这一目标
-
@loremipsum 你能更详细地描述一下如何做到这一点吗?
-
你必须自己想出一个。我不认为有什么可做的。您使用当前区域跨度来决定该位置必须有多近才能对其进行聚类。我需要一些时间来创建一些东西来做这件事,而且 SO 不是一个代码编写服务。试一试,我们可以帮助微调。首先写下一个可能的过程。