如何知道坐标是否在MapKit iOS中的相机外部?

时间:2018-07-13 08:53:07

标签: ios swift mapkit

我正通过显示成千上万的数据来改善mapView的性能。集群已经完成,每次用户平移地图的摄像机时都会加载一组新的数据,并且为此添加了一个限制因素,以避免网络请求垃圾邮件。

不过,我的下一个想法是删除现有注释,如果它们在当前相机之外 。问题是:如何计算给定的坐标/注释是在当前摄影机的外部还是内部?

这是我的一部分代码:

@objc func throttleDone() {
    let newCoordinatesOfCamera = self.mapView.camera.centerCoordinate
    let newLocationOfCamera = CLLocation(latitude: newCoordinatesOfCamera.latitude, longitude: newCoordinatesOfCamera.longitude)

    // Remove current annotations outside the camera.

    // TODO HERE: ---

    // Fetch new data inside the camera

    self.fetchNearByEstablishments(newLocationOfCamera)
}

@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
    self.hideBottomInfo()

    // Fetch new annotations with throttle
    self.timer?.invalidate()
    self.timer = Timer.scheduledTimer(timeInterval: 1.5, target: self, selector: #selector(self.throttleDone), userInfo: nil, repeats: false)
}

我觉得这很容易,但是我在SO和Google上找不到任何答案。谢谢!

1 个答案:

答案 0 :(得分:1)

MKMapView具有region属性,该属性是地图的可见区域。您可以检查注释的坐标是在其内部还是外部。现在,您知道搜索词了,对此将有很多答案。请注意,如果摄像机倾斜,则该区域将比实际可见区域大一点,因为该区域始终是矩形,但是成角度的摄像机将显示(我认为)等腰梯形。

如果您的背景是Google及其地图框架,则摄像头是通常的思考方式,但是在iOS中,区域是考虑摄像头的通常方式,而摄像头更倾向于倾斜和旋转。