Más

¿Especificando extensión en GDAL WriteArray?

¿Especificando extensión en GDAL WriteArray?


¿Es posible especificar la extensión al crear un ráster vacío en GDAL?

Busqué por todas partes, pero parece que no puedo encontrar nada. La parte de mi secuencia de comandos donde escribo el ráster se vería así:

tifpath = "ruta / a / salida / tiff.tif" drvtif = gdal.GetDriverByName ("GTiff") rast = drvtif.Create (tifpath, Ncolumns, Nrows, Nbands, tipo de datos) rast.SetProjection (proyección) # la proyección es una variable que representa la proyección deseada rast.GetRasterBand (1) .WriteArray (matriz)

Mi matriz es una matriz de tamaño Ncolumns x Nrows, llena de ceros (quiero un ráster vacío). La cantidad de píxeles está predeterminada, al igual que el tamaño de la celda, y al multiplicar npixels * tamaño de celda, he determinado cuáles deben ser las extensiones de salida para que cada píxel sea un píxel completo (es decir, no se corte por la extensión ).

Pero no puedo encontrar ninguna opción que me permita especificar la extensión deseada.

También se me acaba de ocurrir que no veo ninguna opción para especificar el tamaño de celda.


Sí, usando elSetGeoTransformmétodo. La Transformación Geográfica define el origen del ráster en la esquina superior izquierda, así como el tamaño de la celda y la rotación en la dirección xey para las celdas en este formato:

geo_transform = (x arriba a la izquierda, x tamaño de celda, x rotación, y arriba a la izquierda, rotación y, tamaño de celda y negativo)

O en el ejemplo que ha proporcionado:

geo_transform = (-180, 0.0089952083, 0., 90, 0., -0.0089952083)

Este conjunto se puede aplicar al objeto del conjunto de datos;

rast.SetGeoTransform (geo_transform)

Nota La parte superior izquierda serán las coordenadas de la parte superior izquierda de la celda, no el centro de la celda.


Trabajar con datos de evapotranspiración de ECOSTRESS

El Centro de Archivo Activo Distribuido de Procesos Terrestres (LP DAAC) distribuye los productos de datos del Experimento Radiómetro Térmico Ecosistema Espacial en la Estación Espacial (ECOSTRESS). La misión ECOSTRESS tiene la tarea de medir la temperatura de las plantas para comprender mejor cuánta agua necesitan y cómo responden al estrés. Los productos ECOSTRESS se archivan y distribuyen en formato de archivo HDF5 como productos basados ​​en franjas.

En este tutorial, usará Python para realizar una conversión de franja a cuadrícula para proyectar los datos de franja en una cuadrícula con un sistema de referencia de coordenadas definido (CRS), comparar los datos de ECOSTRESS con observaciones de torres de flujo de AmeriFlux basadas en tierra y exportar conjuntos de datos científicos. (SDS) capas como archivos GeoTIFF que se pueden cargar en un programa de software GIS y / o de detección remota.

Ejemplo: Conversión de un archivo de barrido ECO3ETPTJPL.001 HDF5 en un GeoTIFF con un CRS definido y comparación de ECOSTRESS Evapotranspiration (ET) con observaciones ET terrestres desde una ubicación de torre de flujo AmeriFlux en California.

Datos utilizados en el ejemplo:

  • Producto de datos: ECOSTRESS Evapotranspiración PT-JPL Daily L3 Global 70m Versión 1 (ECO3ETPTJPL.001)
    • Capas de Science Dataset (SDS):
      • ETinst
      • ETinstIncertidumbre
      • Capas de Science Dataset (SDS):
        • Latitud
        • Longitud
        • Variables:
          • Calor latente (W / m 2)

          Si un delito se aplica extraterritorialmente bajo la Jurisdicción Especial Marítima y Territorial, ¿se puede aplicar cuando se comete en un país extranjero?

          He encontrado esto confuso. Si Bob, un ciudadano estadounidense, comete un delito en el país A, que es ilegal extraterritorialmente bajo la Jurisdicción Territorial y Marítima Especial, ¿significa esto que puede ser acusado por los Estados Unidos por ello? Según mi lectura de aquí, la respuesta es no, ya que un país extranjero no parece estar incluido en la definición del SMTJ. La Jurisdicción Especial Marítima y Territorial se define como:

          El término "jurisdicción marítima y territorial especial de los Estados Unidos", como se usa en este título, incluye:

          (1) La alta mar, cualquier otra agua dentro de la jurisdicción marítima y de almirantazgo de los Estados Unidos y fuera de la jurisdicción de cualquier Estado en particular, y cualquier embarcación que pertenezca total o parcialmente a los Estados Unidos o cualquier ciudadano de los mismos, o cualquier corporación creada por o bajo las leyes de los Estados Unidos, o de cualquier Estado, Territorio, Distrito o posesión del mismo, cuando dicha embarcación se encuentre dentro de la jurisdicción marítima y de almirantazgo de los Estados Unidos y fuera de la jurisdicción de cualquier Estado en particular.

          (2) Cualquier barco registrado, licenciado o matriculado bajo las leyes de los Estados Unidos, y que esté en un viaje en las aguas de cualquiera de los Grandes Lagos, o en cualquiera de las aguas que los conecten, o en el río San Lorenzo donde el lo mismo constituye la Línea Fronteriza Internacional.

          (3) Cualquier tierra reservada o adquirida para el uso de los Estados Unidos, y bajo la jurisdicción exclusiva o concurrente de la misma, o cualquier lugar comprado o adquirido de otra manera por los Estados Unidos con el consentimiento de la legislatura del Estado en el que el mismo será , para la construcción de un fuerte, una revista, un arsenal, un astillero u otro edificio necesario.

          (4) Cualquier isla, roca o cayo que contenga depósitos de guano y que, a discreción del Presidente, se considere perteneciente a los Estados Unidos.

          (5) Cualquier aeronave que pertenezca total o parcialmente a los Estados Unidos, o cualquier ciudadano de los mismos, o cualquier corporación creada por o bajo las leyes de los Estados Unidos, o cualquier Estado, Territorio, Distrito o posesión del mismo, mientras la aeronave está en vuelo sobre alta mar o sobre cualquier otra agua dentro de la jurisdicción marítima y del almirantazgo de los Estados Unidos y fuera de la jurisdicción de cualquier Estado en particular.

          (6) Cualquier vehículo usado o diseñado para vuelo o navegación en el espacio y en el registro de los Estados Unidos de conformidad con el Tratado sobre los principios que rigen las actividades de los Estados en la exploración y uso del espacio ultraterrestre, incluida la Luna y otros cuerpos celestes y la Convención sobre el registro de objetos lanzados al espacio ultraterrestre, mientras ese vehículo está en vuelo, que es desde el momento en que todas las puertas externas se cierran en la Tierra después del embarque hasta el momento en que una de esas puertas se abre en la Tierra para el desembarco o en el caso de un aterrizaje forzoso, hasta que las autoridades competentes asuman la responsabilidad del vehículo y de las personas y bienes a bordo.

          (7) Cualquier lugar fuera de la jurisdicción de cualquier nación con respecto a un delito cometido por o contra un nacional de los Estados Unidos.

          (8) En la medida permitida por el derecho internacional, cualquier embarcación extranjera durante un viaje que tenga una salida programada o una llegada a los Estados Unidos con respecto a un delito cometido por o contra un nacional de los Estados Unidos.

          (9) Con respecto a los delitos cometidos por o contra un nacional de los Estados Unidos, tal como se usa ese término en la sección 101 de la Ley de Inmigración y Nacionalidad:

          (A) los locales de misiones o entidades diplomáticas, consulares, militares u otras del Gobierno de los Estados Unidos de los Estados Unidos en Estados extranjeros, incluidos los edificios, partes de edificios y terrenos adjuntos o auxiliares a los mismos o utilizados para los fines de esas misiones o entidades, independientemente de de propiedad y

          (B) las residencias en Estados extranjeros y las tierras anexas o auxiliares a las mismas, independientemente de la propiedad, utilizadas para los fines de esas misiones o entidades o utilizadas por el personal de los Estados Unidos asignado a esas misiones o entidades.


          Que sigue

          Consejo rápido: cambiar la geotransformación con GDAL python

          Preparando la próxima publicación, encontré un archivo con una geotransformación incorrecta, pero no una herramienta fácil para hacerlo.
          Codificarlo es tan fácil como abrir la fuente de datos con la opción de actualización y configurar la nueva geotransformación de la siguiente manera:
          Donde la geotransformación debe ser un tupla como (-180.5, 1.0, 0.0, 90.5, 0.0, -1.0). Consulte la documentación para obtener más información.

          He creado un pequeño programa para hacerlo aún más fácil, llamado changeGeotransform.py:


          La brújula

          Lo bueno de la aplicación es la brújula móvil. Para conseguirlo, necesitamos tres cosas:

          • Obtener las coordenadas geográficas
          • Obtener la orientación del dispositivo (la geográfica) y la orientación de la pantalla (horizontal o vertical)
          • Dibujando los datos

          Obtener la ubicación es bastante estándar, solo escuchar navigator.geolocation.watchPosition y llamar a una devolución de llamada. El navegador le pedirá permiso.

          La orientación también parecía fácil, pero no lo es. Encontré un ejemplo de brújula (con un error, siempre apunta a la posición inicial del dispositivo) pero muchos navegadores requieren configuraciones especiales para permitir la lectura de la orientación.

          El evento a escuchar es window.addEventListener ("deviceorientationabsolute", setHeading) (¡no es un evento de navegador !?). Y también utiliza una devolución de llamada. En este caso, se debe agregar un ángulo si el dispositivo está en modo horizontal (y puede tener dos posiciones en modo horizontal). La orientación de la pantalla vive en el objeto de la pantalla.

          Una vez más, Svelte hace que todo sea realmente fácil. Si algo en los argumentos de la función cambia, se llama a la función. Es como useEffect en react, ¡pero mejor!

          Lo mismo sucede con la función de recuperación de datos. Si las comodidades, lon o lat cambian, el código se vuelve a ejecutar.

          Para dibujar los datos, separé el código en una función drawCompass con su propio archivo draw-compass.ts. La función usa las funciones típicas de lienzo, por lo que no copiaré todo el código aquí.

          Esta web es un claro candidato para convertirse en PWA, ya que es mucho mejor en un dispositivo móvil que tiene sensor de orientación. Para hacerlo encontré un solo ejemplo en Svelte.

          Lo primero fue agregar la siguiente línea a public / index.html:

          & ltlink rel = ’manifest’ href = ’manifest.json’ & gt

          Y crea el archivo manifest.json en la misma carpeta:

          Algunas líneas parecen innecesarias, pero si no están allí, el navegador no permitirá al usuario guardar la aplicación en el escritorio.

          El siguiente paso es agregar el trabajador del servicio. Esto también es necesario. Debe tener el método fetch, que muchas veces se omite.

          • ¡Tenga cuidado con las rutas de la caché! Si algo falla, el trabajador del servicio no está instalado.
          • Hay una sección dedicada para verificar eso en las herramientas de desarrollo (las dos primeras en la pestaña de la aplicación)

          Una vez hecho esto, el sitio debe escuchar el evento beforeunnstallprompt:

          Una vez que se almacena el evento, es posible llamarlo al hacer clic en un botón. Aquí la función a preparar y la que realmente instala:

          • ¡Desinstale la aplicación antes de volver a intentarlo! Estaba atascado en esto y es realmente frustrante porque no pasa nada y es difícil saber por qué ... Para desinstalar, abra la aplicación y haga clic en el segundo ícono en la parte superior cuando esté en una computadora.
          • Si la función handleInstall no registra nada, consulte las herramientas de desarrollo para obtener algunos consejos.
          • btnInstallAppVisible es la variable que oculta el botón cuando la aplicación está instalada y el botón ya no es necesario.

          重新 投影 栅格 数据 (Reproyección de datos ráster)

          La reproyección significa encontrar una nueva representación para sus datos ráster basada en un crs diferente (es decir, otro sistema de coordenadas), una transformación diferente (p. Ej., Para rotar el ráster) o límites diferentes. Esto puede incluir rotaciones y distorsiones, lo que hace que las reproyecciones sean bastante complejas.

          El siguiente código simplemente reproyecta el conjunto de datos dado en un nuevo crs (new_crs) con cualquier alteración a la transformación subyacente. El código se lee en un conjunto de datos, deriva una nueva transformación, altura y ancho del ráster, crea una matriz para los datos reproyectados (new_imgdata) y finalmente realiza la reproyección:

          以下 代码 仅 将给 定 的 数据 集 重新 投影 到 新 的 crs (new_crs) 中 , 并且 对 基础 转换 进行 了 任何 更改。 该 代码 读取 数据 集 , 得出 新 的 变换 , 栅格 高度 和 宽度 , 为 重新投影 的 数据 (new_imgdata) 创建 一个 数组 , 最后 执行 重新 投影 :


          性能 比较 (Comparación de rendimiento)

          ¿Cómo se compara la lógica de consulta de GeoTIFF.js con una llamada a gdallocationinfo? Esto puede depender un poco de cuántos archivos estés abriendo (especialmente de forma repetida), pero mis resultados, tanto experimentales como en la práctica, han sido decisivos. En una unidad de estado sólido, consulté el mismo ráster (aproximadamente 500 px por 200 px, con 250 bandas) usando la misma latitud y longitud y registré los milisegundos transcurridos.

          如何 将 GeoTIFF.js 查询 逻辑 与 对 gdallocationinfo 的 调用 进行 gdallocationinfo? 这 可能 取决于 您 打开 的 文件 数量 (尤其 是 重复 打开 的 文件 数量) , 但是 我 的 实验 和 实践 结果 都是 决定性 的 的 固态, 我 使用 相同 的 纬度 和 经度 查询 了 相同 的 栅格 (大约 500px x 200px , 具有 250 条 带) , 并 记录 了 经过 的 毫秒 数。

          exec (gdallocationinfo…)

          exec (gdallocationinfo.)

          Este método parece experimentar contratiempos aleatorios cada pocas ejecuciones que son perjudiciales para su tiempo de procesamiento general. Esto se ha observado en mi computadora de desarrollo además de en mis servidores.

          Esta biblioteca no solo fue un poco más rápida que una llamada a gdallocationinfo, sino que el rendimiento fue muy consistente, casi reduciendo a la mitad el tiempo promedio de procesamiento.


          Ver el vídeo: GDAL Tutorial #2: Converting, Resampling, Reprojecting, Clipping