Skip to content

Instantly share code, notes, and snippets.

@slarosa
Last active June 24, 2017 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slarosa/8480a36a84a97038052b414a75d56909 to your computer and use it in GitHub Desktop.
Save slarosa/8480a36a84a97038052b414a75d56909 to your computer and use it in GitHub Desktop.
downdem script
from processing.gui.RectangleMapTool import RectangleMapTool
from owslib.wcs import WebCoverageService
import tempfile
import os
## risoluzione DEM, i possibili valori sono: 20, 40 e 75
RES = '20'
def run():
ms = canvas.mapSettings()
crs = ms.destinationCrs()
msg_bar = iface.messageBar()
r = tool.rectangle()
s = (r.xMinimum(), r.xMaximum(), r.yMinimum(), r.yMaximum())
try:
if crs.authid() != 'EPSG:4326':
msg_bar.pushMessage("downdem script",
"Il sistema di riferimento del progetto deve essere WGS84.",
0, 5)
return
dem = get_dem_from_extent(s)
lyr = QgsRasterLayer(dem, "DEM")
QgsMapLayerRegistry.instance().addMapLayers([lyr])
msg_bar.pushMessage("downdem script",
"DEM caricato correttamente.",
3, 5)
finally:
tool.reset()
canvas.setMapTool(map_tool)
def get_dem_from_extent(s):
dirpath = tempfile.mkdtemp()
bbox = (s[0], s[3], s[1], s[2])
wcs_url = 'http://wms.pcn.minambiente.it/wcs/dtm_' + RES + 'm'
w = WebCoverageService(wcs_url, version='1.0.0')
output = w.getCoverage(identifier='EL.DTM.' + RES + 'M',
format='GeoTIFF',
bbox=bbox,
crs='EPSG:4326',
width=400, height=300)
with open(os.path.join(dirpath, 'dem.tif'), 'wb') as f:
f.write(output.read())
return os.path.join(dirpath, 'dem.tif')
canvas = iface.mapCanvas()
map_tool = canvas.mapTool()
tool = RectangleMapTool(canvas)
tool.rectangleCreated.connect(run)
canvas.setMapTool(tool)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment