Create and use a raster layer made from a local raster file.
Use case
Rasters can be digital aerial photographs, imagery from satellites, digital pictures, or even scanned maps. An end-user will frequently need to import raster files acquired through various data-collection methods into their map to view and analyze the data.
How to use the sample
The sample will load with a map showing a basemap and a loaded raster layer. Tap on "Add Raster" to browse for a new raster file. On desktop platforms the sample also allows you to drag and drop supported raster files to load.
How it works
- Create a
Raster
from a raster file. - Create a
RasterLayer
from the raster. - Add it as an operational layer with
map::operationalLayers()::append(rasterLayer)
.
Relevant API
- Raster
- RasterLayer
Offline Data
Read more about how to set up the sample's offline data here.
Link | Local Location |
---|---|
Shasta.tif raster | <userhome> /ArcGIS/Runtime/Data/raster/Shasta.tif |
Additional information
See the topic What is raster data? in the ArcMap documentation for more information about raster images.
Tags
data, image, import, layer, raster, visualization
Sample Code
// [WriteFile Name=RasterLayerFile, Category=Analysis] // [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 "RasterLayerFile.h" // ArcGIS Maps SDK headers #include "Basemap.h" #include "Envelope.h" #include "Error.h" #include "LayerListModel.h" #include "Map.h" #include "MapQuickView.h" #include "MapTypes.h" #include "MapViewTypes.h" #include "Point.h" #include "Raster.h" #include "RasterLayer.h" // Qt headers #include <QFuture> #include <QStandardPaths> #include <QUrl> #include <QtCore/qglobal.h> using namespace Esri::ArcGISRuntime; // helper method to get cross platform data path namespace { QString defaultDataPath() { QString dataPath; #ifdef Q_OS_IOS dataPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); #else dataPath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); #endif return dataPath; } } // namespace RasterLayerFile::RasterLayerFile(QQuickItem* parent /* = nullptr */): QQuickItem(parent) { } RasterLayerFile::~RasterLayerFile() = default; void RasterLayerFile::init() { qmlRegisterType<MapQuickView>("Esri.Samples", 1, 0, "MapView"); qmlRegisterType<RasterLayerFile>("Esri.Samples", 1, 0, "RasterLayerFileSample"); } void RasterLayerFile::componentComplete() { QQuickItem::componentComplete(); const QString dataPath = defaultDataPath() + "/ArcGIS/Runtime/Data/raster/"; // find QML MapView component m_mapView = findChild<MapQuickView*>("mapView"); m_mapView->setWrapAroundMode(WrapAroundMode::Disabled); Basemap* basemap = new Basemap(BasemapStyle::ArcGISImageryStandard, this); m_map = new Map(basemap, this); m_mapView->setMap(m_map); // Create a map using a raster layer createAndAddRasterLayer(dataPath + "Shasta.tif"); } void RasterLayerFile::createAndAddRasterLayer(QString dataPath) { // correct data path if contains file:/ prefix if (dataPath.contains("file:/")) dataPath = QString(QUrl(dataPath).toLocalFile()); //! [RasterLayerFile cpp new raster layer] Raster* raster = new Raster(dataPath, this); RasterLayer* rasterLayer = new RasterLayer(raster, this); //! [RasterLayerFile cpp new raster layer] connect(rasterLayer, &RasterLayer::doneLoading, this, [this, rasterLayer](const Error& loadError) { if (!loadError.isEmpty()) return; m_mapView->setViewpointCenterAsync(rasterLayer->fullExtent().center(), 80000); }); m_map->operationalLayers()->clear(); m_map->operationalLayers()->append(rasterLayer); }