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
To add a RasterLayer
as an operational layer from a local raster file:
- Create a
Map
with aBasemap
. Once this has been loaded, raster layers will be re-projected on the fly to match the map. - 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
To set up the sample's offline data, see the Use offline data in the samples section of the Qt Samples repository overview.
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=Layers]
// [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]
import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.15
import Esri.ArcGISExtras 1.1
Rectangle {
id: rootRectangle
clip: true
anchors.fill: parent
readonly property url dataPath: System.userHomePath + "/ArcGIS/Runtime/Data/raster/"
readonly property var supportedFormats: ["img","I12","dt0","dt1","dt2","tc2","geotiff","tif", "tiff", "hr1","jpg","jpeg","jp2","ntf","png","i21","ovr"]
property var rasterLayer: null
MapView {
id: mapView
anchors.fill: parent
Component.onCompleted: {
// Set the focus on MapView to initially enable keyboard navigation
forceActiveFocus();
}
Map {
id: map
Basemap {
initStyle: Enums.BasemapStyleArcGISImageryStandard
}
//! [RasterLayerFile qml new raster layer]
RasterLayer {
Raster {
path: dataPath + "Shasta.tif"
}
// ...
//! [RasterLayerFile qml new raster layer]
onLoadStatusChanged: {
if (loadStatus !== Enums.LoadStatusLoaded)
return;
mapView.setViewpointCenterAndScale(fullExtent.center, 80000);
}
}
}
}
Rectangle {
visible: addButton.visible
anchors.centerIn: addButton
radius: 8
height: addButton.height + (16)
width: addButton.width + (16)
color: "lightgrey"
border.color: "darkgrey"
border.width: 2
opacity: 0.75
}
Button {
id: addButton
anchors {
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
margins: 32
}
text: "Add Raster"
onClicked: loader.open();
}
RasterLoader {
id: loader
anchors.fill: rootRectangle
folder: dataPath
supportedExtensions: supportedFormats
onRasterFileChosen: {
createAndAddRasterLayer(url);
}
}
function createAndAddRasterLayer(rasterUrl) {
const newRaster = ArcGISRuntimeEnvironment.createObject("Raster", {path: rasterUrl});
rasterLayer = ArcGISRuntimeEnvironment.createObject("RasterLayer", {raster: newRaster});
rasterLayer.loadStatusChanged.connect(zoomToRaster);
map.operationalLayers.clear();
map.operationalLayers.append(rasterLayer);
}
function zoomToRaster(){
if (rasterLayer === null)
return;
if (rasterLayer.loadStatus !== Enums.LoadStatusLoaded)
return;
mapView.setViewpointCenterAndScale(rasterLayer.fullExtent.center, 80000);
}
}