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
- Create a
Map
object using a spatial reference e.g.Map(SpatialReference.create(54024))
. - Create a
Basemap
object using anArcGISMapImageLayer
object. - Set the base map to the map.
- Set the map to a
MapView
object.
The ArcGIS map image layer will now use the spatial reference set to the ArcGIS map (World Bonne (WKID: 54024)) and not it's default spatial reference.
Relevant API
- ArcGISMapImageLayer
- Basemap
- Map
- MapView
- SpatialReference
Additional information
Operational layers will automatically project to this spatial reference when possible.
Tags
project, WKID
Sample Code
// [WriteFile Name=SetMapSpatialReference, Category=Maps] // [Legal] // 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. // [Legal] #ifdef PCH_BUILD #include "pch.hpp" #endif // PCH_BUILD // sample headers #include "SetMapSpatialReference.h" // ArcGIS Maps SDK headers #include "ArcGISMapImageLayer.h" #include "Basemap.h" #include "Map.h" #include "MapQuickView.h" #include "MapViewTypes.h" #include "SpatialReference.h" // Qt headers #include <QUrl> using namespace Esri::ArcGISRuntime; SetMapSpatialReference::SetMapSpatialReference(QQuickItem* parent) : QQuickItem(parent) { } SetMapSpatialReference::~SetMapSpatialReference() = default; void SetMapSpatialReference::init() { qmlRegisterType<MapQuickView>("Esri.Samples", 1, 0, "MapView"); qmlRegisterType<SetMapSpatialReference>("Esri.Samples", 1, 0, "SetMapSpatialReferenceSample"); } void SetMapSpatialReference::componentComplete() { QQuickItem::componentComplete(); // find QML MapView component m_mapView = findChild<MapQuickView*>("mapView"); m_mapView->setWrapAroundMode(WrapAroundMode::Disabled); // Create a new map with the spatial reference m_map = new Map(SpatialReference(54024), this); // create the URL pointing to the map image layer QUrl imageLayerUrl("https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer"); // construct the ArcGISMapImageLayer using the URL m_imageLayer = new ArcGISMapImageLayer(imageLayerUrl, this); // create a Basemap and pass in the ArcGISMapImageLayer m_basemap = new Basemap(m_imageLayer, this); // set the ArcGISMapImageLayer as basemap m_map->setBasemap(m_basemap); // set map on the map view m_mapView->setMap(m_map); }