【问题标题】:Prevent replacing of WMS Overlay while adding Polygon or Polyline to MKMapView在将多边形或折线添加到 MKMapView 时防止替换 WMS 覆盖
【发布时间】:2020-04-10 19:54:36
【问题描述】:

我通过继承MKTileOverlay 并使用MKTileOverlayRenderer 呈现它,在MKMapView 中实现了Web 地图服务。它工作正常并正确显示自定义地图。

当我调用像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 在添加折线或多边形时被替换。

【问题讨论】:

    标签: swift mapkit mkmapview wms mktileoverlay


    【解决方案1】:

    我意识到,在绘制多边形之前,我删除了之前的叠加层,所以当时我正在移除所有的叠加层。只是检查覆盖是WMSTileOverlay 然后不删除它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 2013-06-16
      • 2023-02-03
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多