首页 > 解决方案 > 在将多边形或折线添加到 MKMapView 时防止替换 WMS 覆盖

问题描述

我已经在 中实现了 Web 地图服务,MKMapView方法是MKTileOverlay使用MKTileOverlayRenderer. 它工作正常并正确显示自定义地图。

当我调用方法时喜欢mapView.addOverlay(polyLine)添加折线或多边形。WMS 覆盖被苹果地图过度取代。

// Set up the overlay and adds it to MKMapView.
func setupTileRenderer() {
    let wmsURL = formTemplate?.wmsURL
    let overlay = WMSTileOverlay(urlTemplate: wmsURL)
    overlay.canReplaceMapContent = true
    mapView.addOverlay(overlay, level: .aboveLabels)
    tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
    wmsTileOverlay = overlay
}

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKPolyline {
        let render = MKPolylineRenderer(overlay: overlay)
        render.lineWidth = 2
        render.strokeColor = UIColor.red
        return render
    } else if overlay is MKPolygon {
        let render = MKPolygonRenderer(overlay: overlay)
        render.lineWidth = 2
        render.strokeColor = UIColor.red
        return render
    } else if overlay is WMSTileOverlay {
        return tileRenderer!
    }
    return MKOverlayRenderer(overlay: overlay)
}

我该如何防止这种情况?我不希望 wmsTileOverlay 在添加折线或多边形时被替换。

标签: swiftmapkitmkmapviewwmsmktileoverlay

解决方案


我意识到,在绘制多边形之前,我正在删除以前的覆盖,所以当时我正在删除所有的覆盖。仅检查覆盖WMSTileOverlay并不会将其删除。

/// Clears the overlays added by the user.
func clearOverlaysOnMapView() {
    for overlay in mapView.overlays {
        if !(overlay is WMSTileOverlay) {
            mapView.removeOverlay(overlay)
        }
    }
}

推荐阅读