cl.geologyidea.com
Más

¿Conoce la dirección de bytes y la longitud de bytes de la "tira" en GeoTiff comprimido en LZW con PHP vanilla?

¿Conoce la dirección de bytes y la longitud de bytes de la


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


Tengo una situación en la que necesito leer valores de celda de un GeoTiff usando PHP vanilla, y aunque he tenido éxito al leer valores de un TIF sin comprimir (~ 800 MB), tengo dificultades para leer valores del mismo TIF después de la compresión LZW (~ 80 MB).

Creo que mi problema proviene de conocer la dirección de bytes de una "tira" y el número de bytes que pertenecen a esa tira, ya que mi comprensión de LZW es que la rutina de descompresión necesita una tira completa, que utiliza para crear una tabla de traducción relativa a esa tira, antes de que se puedan interrogar los valores de celda individuales representados en esa tira.

Así es como interpreto la especificación TIFF: puedo leer los bytes de cualquier "tira" comenzando en el valor de la etiqueta Strip Offsets (fyi: mi valor de etiqueta RowsPerStrip es 1) y obteniendo el offset para la línea de exploración exacta que estoy apuntando así:

$ stripOffset = $ STRIP_OFFSETS + ($ filaNum * 4); // es decir, 2 bytes por entrada

Luego, para obtener la cantidad de bytes que necesito para leer con anticipación para mi franja / línea de exploración de destino, hago lo mismo con la etiqueta StripByteCounts:

$ stripByteCount = $ STRIP_BYTE_COUNTS + ($ rowNum * 4); // también 2 bytes por entrada

Con estos valores en la mano, pensé que podría extraer toda la tira

// Abra el archivo tiff y apunte a la dirección de bytes de la tira… fseek ($ this-> fp, $ stripOffset); // Leer N bytes de la dirección de bytes de la tira $ stripBytes = fread ($ this-> fp, $ stripByteCount); // ESTOS BYTES DEBEN SER LA TIRA COMPLETA, ¿no? $ strip_data = desempaquetar ('Vstrip_data', $ stripBytes);

Sin embargo, parece que estoy obteniendo más de una tira de datos, ya que lo que regresa comienza con y tiene varias instancias recurrentes de128en él, que debe representar el llamado "ClearCode" mencionado en la especificación.

"El primer código escrito es un ClearCode, que se define como código 256".

Así que mi impresión es que no entiendo correctamente cómo evaluar la dirección de bytes y / o el recuento de bytes de una tira / línea de exploración ... o ... ¡¿¡No lo sé !? :)… Es importante enfatizar que, lo que regresa de hecho comienza con 128, de lo cual estoy relativamente seguro es el valor de ClearCode. Entonces sospecho que estoy llegando al comienzo de una tira, simplemente no estoy capturando un número correcto de bytes.

¿Estoy evaluando correctamente la dirección de bytes y el número de bytes de una franja / línea de exploración de destino?

Y suponiendo que no, ¿qué estoy haciendo mal aquí?

Como se mencionó, esto funciona con TIF sin comprimir al beneficiarme de esta pregunta y este código, cortesía de Bob Osola. Por lo tanto, estoy seguro de que mi traducción Este / Norte → Columna / Fila es correcta. Y FWIW, mi TIF comprimido LZW usó un Predictor = 2 (diferencia horizontal), aunque tengo una variación creada con Predictor = 1. Dicho esto, no creo que el predictor sea un problema en el contexto de esta pregunta.



Comentarios:

  1. Atwater

    mdaaaaaaa

  2. Kazragis

    Mucha gente confunde su imaginación con su memoria….

  3. Eadgard

    Bravo, el magnífico pensamiento

  4. Nezahualcoyotl

    Genial, esta es una opinión muy valiosa.

  5. Malami

    juntos. Esto fue y conmigo. Podemos comunicarnos sobre este tema.

  6. Abdul-Khaliq

    Your thought is simply excellent



Escribe un mensaje