测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由Michael Skiba,Rob Visentin,RZAffirm,Raiz Labs,Alex Rouse,Rightpoint CI维护。
Swift 的地图聚合工具
BentoMap 是一个使用 Swift 实现的 四叉树,用于地图注释聚合和存储。它还可以允许其他 2D 坐标数据符合协议并被添加到 BentoBox
容器中。
更多信息请查阅Raizlabs 开发者博客。其 Android 对应工具,称为“Marker Clustering”,在此文档中有所说明。
BentoMap/
和 BentoMap/Extensions/
目录下的 .swift
文件,并将它们拖放到您的项目中。要查看将数据加载到地图视图的完整实现,请查看示例项目。
import BentoMap
static var sampleData: QuadTree<Int, MKMapRect, MKMapPoint> {
var samples = QuadTree<Int, MKMapRect, MKMapPoint>(bentoBox: BentoBox(minPoint: MKMapPointForCoordinate(CLLocationCoordinate2D.minCoord), maxPoint: MKMapPointForCoordinate(CLLocationCoordinate2D.maxCoord)), bucketCapacity: 5)
let randomData = (1...5000).map { count in
return QuadTreeNode(originCoordinate: MKMapPointForCoordinate(CLLocationCoordinate2D.randomCoordinate()), content: count)
}
for node in randomData {
samples.insertNode(node)
}
return samples
}
func updateAnnotations(inMapView mapView: MKMapView,
forMapRect root: MKMapRect) {
guard !mapView.frame.isEmpty && !MKMapRectIsEmpty(root) else {
mapView.removeAnnotations(mapView.annotations)
return
}
let zoomScale = Double(mapView.frame.width) / root.size.width
let clusterResults = mapData.clusteredDataWithinMapRect(root,
zoomScale: zoomScale,
cellSize: Double(MapKitViewController.cellSize))
let newAnnotations = clusterResults.map(BaseAnnotation.makeAnnotation)
let oldAnnotations = mapView.annotations.flatMap({ $0 as? BaseAnnotation })
let toRemove = oldAnnotations.filter { annotation in
return !newAnnotations.contains { newAnnotation in
return newAnnotation == annotation
}
}
mapView.removeAnnotations(toRemove)
let toAdd = newAnnotations.filter { annotation in
return !oldAnnotations.contains { oldAnnotation in
return oldAnnotation == annotation
}
}
mapView.addAnnotations(toAdd)
}
问题和拉取请求受欢迎!请在提交之前确保您已安装最新的 SwiftLint,并且在构建时没有生成任何样式警告。
贡献者应遵守贡献者公约行为准则。
BentoMap 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE
文件。