我在mapview上绘制了几个多边形叠加层。奇怪的是,虽然多边形线总是被绘制,但大部分时间都没有填充多边形。虽然有时他们是,正如我所期望的那样......
我使用的是Swift 3,目标是iOS 9.3& 10.代码如下:
func addPolygons() {
for field in self.fields! {
if field.polygon.count > 0 {
let polygon = LisFieldPolygon(field: field)
self.mapView.add(polygon)
}
}
// Add circle for location accuracy
if (self.location != nil) {
let circle = MKCircle(center: self.location!.coordinate, radius: self.location!.horizontalAccuracy)
self.mapView.add(circle)
}
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
switch overlay {
case is MKPolygon:
let polyView = MKPolygonRenderer(overlay: overlay)
let color = UIColor.init(red: 0xf6/255, green: 0x81/255, blue: 0x3c/255, alpha: 1.0)
polyView.strokeColor = color
polyView.fillColor = color.withAlphaComponent(0.2)
polyView.lineWidth = 1.0
return polyView
case is LisFieldPolygon:
let lisOverlay = overlay as! LisFieldPolygon
let polyView = MKPolygonRenderer(overlay: lisOverlay.polygon)
let color: UIColor
if lisOverlay.field.make.is_farmland {
color = UIColor.init(red: 0x0e/255, green: 0xd5/255, blue: 0x1d/255, alpha: 1.0)
} else {
color = UIColor.init(red: 0xf6/255, green: 0x81/255, blue: 0x3c/255, alpha: 1.0)
}
polyView.fillColor = color // .withAlphaComponent(0.5)
polyView.strokeColor = color
polyView.lineWidth = 1.0
return polyView
case is MKCircle:
let circleView = MKCircleRenderer(overlay: overlay)
let color = UIColor(red: 0.1, green: 0.3, blue: 0.6, alpha: 1.0)
circleView.strokeColor = color.withAlphaComponent(0.8)
circleView.fillColor = color.withAlphaComponent(0.2)
circleView.lineWidth = 1.0
return circleView
case is MKTileOverlay:
let tileRenderer = MKTileOverlayRenderer(tileOverlay: self.tileOverlay!)
return tileRenderer
default:
printError("LisMapViewController.mapView rendererForOverlay: Unexpected overlay")
let lineView = MKPolylineRenderer(overlay: overlay)
lineView.strokeColor = UIColor.red
return lineView
}
}
如果我使用MKPolygon而不是我自己的LisFieldPolygon类绘制多边形,我会得到相同的结果:轮廓,但(大部分时间)没有填充。
这让我很困惑......我不知道我做错了什么,特别是因为代码看起来像我发现的类似例子。我需要刷新一些东西吗?我是否错过了注册,按特定顺序放置的东西? (顺便说一句,问题与Swift 2.3相同)
无论使用内部地图,卫星视图或OSM地图(使用MKTileOverlay),结果都是相同的。
PS:MKCircle很好。一致。答案 0 :(得分:1)
好的,经过大量的调试和尝试不同的事情,我终于找到了解决方案。 上面的代码工作正常。问题在于数据。通过网络从DB同步多边形数据。我犯了错误,没有删除坐标数组,只是保持附加坐标。这导致每个多边形的多组坐标(基本上描述了原始多边形周围的多个圆)。这似乎阻止了正确填充多边形...
如果我有一组坐标,填充工作正常。因此,如果其他人遇到类似问题,请仔细检查您的坐标数据; - )