diff options
Diffstat (limited to 'platform/ios/demo/Examples/Swift/DrawingAGeoJSONLineExample.swift')
-rw-r--r-- | platform/ios/demo/Examples/Swift/DrawingAGeoJSONLineExample.swift | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/platform/ios/demo/Examples/Swift/DrawingAGeoJSONLineExample.swift b/platform/ios/demo/Examples/Swift/DrawingAGeoJSONLineExample.swift new file mode 100644 index 0000000000..3b132186f5 --- /dev/null +++ b/platform/ios/demo/Examples/Swift/DrawingAGeoJSONLineExample.swift @@ -0,0 +1,79 @@ +import Mapbox + +@objc(DrawingAGeoJSONLineExample_Swift) + +class DrawingAGeoJSONLineExample_Swift: UIViewController, MGLMapViewDelegate { + var mapView: MGLMapView! + + override func viewDidLoad() { + super.viewDidLoad() + + mapView = MGLMapView(frame: view.bounds) + mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + + mapView.setCenter(CLLocationCoordinate2D(latitude: 45.5076, longitude: -122.6736), + zoomLevel: 11, animated: false) + view.addSubview(self.mapView) + + mapView.delegate = self + + drawPolyline() + } + + func drawPolyline() { + // Parsing GeoJSON can be CPU intensive, do it on a background thread + + DispatchQueue.global(qos: .background).async(execute: { + // Get the path for example.geojson in the app's bundle + let jsonPath = Bundle.main.path(forResource: "example", ofType: "geojson") + let url = URL(fileURLWithPath: jsonPath!) + + do { + // Convert the file contents to a shape collection feature object + let data = try Data(contentsOf: url) + let shapeCollectionFeature = try MGLShape(data: data, encoding: String.Encoding.utf8.rawValue) as! MGLShapeCollectionFeature + + if let polyline = shapeCollectionFeature.shapes.first as? MGLPolylineFeature { + // Optionally set the title of the polyline, which can be used for: + // - Callout view + // - Object identification + polyline.title = polyline.attributes["name"] as? String + + // Add the annotation on the main thread + DispatchQueue.main.async(execute: { + // Unowned reference to self to prevent retain cycle + [unowned self] in + self.mapView.addAnnotation(polyline) + }) + } + } + catch { + print("GeoJSON parsing failed") + } + + }) + + } + + func mapView(_ mapView: MGLMapView, alphaForShapeAnnotation annotation: MGLShape) -> CGFloat { + // Set the alpha for all shape annotations to 1 (full opacity) + return 1 + } + + func mapView(_ mapView: MGLMapView, lineWidthForPolylineAnnotation annotation: MGLPolyline) -> CGFloat { + // Set the line width for polyline annotations + return 2.0 + } + + func mapView(_ mapView: MGLMapView, strokeColorForShapeAnnotation annotation: MGLShape) -> UIColor { + // Give our polyline a unique color by checking for its `title` property + if (annotation.title == "Crema to Council Crest" && annotation is MGLPolyline) { + // Mapbox cyan + return UIColor(red: 59/255, green:178/255, blue:208/255, alpha:1) + } + else + { + return .red + } + } +} |