swift - 在将多边形或折线添加到 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 在添加折线或多边形时被替换。
解决方案
我意识到,在绘制多边形之前,我正在删除以前的覆盖,所以当时我正在删除所有的覆盖。仅检查覆盖WMSTileOverlay
并不会将其删除。
/// Clears the overlays added by the user.
func clearOverlaysOnMapView() {
for overlay in mapView.overlays {
if !(overlay is WMSTileOverlay) {
mapView.removeOverlay(overlay)
}
}
}
推荐阅读
- python - Django 动态多步骤表单
- c# - WPF中的圆边3D样式按钮
- c# - Alachisoft Ncache SqlCacheDependency 通过存储过程添加依赖
- javascript - 试图过滤数组
- node.js - 我应该向 mongodb 打开多少个连接?
- postgresql - 将长(数字)文本数据类型(具有空白值)转换为日期
- google-apps-script - 如何从提示或对话框中获取数据并通过 Google Web App Script 将其放入 Google Doc
- java - 读取和写入 JSON 文件
- javascript - 将值添加到父组件的列表后将值传递给子组件 - Angular
- python - 执行自定义管理命令返回无