Swift mkmapview从纬度经度增量获取可见地图区域的缩放级别,宽度或半径



我对如何获取地图可见区域的缩放级别和半径(使用mapkit mapview)感到困惑。

这是我正在寻找的(根据需要,其中之一或两者兼而有之)-

  1. 缩放级别是查看向用户显示的地图的哪个级别,并且使用该信息,我想在可见区域中显示自定义图钉。如果缩放级别很高,我需要将某些商业商店的实际徽标显示为图钉。如果缩放级别较低,我需要显示彩色点而不是徽标。

截至目前,我正在使用let updatedRadius = (mapView.camera.altitude)/1000来获取相机的高度,如果更新的半径值> 25.0,则显示彩色点。在 25.0 以下,我显示徽标。我在regionDidChanged这样做这种方法正确吗?

  1. Radius,是将其作为参数发送到我的REST API,以获取该半径内的位置列表。当用户缩小地图时,可见区域会增加,因此 REST API 需要更大的半径来返回该区域中覆盖的位置。

最终,应该发生的是,每当用户缩小时,半径都会发生变化。我需要将此更改的半径发送到我的 REST 以获取更新的列表。

  1. 什么是纬度纵向增量,我们可以使用这些值获得可见区域的半径/宽度吗?

    let latitudeDeltaVal = mapView.region.span.latitudeDelta let longitudeDeltaVal = mapView.region.span.longitudeDelta

有人可以说明需要做什么吗?

由于您需要在区域更改时调用 api,因此您需要在 mapView 的委托函数中计算半径,RegionDidChange.

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
let centralLocation = CLLocation(latitude: mapView.centerCoordinate.latitude, longitude:  mapView.centerCoordinate.longitude)
self.centralLocationCoordinate = mapView.centerCoordinate
print("Radius - (self.getRadius(centralLocation))")
}

func getRadius(centralLocation: CLLocation) -> Double{
let topCentralLat:Double = centralLocation.coordinate.latitude -  mapView.region.span.latitudeDelta/2
let topCentralLocation = CLLocation(latitude: topCentralLat, longitude: centralLocation.coordinate.longitude)
let radius = centralLocation.distanceFromLocation(topCentralLocation)
return radius / 1000.0 // to convert radius to meters 
}

要同时考虑横向和纵向方向,和/或地图方向接近东北、西北、西南、东南的情况,并将全屏画面封闭到角落,应考虑latitudeDeltalongitudeDelta

func getRadius() -> Double{
let centralLocation = CLLocation(latitude: mapView.region.center.latitude, longitude: mapView.region.center.longitude)
let cornerOfMap = CLLocation(latitude: centralLocation.coordinate.latitude + mapView.region.span.latitudeDelta , longitude: centralLocation.coordinate.longitude + mapView.region.span.longitudeDelta)
let radius = centralLocation.distance(from: cornerOfMap)
return radius / 1000.0 // to convert radius to meters
}

最新更新