BentoMap 0.3.3

BentoMap 0.3.3

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最新发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Michael SkibaRob VisentinRZAffirmRaiz LabsAlex RouseRightpoint CI维护。



BentoMap 0.3.3

  • 版权属于
  • Michael Skiba,Rob Visentin 和 Matt Buckley

BentoMap

Swift 的地图聚合工具

BentoMap 是一个使用 Swift 实现的 四叉树,用于地图注释聚合和存储。它还可以允许其他 2D 坐标数据符合协议并被添加到 BentoBox 容器中。

更多信息请查阅Raizlabs 开发者博客。其 Android 对应工具,称为“Marker Clustering”,在此文档中有所说明。

BentoMap

功能

  • [x] 在四叉树中存储注释数据
  • [x] 以聚合阈值获取某个区域内的注释
  • [x] 存储其他数据类型的协议

需求

  • iOS 9.0+
  • Xcode 8.0

安装

手动安装

  1. 下载所有在 BentoMap/BentoMap/Extensions/ 目录下的 .swift 文件,并将它们拖放到您的项目中。
  2. 恭喜!

使用示例

要查看将数据加载到地图视图的完整实现,请查看示例项目

插入数据

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 文件。

作者