Añadir el servicio de Google Maps Satellite a través de código PyQGIS es muy sencillo; tal como se evidencia a continuación. Los detalles de la conexión pueden visualizarlos en este link.
1 2 3 4 | import requests service_url = "https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}" service_uri = "type=xyz&zmin=0&zmax=21&url="+requests.utils.quote(service_url) tms_layer = iface.addRasterLayer(service_uri, "Google Sat", "wms") |
Después de ejecutado el código anterior en la Python Console of QGIS se observa algo similar a la imagen siguiente:
Si cargamos una capa ráster (DEM con resolución de 73.9887 m) y hacemos Zoom In a la misma se obtiene:
Desmarcándola en la Map Legend y cambiando el CRS al que ésta posee de origen se tiene lo siguiente:
La imagen anterior tiene una resolución superior a los 150 m por lo que su utilidad pudiese parecer limitada. Por tanto, hacemos nuevamente un Zoom In arbitrario a un área dentro del huso correspondiente (12 N) y fijamos la escala a 1:2000. Esto resultará en una resolución sub métrica. El resultado se observa en la imagen siguiente:
La capa ráster anterior tiene un driver 'wms' y por tanto no admite la utilización de una herramienta como clipper. Por tanto, la estrategía es obtener cuál es la extensión del Map Canvas en unidades de mapa y añadirla a la imagen salvada de éste mediante el comando gdal_translate.
La serie siguiente de comandos producen el orden correcto de parámetros para la extensión a ser usada en el comando gdal_translate con el modificador -a_ullr.
1 2 3 4 5 6 7 8 | mapcanvas = iface.mapCanvas() mapcanvas.saveAsImage("/home/zeito/Desktop/convolutions-opencv/test.tif") extent = mapcanvas.extent() xmin, ymin, xmax, ymax = extent.toRectF().getCoords() xmin, ymax, xmax, ymin 438819.2292659355 4457217.5520328125 439505.5584333043 4456912.752032501 |
Una vez ejecutados los comandos anteriores en la Python Console, nos ubicamos en el directorio donde está alojada la imagen salvada del Map Canvas y se ejecuta, en Consola de Bash, el comando siguiente:
gdal_translate -a_srs EPSG:32612 -a_ullr 438819.2292659355 4457217.5520328125 439505.5584333043 4456912.752032501 test.tif utah2.tif
Al cargar el ráster producido (resolución 0.529167x0.529167 m2) se puede observar en la imagen siguiente que éste empalma de manera perfecta en la zona correspondiente una vez desmarcada la capa wms.
El proceso anterior se puede automatizar completamente en un script de Python y su utilidad quedaría ampliada si se produjeran tiles contiguos con la misma resolución.
Nota:
Este código funciona en QGIS3.
1 2 3 4 | import requests service_url = "mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}" service_uri = "type=xyz&zmin=0&zmax=21&url=https://"+requests.utils.quote(service_url) tms_layer = iface.addRasterLayer(service_uri, "Google Sat", "wms") |
2 comentarios:
Hola, como siempre me parecen muy interesantes tus post. Muchas gracias.
He tratado de ejecutar el código en QSID desde la consola, pero da error en la primera linea
import requests
Pienso que no tengo esa librería, y podría ser porque tengo la v2.14 instalada, por un tema de limitaciones de determinados pluggins que hemos programado.
Aunque a lo mejor me puedes dar una idea para solucionarlo.
Muchas gracias y un Saludo
Agustín Solabre
Hola, Agustín
Gracias por tu comentario.
Yo importé la librería en la versión 2.18 y no hay problemas. Baja e instala dicha versión de QGIS en tu máquina. En Windows pueden coexistir y ejecutarse independientemente tus dos versiones de QGIS (la 2.14 y la 2.18).
Por otra parte, no creo que exista mucha incompatibilidad para los plugins creados para ambas versiones. Si ocurre, es sólo cuestión de leer los mensajes de error y seguir las instrucciones del intérprete para la corrección.
Saludos
Publicar un comentario