2016-09-20 9 views
0

マップビューに2つのポリゴンオーバーレイを描きます。奇妙なことは、ポリゴンの線は常に描画されますが、ほとんどの場合、ポリゴンは塗りつぶされません。MKPolygonRendererがポリゴンを塗りつぶすことはありません(ほとんどの場合)

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 
    } 
} 

を私は使用してポリゴンを描画する場合:時には彼らは、私は次のようなコードに見えるのiOS 9.3 & 10をターゲットに、スウィフト3を使用しています

...私は彼らがあることを期待するように、あるが私自身のLisFieldPolygonクラスの代わりにMKPolygonを使用すると、同じ結果が得られます。アウトラインですが、(ほとんどの場合は)塗りつぶされません。

これは私を困惑させます...私が間違っていることは私には分かりません。特にコードは私が見つけた同様の例のように見えます。私は何かをリフレッシュする必要がありますか?私は何かを登録したり、何かを特定の順序で入れたりするのを忘れましたか?

結果は、内部マップ、サテライトビュー、またはOSMマップ(MKTileOverlayを使用)に関係なく結果は同じです。

PS:MKCircleはちょうどいいです。一貫して

答えて

0

OK、デバッグをして別のものを試してみた結果、最終的に解決策が見つかりました。 上記のコードは正しく動作しています。問題はデータにありました。ポリゴンデータはネットワークを介してDBから同期されます。私は座標の配列を削除しないで間違いを犯しましたが、座標を追加していました。これにより、各ポリゴン(基本的に元のポリゴンの周りに複数の円を描写する)ごとに複数の座標が得られました。これはポリゴンを正しく塗りつぶすのを妨げるようです...

私は1組の座標を持っていれば、塗りつぶしが正しく機能します。他の誰かが同様の問題に遭遇した場合は、座標データを再確認してください;-)

関連する問題