Create a raster layer from a raster image service.
Use case
Accessing a raster image from an online service can be useful for analysing the most up-to-date data available for an area. For example, retrieving recent results of bathymetry surveys within a shipping channel monitored for its sediment build-up would allow planners to assess dredging needs.
How to use the sample
Simply launch the sample to see a raster from an image service being used on a map.
How it works
Create an ImageServiceRaster using the service's URL.
Create a RasterLayer from the image service raster.
Add the raster layer the the map.
Relevant API
ImageServiceRaster
RasterLayer
About the data
This sample uses a NOAA raster image service. The service computes a hillshade image from the depth (in meters) of U.S. coastal waters.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// [WriteFile Name=RasterLayerService, Category=Layers]// [Legal]// Copyright 2017 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#include"RasterLayerService.h"#include"Map.h"#include"MapQuickView.h"#include"RasterLayer.h"#include"Basemap.h"#include"ArcGISTiledLayer.h"#include"ImageServiceRaster.h"#include"Error.h"#include"MapViewTypes.h"#include"TaskWatcher.h"#include"LayerListModel.h"#include"SpatialReference.h"#include"Viewpoint.h"#include"Point.h"usingnamespace Esri::ArcGISRuntime;
RasterLayerService::RasterLayerService(QQuickItem* parent /* = nullptr */):
QQuickItem(parent)
{
}
RasterLayerService::~RasterLayerService() = default;
voidRasterLayerService::init(){
// Register the map view for QML qmlRegisterType<MapQuickView>("Esri.Samples", 1, 0, "MapView");
qmlRegisterType<RasterLayerService>("Esri.Samples", 1, 0, "RasterLayerServiceSample");
}
voidRasterLayerService::componentComplete(){
QQuickItem::componentComplete();
// find QML MapView component m_mapView = findChild<MapQuickView*>("mapView");
m_mapView->setWrapAroundMode(WrapAroundMode::Disabled);
// create a new tiled layer to add a basemap ArcGISTiledLayer* tiledLayer = newArcGISTiledLayer(
QUrl(QStringLiteral("https://services.arcgisonline.com/arcgis/rest/services/Canvas/World_Dark_Gray_Base/MapServer")), this);
m_map = newMap(newBasemap(tiledLayer, this));
m_mapView->setMap(m_map);
//! [ImageServiceRaster Create a new image service raster]// create an image service raster ImageServiceRaster* imageServiceRaster = newImageServiceRaster(
QUrl(QStringLiteral("https://gis.ngdc.noaa.gov/arcgis/rest/services/bag_hillshades_subsets/ImageServer")), this);
// zoom to the center of the raster once it's loadedconnect(imageServiceRaster, &ImageServiceRaster::doneLoading, this, [this]()
{
constexprdouble scale = 200000.;
Viewpoint vpCenter = Viewpoint(Point(-13643095.660131, 4550009.846004, SpatialReference::webMercator()), scale);
m_mapView->setViewpoint(vpCenter);
});
// create a raster layer using the image service raster m_rasterLayer = newRasterLayer(imageServiceRaster, this);
// add the raster layer to the map's operational layers m_map->operationalLayers()->append(m_rasterLayer);
//! [ImageServiceRaster Create a new image service raster]}