4 votos

Pregunta de GDAL Pixel Functions

Estoy escribiendo un programa en python que convierte archivos ráster utilizando gdal, y el uso de VRT como un formato intermedio. Una de las cosas que tengo que hacer es convertir las bandas entre diferentes formatos. Estoy bastante seguro de que usted hace esto con el uso de Pixel Funciones. Dado que python no tiene esta funcionalidad, tengo que usar C++ para esta parte. He utilizado el código de la VRT tutorial sitio web, pero no parece funcionar.

GDALAddDerivedBandPixelFunc("MyFirstFunction", TestFunction);

typedef CPLErr
(*GDALDerivedPixelFunc)(void **papoSources, int nSources, void *pData,
                        int nXSize, int nYSize,
                        GDALDataType eSrcType, GDALDataType eBufType,
                        int nPixelSpace, int nLineSpace);

Me implementar esa función con el código de http://www.gdal.org/gdal_vrttut.html, pero no parece estar funcionando. Estoy llamando gdal_translate para hacer el proceso de conversión, pero parece que el píxel en función no de la estancia. El addpixelfunc devuelve un resultado de 0. Hay alguna manera para escribir un GDAL extensión para que esta función sea permanente?

Actualización:

He sido capaz de crear correctamente un píxel de la función y hacer que funcione si puedo convertir manualmente el archivo en el mismo programa de C++ como la GDALAddDerivedBandPixelFunc reside, sin embargo todavía estoy interesado en cómo podría hacer esto de manera permanente. Aunque puede no ser necesario ya que podría permitir al usuario cambiar algunos números en la función.

3voto

Tomer Gabel Puntos 154

User1109,

No es posible tener suministrado por el usuario, funciones fuera del programa en el que están registrados. Realmente son más bien de propósito especial.

Usted menciona que su necesidad es la de convertir las bandas entre diferentes formatos. Tal vez te refieres a píxel diferentes tipos de datos? Simplemente que desean convertir los valores directamente o es necesario cambiar la escala?

Si desea conversión directa (con reglas predeterminadas para el recorte y de punto flotante a entero de conversión) no hay nada en especial que deba hacer. Sólo tienes que configurar el tipo apropiadamente para el virtual banda en la VRT y remiten a la banda original, independientemente de su tipo.

Si desea reescalado hay largos VRT parámetros de este. Te sugiero que revise la aplicación de la escala en gdal_translate que también utiliza un intermedio VRT.

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