Specify a map's spatial reference.
Use case
Choosing the correct spatial reference is important for ensuring accurate projection of data points to a map.
How to use the sample
Pan and zoom around the map. Observe how the map is displayed using the World Bonne spatial reference.
How it works
- Instantiate an
AGSMap
object using a spatial reference withAGSMap.init(spatialReference:)
. - Instantiate an
AGSArcGISMapImageLayer
object and add it to the map'soperationalLayers
property. - Set the map to an
AGSMapView
object.
The ArcGIS map image layer will now use the spatial reference set to the ArcGIS map (World Bonne (WKID: 54024)) and not its default spatial reference (WGS84 (WKID: 4326)).
Relevant API
- AGSArcGISMapImageLayer
- AGSMap
- AGSMapView
- AGSSpatialReference
Additional information
Operational layers will automatically project to this spatial reference when possible.
Tags
project, WKID
Sample Code
SetMapsSRViewController.swift
// Copyright 2016 Esri.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import UIKit
import ArcGIS
class SetMapsSRViewController: UIViewController {
@IBOutlet private weak var mapView: AGSMapView!
private var map: AGSMap!
override func viewDidLoad() {
super.viewDidLoad()
// add the source code button item to the right of navigation bar
(self.navigationItem.rightBarButtonItem as! SourceCodeBarButtonItem).filenames = ["SetMapsSRViewController"]
// initialize the map, spatial reference as world bonne (54024) or goode (54052)
self.map = AGSMap(spatialReference: AGSSpatialReference(wkid: 54024)!)
// Adding a map image layer which can reproject itself to the map's spatial reference
// Note: Some layer such as tiled layer cannot reproject and will fail to draw if their spatial
// reference is not the same as the map's spatial reference
self.map.operationalLayers.add(AGSArcGISMapImageLayer(url: URL(string: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer")!))
// assing the map to the map view
self.mapView.map = self.map
}
}