Lines on a map
Contents
Draw lines on a map using LineString
objects.
import Foundation
import UIKit
import TrimbleMaps
import TrimbleMapsAccounts
class LinesOnAMapViewController: UIViewController, AccountManagerDelegate, TMGLMapViewDelegate {
internal var mapView: TMGLMapView!
let SOURCE_ID = "tristatepoints"
let LAYER_ID = "tristatepoints"
override func viewDidLoad() {
super.viewDidLoad()
let apiKey = "Your-API-key-here"
let account = Account(apiKey: apiKey, region: Region.northAmerica)
AccountManager.default.account = account
AccountManager.default.delegate = self
}
func stateChanged(newStatus: AccountManagerState) {
if newStatus == .loaded {
DispatchQueue.main.async {
// Create a map view
self.mapView = TMGLMapView(frame: self.view.bounds)
self.mapView.delegate = self
// Set the map location
let center = CLLocationCoordinate2D(latitude: 40.60902838712187, longitude: -97.73800045737227)
self.mapView.setCenter(center, zoomLevel: 2.5, animated: false)
// Add the map
self.view.addSubview(self.mapView)
}
}
}
func mapViewDidFinishLoadingMap(_ mapView: TMGLMapView) {
// In this example a .json file is being used as the source
let filePath = Bundle.main.path(forResource: "lines", ofType: "json")!
let fileUrl = URL(fileURLWithPath: filePath)
// Create a source and add it to the style. Important to note, sources are linked to styles.
// If you change the style you may need to re-add your source and layers
let shapeSource = TMGLShapeSource(identifier: SOURCE_ID, url: fileUrl, options: .none)
mapView.style?.addSource(shapeSource)
// Create a LineLayer to display our source information.
let lineLayer = TMGLLineStyleLayer(identifier: LAYER_ID, source: shapeSource)
lineLayer.lineWidth = NSExpression(forConstantValue: 6)
lineLayer.lineColor = NSExpression(forConstantValue: UIColor.blue)
lineLayer.lineOpacity = NSExpression(forConstantValue: 0.8)
// add the layer
mapView.style?.addLayer(lineLayer)
}
}
Sample JSON (lines.json)
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-119.091796875, 44.08758502824516],
[-108.80859375, 44.213709909702054],
[-114.2578125, 44.213709909702054],
[-113.90625, 36.31512514748051]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-111.09374999999999, 36.94989178681327],
[-111.357421875, 42.5530802889558],
[-107.138671875, 41.83682786072714],
[-108.10546875, 39.36827914916014],
[-111.005859375, 39.30029918615029],
[-108.017578125, 36.80928470205937]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-105.64453124999999, 42.22851735620852],
[-100.1953125, 42.35854391749705],
[-102.919921875, 42.22851735620852],
[-103.0078125, 36.94989178681327],
[-105.908203125, 37.020098201368114],
[-99.931640625, 36.94989178681327]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-98.349609375, 36.87962060502676],
[-98.173828125, 42.48830197960227],
[-95.80078125, 39.33429742980725],
[-94.0869140625, 42.5530802889558],
[-94.04296874999999, 37.055177106660814]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-92.548828125, 42.48830197960227],
[-92.548828125, 36.73888412439431],
[-89.1650390625, 37.26530995561875],
[-89.4287109375, 39.50404070558415],
[-92.021484375, 39.842286020743394],
[-89.384765625, 40.51379915504413],
[-89.384765625, 42.391008609205045],
[-92.493896484375, 42.49640294093705]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-87.4072265625, 42.35854391749705],
[-87.9345703125, 37.23032838760387],
[-83.583984375, 37.19533058280065]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-78.837890625, 37.33522435930639],
[-82.4853515625, 37.3002752813443],
[-82.44140625, 39.774769485295465],
[-79.27734374999999, 39.70718665682654],
[-82.44140625, 40.01078714046552],
[-82.3974609375, 41.705728515237524],
[-79.1455078125, 41.672911819602085]
]
}
}
]
}