1 votos

Agregue CRS a TIFF descargado con owslib

Estoy usando owslib para descargar una fotografía aérea. En la solicitud de GetMap de WMS especifico un srs, por lo que asumo (¿quizás equivocadamente?) que la respuesta que recibo contiene un crs.

Cuando escribo el resultado a un GeoTiff, el archivo no contiene información espacial. ¿Hay alguna manera de hacer esto o debo usar GDAL para proyectar el resultado, y si es así, cómo?

Este es el código que estoy utilizando hasta ahora:

from owslib.wms import WebMapService
import gdal
from osgeo import osr

wms_url = 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wms?'
wms = WebMapService(wms_url,version = '1.3.0')

img = wms.getmap(layers=['Actueel_ortho25'],
                 srs='EPSG:28992',
                 bbox=(97712,440638,98220,441091),
                 size=(1000,1000),
                 format='image/GeoTIFF',
                 transparent=False)

out = open('path\\to\\test.tiff','wb')
out.write(img.read())
out.close()

print('hecho')

2voto

IQAndreas Puntos 275

Tal como está, deberás hacer un seguimiento de la información de CRS al lado o escribirla en la imagen tú mismo.

La documentación parece no mencionarlo, pero los objetos de capa WMS tienen un atributo .crs_list, cuyo último miembro parece ser el sistema EPSG predeterminado para esa capa.

from owslib.wms import WebMapService
url = 'http://maps.geogratis.gc.ca/wms/hydro_network_en?service=wms'
wms = WebMapService(url, version='1.3.0')
wms['hydro_network'].crs_list

>>> [(-180.0, -90.0, 180.0, 90.0, 'EPSG:4269')]

Las capas también tienen un atributo .crsOptions, que lista todos los CRS disponibles para esa capa.

wms['hydro_network'].crsOptions

>>> ['EPSG:26710',
     'EPSG:26909',
     'EPSG:32184',
     'EPSG:32196',
     'EPSG:3574',
     'EPSG:26915',
     etc.....

1voto

nmtoken Puntos 1096

Así que vamos a separar tus preguntas.

Si un WMS especifica image/GeoTIFF entonces la expectativa sería que si solicitas una imagen a través de una solicitud GetMap como la siguiente, la imagen devuelta debería tener información de proyección incrustada:

https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wms?service=WMS&request=GetMap&version=1.3.0&crs=EPSG:28992&layers=Actueel_ortho25&width=1000&height=1000&format=image/GeoTIFF&styles&transparent=FALSE&bbox=97712,440638,98220,441091&EXCEPTIONS=XML&BGCOLOR=0xFEFFFF&

Pero veo que, como dices, no lo hace:

hodor@Mini ~/REST/downloads $ gdalinfo -proj4 wms.tiff
Driver: GTiff/GeoTIFF
Files: wms.tiff
Size is 1000, 1000
Coordinate System is `'
PROJ.4 string is:
''
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 1000.0)
Upper Right ( 1000.0,    0.0)
Lower Right ( 1000.0, 1000.0)
Center      (  500.0,  500.0)
Band 1 Block=1000x2 Type=Byte, ColorInterp=Red
Band 2 Block=1000x2 Type=Byte, ColorInterp=Green
Band 3 Block=1000x2 Type=Byte, ColorInterp=Blue

Por lo tanto, consideraría eso como un error del software del servidor.

En la solicitud GetMap especifico un srs, así que asumo (¿tal vez erróneamente?) que la respuesta que recibo contiene un crs.

La suposición es incorrecta.

Generalmente, las imágenes (png, jpeg, gif, tiff...) solicitadas por un cliente a través de una solicitud GetMap no están georreferenciadas. El cliente solicita una imagen para una ubicación especificada por un cuadro delimitador (en las coordenadas de la proyección con la que está trabajando el cliente) y el servidor envía la imagen; no necesita estar georreferenciada porque el cliente sabe dónde colocarla. Así que si quieres una imagen georreferenciada, tendrás que hacer el trabajo adicional basándote en los parámetros de la solicitud.

¿Hay alguna forma de hacer esto?

No en owslib, porque no puedes hacer una solicitud para hacer esto a través de un WMS, aparte de una solicitud estándar GetMap donde el formato de imagen es GeoTIFF, y el servidor envía un GeoTIFF.

¿o tengo que usar GDAL para proyectar el resultado, y si es así, cómo?

Probablemente deberías hacer otra pregunta más enfocada

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X