2

我的应用程序使用 NOAA RNC Chart Tile Service 作为我的 MKMapView 的覆盖。下载每个图表 QuiltedTileSet 时,我能够检索图块集的最大缩放级别(例如 maximumZ = 21)

    func setupTileRenderer() {
        template = "https://tileservice.charts.noaa.gov/tiles/50000_1/{z}/{x}/{y}.png"
        let overlay = MKTileOverlay(urlTemplate: template)

        print("overlay template max zoom is : \(String(describing: overlay.maximumZ))")

        overlay.canReplaceMapContent = true
        mapView.addOverlay(overlay, level: .aboveRoads)
        tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
    }

可以理解,当用户试图放大超过最大 Z 级别时,图表将不会呈现。

我想以编程方式限制用户放大超过最大 Z,并使用 3500 的最小距离 CameraZoomRange 实现了一个近似值(基于反复试验):

   func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {     
        let zoomRange = MKMapView.CameraZoomRange(minCenterCoordinateDistance: 3500)
        mapView.setCameraZoomRange(zoomRange, animated: true)
        return tileRenderer
   }

由于并非所有 tileSet 都具有相同的 maximumZ,我想知道是否有办法从 tileSet 提供的 maximumZ 中插入 CameraZoomRange?

而且,由于并非 NOAA 的 quiltedTileSets 中的所有图块实际上都具有与请求的原始 xy 位置相同的最大缩放比例,因此 z 通常小于 21。如何在用户平移时检查最大 Z,以及如何修改 CameraZoomRange 最小值适应这个新值的距离?

我能够找到的所有旧解决方案都使用 MKCoordinateSpan 来计算最大 Z,并且不使用 iOS13 的 CameraZoomRange(例如,有没有办法限制 MKMapView 最大缩放级别?

4

0 回答 0