6 votos

¿Cómo leer GeoTIFF con PHP?

Mi proyecto favorito actual consiste en crear un servicio web que utilice el conjunto de datos mundiales de elevación SRTM del CGIAR. Cada petición al servicio consultará los datos de elevación de una pequeña área geográfica.

Almacenar todos los datos de forma que puedan consultarse rápidamente resulta difícil. Mi mejor idea es guardar los datos en archivos GeoTIFF y crear un índice que vincule las coordenadas lat/lon a los archivos. Lo que me lleva a mi principal problema actual:

¿Cómo puedo obtener los valores de elevación de un archivo GeoTIFF? Conozco la proyección, la escala y la orientación de los archivos GeoTIFF (es decir, sé qué valores lat/lon representa cada píxel). ¿Cómo puedo averiguar a qué elevación se refiere ese píxel? Tengo que usar PHP y pensé que podría usar la función ImageMagick para leer el color de un píxel. Desafortunadamente, devuelve R=2 G=2 B=2 para todos los píxeles.

actualización

Para responder a la pregunta de otra persona, he aquí mi solución.

Utilicé la biblioteca de Bob Osola sugerida en la respuesta aceptada más abajo e hice los siguientes cambios para ajustarla al formato de archivo SRTMv4.1 (el que está disponible en el sitio web del CGIAR). Actualizar las constantes a:

const NUM_DATA_ROWS = 6000;     // the number of data rows in the file ( = ImageLength tag value) 
const NUM_DATA_COLS = 6000;     // the number of data columns in the file ( = ImageWidth tag value)   
const DEGREES_PER_TILE = 5;     // each tile is 5 x 5 degrees of lat/lon
const PIXEL_DIST = 0.000833333; // the distance represented by one pixel (0 degrees 0 mins 3 secs of arc = 1/1200)
const STRIPOFFSETS = 0x44bbd5c; // the offset address of the 'StripOffsets' tag

Además, había un error en el cálculo de la longitud. Para solucionarlo, sustituya

$topleftLon = 180 - (($tileRefHoriz -1) * self::DEGREES_PER_TILE); 
if ($lon < 0) {
    $topleftLon = -$topleftLon;
}

por

$topleftLon = (($tileRefHoriz -1) * self::DEGREES_PER_TILE) - 180; 

Eso es todo.

8voto

Erik Öjebo Puntos 6937

Descargue el código fuente desde aquí

http://www.osola.org.uk/elevations/index.htm

SRTMGeoTIFFReader.php es el archivo inteligente que lee el GeoTiff y convierte los valores de elevación (en metros) en coordenadas Lat/Lng.

Dudo que esto sea exactamente lo que quieres, pero te da una base sólida para entender el proceso necesario para llevar a cabo la tarea de tu pregunta.

(Hay demasiado código para publicarlo aquí)

0voto

Petr Puntos 406

He trabajado en SRTMGeoTIFFReader y esto es lo que doy

enter image description here

Todo lo que quiero es la coordenada de 4 esquina de mi geotiff pic así :

Coordenadas de la esquina:

Superior izquierda ( 69.7357061, 29.87658367)

Inferior izquierda ( 69.7357061, 28.19226367)

Superior derecha ( 86.6125061, 29.87658367)

Inferior derecha ( 86.6125061, 28.19226367)

Centro ( 781741.061, 2903442.367)

¿tiene alguna sugerencia para mí?

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