jueves, 1 de marzo de 2018

Plugin para extraer tiles georreferenciados de alta resolución con Google Satellite y PyQGIS3

En un post anterior se introdujo un procedimiento para conectarse al servicio de Google Satellite (que incluía la nueva versión de QGIS3), grabar una imagen de alta resolución del Map Canvas y, posteriormente, georreferenciarla de forma adecuada mediante gdal_translate.

Para hacerlo vía plugin lo primero es escoger nuestra área de interés con una escala (si es posible) de, por ejemplo, 1:2000 lo que garantiza una resolución ráster submétrica. Cuando se graba la imagen de alta resolución se hace con una extensión *.png para que, con el mismo nombre base, sirva como ráster de entrada en el comando gdal_translate y con la extensión *.tif como ráster de salida. La extensión del Map Canvas para la imagen de alta resolución se obtiene con el método 'extent' de QgsMapCanvas; que produce un objeto de la clase QgsRectangle del cual se pueden extraer fácilmente las coordenadas xmin, ymin, xmax, ymax que servirán para la georeferenciación con el modificador -a_ullr de gdal_translate.

Una vez grabada la primera imagen ésta servirá como plantilla para las imágenes subsiguientes. La estrategia es generar una bounding box para el ráster plantilla y moverla con base en el centroide, con una función afín (translate), hacia abajo o hacia arriba según su altura o hacia la izquierda o su derecha según su espesor. Una vez posicionada en el área la bounding box se establece nuevamente la escala 1:2000 y se elimina del registro para sólo dejar ver la nueva región de interés antes de grabarla con un nuevo nombre. El proceso se repite tantas veces como se desee. Por otra parte, algo que se me había pasado de alto en la versión anterior del plugin era borrar con 'remove' (módulo os) los innecesarios archivos *.png; lo que ya corregí en esta nueva versión.

En la imagen siguiente se observa que la adaptación del código antiguo a la nueva versión de QGIS3 se realizó satisfactoriamente.


En relación a los cambios que fueron necesarios para la adecuada conversión del plugin se tiene el código siguiente ubicado en el slot 'connect'.

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")

Otros cambios tienen que ver con métodos pertenecientes a QgsGeometry. El método 'fromPolygon' corresponde ahora a 'fromPolygonXY' y 'exportToWkt' a 'asWkt'. Además, también tuvo que sustituirse el ya referido QgsMapLayerRegistry por QgsProject y tomar las previsones ya consideradas aquí para QFileDialog.

No hay comentarios: