Сенсорные и управляемые данными наложения (полигоны) в MKMapView с данными из geoJson - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь нарисовать оверлеи с MKOverlay (многоугольник) на MKMapView из данного geo Json файла.

Мой код работает нормально. Полигоны отображаются. Я использую MKGeoJSONDecoder . Я хотел бы использовать текущее местоположение пользователя для отображения данных из текущего наложения. Эти данные также находятся в файле geo Json как свойство. Возможно ли это?

Можно ли сделать оверлеи сенсорными для отображения данных текущего оверлея касанием?

import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {

        super.viewDidLoad()

        mapView.delegate = self

        if let path = Bundle.main.path(forResource: "directions", ofType: "geojson") {
            do {
                let url = URL(fileURLWithPath: path)
                let data = try Data(contentsOf: url)

                if let features = try? MKGeoJSONDecoder().decode(data) as? [MKGeoJSONFeature] {

                    for feature in features {

                        if let poly = feature.geometry[0] as? MKPolygon {
                            mapView.addOverlay(poly)
                        }

                        if let multiPoly = feature.geometry[0] as? MKMultiPolygon {
                            mapView.addOverlay(multiPoly)
                        }
                    }
                }
            } catch {
                // print errors
            }
        }
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

        switch overlay {
        case is MKPolygon:
            let renderer = MKPolygonRenderer(polygon: overlay as! MKPolygon)
            renderer.fillColor = UIColor.blue.withAlphaComponent(0.25)
            renderer.strokeColor = UIColor.blue
            renderer.lineWidth = 1
            return renderer
        case is MKMultiPolygon:
            let renderer = MKMultiPolygonRenderer(multiPolygon: overlay as! MKMultiPolygon)
            renderer.fillColor = UIColor.blue.withAlphaComponent(0.25)
            renderer.strokeColor = UIColor.blue
            renderer.lineWidth = 1
            return renderer
        default:
            return MKOverlayRenderer()
        }
    }
}
...