4 votos

¿Cómo leer/escribir ENVI metadatos usando GDAL?

Estoy tratando de usar GDAL para leer y escribir imágenes en el MEDIO formato (por ejemplo un .bsq archivo con un asociado .hdr archivo). El GDAL los Formatos de página de Información de los estados", Comenzando con GDAL 1.10, todos ENVI campos de encabezado serán almacenados en el MEDIO de metadatos de dominio.". Si ese es el caso, ¿cómo puedo acceder a ellos?

Estoy utilizando los enlaces Python con GDAL 1.9.2 (la última en este momento de la escritura), y han tratado de llegar a todos los metadatos:

image.GetMetadata()

lo que me da una lista de la banda 'nombres' como se muestra en el MEDIO, pero de eso se trata. También he intentado pidiendo específicamente para el ENVI de metadatos de dominio, como se indica en el GDAL página de información vinculado anteriormente:

image.GetMetadata('ENVI')

pero que no devuelve nada.

Es allí una manera de conseguir otros metadatos de la comisión ENVI archivo, o voy a tener que analizar el archivo de encabezado de mí mismo?

Además, incluso en la escritura de los nombres de la banda (que parecen ser devueltos cuando ejecuto GetMetadata()) el uso de SetMetadata() no parece ponerlos en el .hdr archivo.

¿Alguien puede arrojar alguna luz sobre esto?

5voto

Lucas Puntos 128

"Empezando con GDAL 1.10..."

"Estoy utilizando los enlaces Python con GDAL 1.9.2..."

GDAL 1.10 no ha sido liberado todavía. Beta 1 fue lanzado hace poco tiempo o si estás usando Windows, te puede agarrar una generación de la corriente de tronco (1.10 dev) de GISInternals.

Si estás atascado con 1.9.2 por un tiempo, aquí un poco de código para analizar el medio encabezados (envi.py)

Algo más de código que utiliza expresiones regulares para analizar un encabezado:

import re

def get_envi_header_dict(hdr):
    #Get all "key = {val}" type matches
    regex=re.compile(r'^(.+?)\s*=\s*({\s*.*?\n*.*?})$',re.M|re.I)
    matches=regex.findall(hdr)

    #Remove them from the header
    subhdr=regex.sub('',hdr)

    #Get all "key = val" type matches
    regex=re.compile(r'^(.+?)\s*=\s*(.*?)$',re.M|re.I)
    matches.extend(regex.findall(subhdr))

    return dict(matches)

if __name__=='__main__':
    hdr='''ENVI
description = {
  RPC Orthorectification Result [Mon Aug 13 13:38:09 2012] [Mon Aug 13
  13:38:09 2012]}
samples = 27856
lines   = 30016
bands   = 1
header offset = 0
file type = ENVI Standard
data type = 12
interleave = bsq
sensor type = WorldView
byte order = 0
map info = {UTM, 1.000, 1.000, 723000.000, 8129434.000, 5.0000000000e-001, 5.0000000000e-001, 55, South, WGS-84, units=Meters}
coordinate system string = {PROJCS["UTM_Zone_55S",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",10000000.0],PARAMETER["Central_Meridian",147.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]}
wavelength units = Micrometers
band names = {
 Orthorectified (Band 1)}
wavelength = {
 0.625000}
'''
    print get_envi_header_dict(hdr)

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