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.

2 comentarios en “Descarga de ficheros desde Web Coverage Service (WCS)

  1. Eladio L. García de la Morena dijo:

    Hola Víctor,

    Me ha parecido muy interesantes este post. Yo suelo extaer estos MDT a las bravas, es decir, editando la URL de la petición mediante un editor de textos y al explorador de interntet.

    Sería posible que me pasases el archivo py para poder usarlo directamente desde ArcGIS. Cualquier sugerencia o recomendacion al respecto también es bienvenida.

    Gracias por adelantado y enhorabuena por el blog.

    Un saludo,

    Eladio García

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s