21
21
IMGS_PATH = os .path .join (os .path .dirname (os .path .realpath (__file__ )), "imgs" )
22
22
DATA_PATH = os .path .join (os .path .dirname (os .path .realpath (__file__ )), "data" )
23
23
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" )
25
26
SPRITES_PATH = os .path .join (os .path .dirname (os .path .realpath (__file__ )), "gl2qgis" , "sprites" )
26
27
27
28
@@ -52,6 +53,8 @@ def handleDoubleClick(self):
52
53
self ._add_vector_to_canvas ()
53
54
elif 'raster-dem' in self ._dataset :
54
55
self ._add_raster_dem_to_canvas ()
56
+ elif 'terrain-group' in self ._dataset :
57
+ self ._add_terrain_group_to_canvas ()
55
58
else :
56
59
self ._add_raster_to_canvas ()
57
60
return True
@@ -198,7 +201,7 @@ def _add_raster_dem_to_canvas(self, data_key='raster-dem'):
198
201
tile_json_url = self ._dataset [data_key ]
199
202
tile_json_data = utils .qgis_request_json (tile_json_url )
200
203
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" ) :
202
205
smanager = SettingsManager ()
203
206
auth_cfg_id = smanager .get_setting ('auth_cfg_id' )
204
207
intprt = "maptilerterrain"
@@ -212,10 +215,13 @@ def _add_raster_dem_to_canvas(self, data_key='raster-dem'):
212
215
raster_dem = QgsRasterLayer (uri , self ._name , "wms" )
213
216
214
217
# 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 )
216
222
fnc = QgsColorRampShader (min_ramp_value , max_ramp_value )
217
223
fnc .setColorRampType (QgsColorRampShader .Interpolated )
218
- fnc .setClassificationMode (QgsColorRampShader .EqualInterval )
224
+ fnc .setClassificationMode (QgsColorRampShader .Continuous )
219
225
fnc .setColorRampItemList (color_ramp )
220
226
lgnd = QgsColorRampLegendNodeSettings ()
221
227
lgnd .setUseContinuousLegend (True )
@@ -247,6 +253,69 @@ def _add_raster_dem_to_canvas(self, data_key='raster-dem'):
247
253
except utils .MapTilerApiException as e :
248
254
self ._display_exception (e )
249
255
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
+
250
319
def _add_vector_to_canvas (self , data_key = 'vector' ):
251
320
if data_key == "vector" :
252
321
if not self ._are_credentials_valid ():
0 commit comments