Skip to content

Commit ff20021

Browse files
authored
Add Ocean RGB to Terrain (#186)
* Use one ramp for ocean, one for terrain, both with transparency. * Read transparency from color ramp. Enable float values. * Add Ocean RGB to predefined maps. * Set correct color-ramp based on tileset. * Update metadata * Add Terrain as a group of two layers. * Use raster_dem.type() * Update minor version * Update READme
1 parent 76afade commit ff20021

10 files changed

+240
-165
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ MapTiler plugin provides several preset maps. Some of them are visible from QGIS
6767
- OpenStreetMap
6868
- Outdoor
6969
- Satellite
70-
- Terrain RGB
70+
- Terrain
7171
- Toner
7272
- Topo
7373
- Voyager

browser_mapitem.py

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
IMGS_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "imgs")
2222
DATA_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data")
2323
BG_VECTOR_PATH = os.path.join(DATA_PATH, "background.geojson")
24-
COLOR_RAMP_PATH = os.path.join(DATA_PATH, "mt-terrain-color-ramp.txt")
24+
TERRAIN_COLOR_RAMP_PATH = os.path.join(DATA_PATH, "terrain-color-ramp.txt")
25+
OCEAN_COLOR_RAMP_PATH = os.path.join(DATA_PATH, "ocean-color-ramp.txt")
2526
SPRITES_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "gl2qgis", "sprites")
2627

2728

@@ -52,6 +53,8 @@ def handleDoubleClick(self):
5253
self._add_vector_to_canvas()
5354
elif 'raster-dem' in self._dataset:
5455
self._add_raster_dem_to_canvas()
56+
elif 'terrain-group' in self._dataset:
57+
self._add_terrain_group_to_canvas()
5558
else:
5659
self._add_raster_to_canvas()
5760
return True
@@ -198,7 +201,7 @@ def _add_raster_dem_to_canvas(self, data_key='raster-dem'):
198201
tile_json_url = self._dataset[data_key]
199202
tile_json_data = utils.qgis_request_json(tile_json_url)
200203
layer_zxy_url = tile_json_data.get("tiles")[0]
201-
if layer_zxy_url.startswith("https://api.maptiler.com/tiles/terrain-rgb"):
204+
if layer_zxy_url.startswith("https://api.maptiler.com/tiles/terrain-rgb") or layer_zxy_url.startswith("https://api.maptiler.com/tiles/ocean-rgb"):
202205
smanager = SettingsManager()
203206
auth_cfg_id = smanager.get_setting('auth_cfg_id')
204207
intprt = "maptilerterrain"
@@ -212,10 +215,13 @@ def _add_raster_dem_to_canvas(self, data_key='raster-dem'):
212215
raster_dem = QgsRasterLayer(uri, self._name, "wms")
213216

214217
# Color ramp
215-
min_ramp_value, max_ramp_value, color_ramp = utils.load_color_ramp_from_file(COLOR_RAMP_PATH)
218+
if layer_zxy_url.startswith("https://api.maptiler.com/tiles/terrain-rgb"):
219+
min_ramp_value, max_ramp_value, color_ramp = utils.load_color_ramp_from_file(TERRAIN_COLOR_RAMP_PATH)
220+
elif layer_zxy_url.startswith("https://api.maptiler.com/tiles/ocean-rgb"):
221+
min_ramp_value, max_ramp_value, color_ramp = utils.load_color_ramp_from_file(OCEAN_COLOR_RAMP_PATH)
216222
fnc = QgsColorRampShader(min_ramp_value, max_ramp_value)
217223
fnc.setColorRampType(QgsColorRampShader.Interpolated)
218-
fnc.setClassificationMode(QgsColorRampShader.EqualInterval)
224+
fnc.setClassificationMode(QgsColorRampShader.Continuous)
219225
fnc.setColorRampItemList(color_ramp)
220226
lgnd = QgsColorRampLegendNodeSettings()
221227
lgnd.setUseContinuousLegend(True)
@@ -247,6 +253,69 @@ def _add_raster_dem_to_canvas(self, data_key='raster-dem'):
247253
except utils.MapTilerApiException as e:
248254
self._display_exception(e)
249255

256+
257+
def _add_terrain_group_to_canvas(self, data_key='terrain-group'):
258+
"""add raster layer from tiles.json"""
259+
if not self._are_credentials_valid() and data_key == 'terrain-group':
260+
self._openConfigureDialog()
261+
return
262+
263+
try:
264+
root = QgsProject().instance().layerTreeRoot()
265+
node_map = root.addGroup(self._name)
266+
node_map.setExpanded(True)
267+
268+
sources = converter.get_sources_dict_from_terrain_group(self._dataset[data_key])
269+
for source_name, source_data in sources.items():
270+
layer_zxy_url = source_data.get('zxy_url')
271+
smanager = SettingsManager()
272+
auth_cfg_id = smanager.get_setting('auth_cfg_id')
273+
intprt = "maptilerterrain"
274+
layer_zxy_url = f"{layer_zxy_url.split('?')[0]}?usage={{usage}}"
275+
uri = f"type=xyz&url={layer_zxy_url}&authcfg={auth_cfg_id}&interpretation={intprt}"
276+
zmax = source_data.get("maxzoom")
277+
if zmax:
278+
uri = f"{uri}&zmax={zmax}"
279+
raster_dem = QgsRasterLayer(uri, source_name, "wms")
280+
281+
# Color ramp
282+
if layer_zxy_url.startswith("https://api.maptiler.com/tiles/terrain-rgb"):
283+
min_ramp_value, max_ramp_value, color_ramp = utils.load_color_ramp_from_file(
284+
TERRAIN_COLOR_RAMP_PATH)
285+
elif layer_zxy_url.startswith("https://api.maptiler.com/tiles/ocean-rgb"):
286+
min_ramp_value, max_ramp_value, color_ramp = utils.load_color_ramp_from_file(OCEAN_COLOR_RAMP_PATH)
287+
fnc = QgsColorRampShader(min_ramp_value, max_ramp_value)
288+
fnc.setColorRampType(QgsColorRampShader.Interpolated)
289+
fnc.setClassificationMode(QgsColorRampShader.Continuous)
290+
fnc.setColorRampItemList(color_ramp)
291+
lgnd = QgsColorRampLegendNodeSettings()
292+
lgnd.setUseContinuousLegend(True)
293+
lgnd.setOrientation(1)
294+
fnc.setLegendSettings(lgnd)
295+
# Shader
296+
shader = QgsRasterShader()
297+
shader.setRasterShaderFunction(fnc)
298+
299+
# Renderer
300+
renderer = QgsSingleBandPseudoColorRenderer(raster_dem.dataProvider(), raster_dem.type(), shader)
301+
raster_dem.setRenderer(renderer)
302+
303+
resampleFilter = raster_dem.resampleFilter()
304+
resampleFilter.setZoomedInResampler(QgsBilinearRasterResampler())
305+
resampleFilter.setZoomedOutResampler(QgsBilinearRasterResampler())
306+
307+
# add Copyright
308+
attribution_text = source_data.get("attribution")
309+
raster_dem.setAttribution(attribution_text)
310+
QgsProject.instance().addMapLayer(raster_dem, False)
311+
node_map.insertLayer(-1, raster_dem)
312+
layerNode = node_map.findLayer(raster_dem.id())
313+
layerNode.setExpanded(False)
314+
315+
except utils.MapTilerApiException as e:
316+
self._display_exception(e)
317+
318+
250319
def _add_vector_to_canvas(self, data_key='vector'):
251320
if data_key == "vector":
252321
if not self._are_credentials_valid():

data/mt-terrain-color-ramp.txt

Lines changed: 0 additions & 153 deletions
This file was deleted.

data/ocean-color-ramp.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# QGIS Generated Color Map Export File
2+
INTERPOLATION:INTERPOLATED
3+
-12000,8,48,107,255,-12000
4+
-11500,8,62,128,255,-11500
5+
-11000,8,76,148,255,-11000
6+
-10500,13,88,161,255,-10500
7+
-10000,22,98,170,255,-10000
8+
-9500,30,110,178,255,-9500
9+
-9000,40,120,185,255,-9000
10+
-8500,51,131,190,255,-8500
11+
-8000,62,142,196,255,-8000
12+
-7500,74,151,201,255,-7500
13+
-7000,87,161,206,255,-7000
14+
-6500,100,169,211,255,-6500
15+
-6000,115,179,216,255,-6000
16+
-5500,131,187,219,255,-5500
17+
-5000,148,196,223,255,-5000
18+
-4500,159,203,226,255,-4500
19+
-4000,162,207,230,255,-4000
20+
-3500,164,211,234,255,-3500
21+
-3000,169,214,237,255,-3000
22+
-2500,177,220,240,255,-2500
23+
-2000,185,225,243,255,-2000
24+
-1500,193,231,247,255,-1500
25+
-1000,199,235,250,255,-1000
26+
-500,200,238,252,255,-500
27+
-0.1,214,246,255,255,-0
28+
0,214,246,255,1,0

0 commit comments

Comments
 (0)