Descarga de ficheros desde Web Coverage Service (WCS)

Este script sirve para realizar peticiones a un servicio OGC-WCS para, dado un encuadre y una ‘coverage’ conocida, descargar su información a local en ficheros. Está realizado con python y utiliza la librería urllib2. Los ficheros raster generados, en Geotiff o AsciiGrid, pueden luego cargarse en cualquier programa GIS o manipularse con librerías estándar como gdal.

UtilidadesWCS.py

import os
import time
import urllib2

'''
Utilidad de extraccion de servicio WCS
@author: VictorVelarde (victor.velarde@gmail.com)
'''
class ServicioWCS(object):
"""
Utilidad para generar peticiones a un servicio OGC-WCS y guardar los resultados en disco
"""

ANCHURA_PETICION = 10000 #mismas unidades que el sistema de proyeccion
SEGUNDOS_ESPERA_ENTRE_PETICIONES = 5

def __init__(self, url):
''' Constructor con url del servicio, p.ej: http://www.idee.es/wcs/IDEE-WCS-UTM30N/wcsServlet? '''
    self.url = url

def ExtraerFicheros(self, xmin, ymin, xmax, ymax, directorioSalida, formatoWCS):
    if(os.path.isdir(directorioSalida) == False):
        os.mkdir(directorioSalida)

    print 'Inicio de la extraccion'
    i = 1

    for x in range(xmin, xmax, ServicioWCS.ANCHURA_PETICION):
        for y in range(ymin, ymax, ServicioWCS.ANCHURA_PETICION):
            url = ('%s?REQUEST=GetCoverage&SERVICE=WCS&VERSION=1.0.0&FORMAT=%s&COVERAGE=MDT25_peninsula_zip&BBOX=%f,%f,%f,%f&CRS=EPSG:23030&RESX=25&RESY=25' %(self.url, formatoWCS, x, y, x + ServicioWCS.ANCHURA_PETICION,
y + ServicioWCS.ANCHURA_PETICION))
            print url
            peticion = urllib2.Request(url)
            respuesta = urllib2.urlopen(peticion)
            extension = {FormatoWCS.ASCII_GRID : '.asc', FormatoWCS.GEOTIFF: '.tif'}
            fileHandle = open('%s/%03d%s' %(directorioSalida, i, extension[formatoWCS]), 'wb')
            fileHandle.write(respuesta.read())
            fileHandle.close()

            time.sleep(ServicioWCS.SEGUNDOS_ESPERA_ENTRE_PETICIONES)
            i = i + 1

            print 'Fin de la extraccion'

class FormatoWCS:
    ASCII_GRID = 'AsciiGrid'
    GEOTIFF = 'Geotiff'

Y para ejecutarlo:

from UtilidadesWCS import ServicioWCS, FormatoWCS
servicio = ServicioWCS("http://www.idee.es/wcs/IDEE-WCS-UTM30N/wcsServlet")
servicio.ExtraerFicheros(333850.0, 4728100.0, 503850.0, 4888100.0, "extraccion", FormatoWCS.ASCII_GRID)
servicio.ExtraerFicheros(333850.0, 4728100.0, 503850.0, 4888100.0, "extraccion", FormatoWCS.GEOTIFF)

Como alguno me los habéis pedido, aquí subo los ficheros por si alguien quiere probarlos: Megaupload

EDIT: Editado para añadir mejoras de WordPress al código fuente.

Anuncios