I am trying to draw overlays with MKOverlay (polygon) on a MKMapView from a given geoJson file.
My code works fine. The polygons are displayed. I use the MKGeoJSONDecoder. I would like to use the user's current location to display data from the current overlay. This data is also in the geoJson file as property. Is that possible?
Is it also possible to make the overlays touchable in order to display the data of the current overlay by touch?
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()
}
}
}