3 votos

Cambiar la proyección del archivo LAS

He leído un archivo LAS. Si lo importo en Global Mapper dice la proyección, sin embargo cuando lo leo con laspy (header.proj_id_1) no hay información asociada. He editado las coordenadas y he actualizado los valores X,Y,Z a nuevos valores (según este ) para el archivo LAS y ahora me gustaría dar una nueva proyección después de actualizar las coordenadas. ¿Qué función debo utilizar?

enter image description here

1voto

Vasya Novikov Puntos 111

Encontré un minuto para investigar esto. No sabemos muy bien lo que su archivo específico contiene, pero aquí es una manera rápida y sucia para actualizar el GeoKeyDirectoryTag VLR ( página 11 ) utilizando los valores descritos en el especificación geotiff .

Esto sí no actualmente cuenta con el almacenamiento de los parámetros de proyección individuales en un GeoDoubleParamsTag o GeoAsciiParamsTag registro. No tengo ningún dato de ejemplo a mano que contenga esos parámetros, así que si necesitas ayuda para ampliar esto, podría necesitar que publicaras algo para mí.

Esto actualiza el archivo en el lugar, por lo que se advierte.

import laspy

src_path = r"C:\example\test.las"

# see here for possible values:
# http://geotiff.maptools.org/spec/geotiff2.7.html
replace_keys = {
    3072: 26912,  # set ProjectedCSTypeGeoKey to NAD83 / UTM 12N
    3076: 9001,   # set ProjLinearUnitsGeoKey to meters
    4099: 9001    # set VerticalUnitsGeoKey to meters
}

def update_geo_keys(path, lookup):
    with laspy.file.File(path, mode='rw') as f:
        for i, vlr in enumerate(f.header.vlrs):
            # search for the GeoKeyDirectoryTag record
            if vlr.record_id != 34735:
                continue

            modified_body = []
            j = 0

            # loop over geo key entries, stored in groups of 4 values
            while j < len(vlr.parsed_body):
                key_id, tag_loc, count, value = vlr.parsed_body[j:j+4]

                if j > 0 and tag_loc != 0:
                    raise NotImplementedError('modification of projection '
                                              'parameters not implemented')

                # update the value for this key ID, if necessary
                try:
                    value = lookup[key_id]
                except KeyError:
                    pass

                # maintain a new list of values to be written
                modified_body.extend((key_id, tag_loc, count, value))
                j += 4

            # update the vlr with our new values, quit searching
            vlr.parsed_body = modified_body
            break
        else:
            raise ValueError('no GeoKeyDirectoryTag found in file')

        f.header.save_vlrs()

update_geo_keys(src_path, replace_keys)

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