Más

¿Crear GeoTIFF de 8 bits sin firmar con GDAL?

¿Crear GeoTIFF de 8 bits sin firmar con GDAL?


Estoy intentando crear un GeoTIFF de 8 bits con este código.

¿Hay alguna forma de utilizar 8 bits sin firmar? Solo encontré elGDT_UInt16?

importar numpy como np desde osgeo importar ogr, osr, gdal desde osgeo.gdalconst importar * dataset = gdal.Open ('test.tif') driver = dataset.GetDriver () driver.Create ("out.tiff", cols, rows , 1, GDT_UInt16) # <- aquí out_band = out_dataset.GetRasterBand (1) out_data = np.zeros ((filas, columnas), np.int16) out_band.WriteArray (out_data, 0, 0) out_band.FlushCache () out_dataset. SetGeoTransform (conjunto de datos.GetGeoTransform ()) out_dataset.SetProjection (conjunto de datos.GetProjection ())

La documentación de gdal describe el GDT_Byte como un entero sin signo de 8 bits (ver aquí). Entonces, la constante gdal correcta es laGDT_Byte. En su código sería:

driver.Create ("out.tiff", columnas, filas, 1, gdal.GDT_Byte)

Mdhntd

Windows 10: ¿Cómo bloquear (no dormir) la computadora portátil al cerrar la tapa?

¿Qué sentido tiene un preamplificador?

¿Cuál fue la última CPU x86 que no tenía la unidad de punto flotante x87 incorporada?

¿Los físicos en activo consideran que la mecánica newtoniana está "falsificada"?

¿Qué puedo hacer si mi MacBook no se está cargando pero ya se agotó?

3 puertas, tres guardias, una piedra

Estimar los parámetros del condensador

Al comunicar altitud con un '9', ¿debería pronunciarse "novecientos" o "novecientos"?

¿Qué quiso decir Darwin con 'squib' aquí?

¿Cuál es el potencial eléctrico dentro de una carga puntual?

¿Qué piezas de LEGO tienen funcionalidad del "mundo real"?

Determinar si f es una función, una inyección, una sobreyección.

¿Cuál es la especie más grande de poliquetos?

¿Por qué "Capitana Marvel" se traduce como masculino en Portugal?

Las siguientes firmas no eran válidas: EXPKEYSIG 1397BC53640DB551

Notación para el estado del producto compuesto de dos qubit

¿Se considera que el número de años dedicados a un doctorado por encima del promedio es una señal de alerta en futuros puestos académicos o industriales?

Grabación del juego de Blender en el momento equivocado

Secuencia de Cauchy caracterizada solo por miembros de secuencia directamente vecinos

¿Por qué no hay ejército de Iron-Mans en el MCU?

¿Frío es el frigorífico como caliente?

En el folleto, ¿cómo colorear los marcadores circulares según la categoría?

Unicorn Meta Zoo # 1: ¿Por qué otro podcast? ¿El folleto cambia de color dinámicamente GeoJSON, los marcadores de círculo que utilizan el complemento Leaflet OverlappingMarkerSpiderfier? ventana emergente Cree dinámicamente una ventana emergente de folletos a través de un objeto JavaScript cómo cambiar el color de todos los marcadores de círculo en leaflet.jsCambiar el color del icono de marcador de folletos (.png) mediante programación

Mi pregunta es, ¿cómo puedo hacer que Leaflet coloree cada uno de los marcadores de círculo que estoy generando / puntos con un color diferente, según la propiedad de tipo del punto?

He investigado un poco, pero todo lo que he visto es colorear puntos basados ​​en un diccionario creado manualmente, mientras que mi "lista conocida de tipos" se puede expandir en cualquier momento, y se deben agregar colores adicionales para acomodar nuevos tipos. de puntos. También soy bastante débil en Javascript y su sintaxis real.

Tengo la lista de todos los únicos escribes antes de la iteración sobre los datos.

Estoy trabajando en C # MVC si eso ayuda.

Mi vista (capa de presentación del programa: genera una página HTML basada en su contenido) itera sobre los datos del modelo (básicamente datos que necesito mostrar en el mapa) que contienen latitud, longitud y escribe properties (más que eso, pero irrelevante para esto), y agrega los puntos al mapa, dibujándolos.

Código que genera mis puntos:

Necesito que cada punto sea de un color dependiendo de la propiedad TypeDesc. Se puede acceder fácilmente a la lista de propiedades de TypeDesc a través de una lista Viewbag.TypeDesc.


Para configurar el repositorio, siga los siguientes pasos:

Para ejecutar las pruebas, primero debe configurar los datos de la prueba. Esto requiere las herramientas GDAL e ImageMagick. La instalación de estas herramientas varía según el sistema operativo, la siguiente lista muestra la instalación en Ubuntu (usando el repositorio ubuntugis-unstable):

Para instalar GDAL e ImageMagick en MacOS X, utilice Homebrew. El script de configuración también necesita wget en MacOS X

Cuando se instalan GDAL e ImageMagick, se puede ejecutar el script de configuración de datos de prueba:

Para probar la biblioteca (usando PhantomJS, karma, mocha y chai) haga lo siguiente:

Para hacer algunas pruebas en el navegador, haga lo siguiente:

y navegue hasta http: // localhost: 8090 / index.html

La salida se escribe en dist-browser / main.js y dist-node / main.js.


Acceso de red a cuadrículas¶

curl será una dependencia de compilación opcional de PROJ, agregada en los sistemas de compilación autoconf y cmake. Se puede deshabilitar en el momento de la compilación, pero debe ser una configuración explícita de configure / cmake ya que las compilaciones resultantes tienen menos funcionalidad. Cuando curl está habilitado en el momento de la compilación, la descarga de las cuadrículas no se habilitará de forma predeterminada en el tiempo de ejecución. Requerirá el consentimiento explícito del usuario, ya sea a través de la API (proj_context_set_enable_network ()) a través de la variable de entorno PROJ_NETWORK = ON, o la configuración network = on de proj.ini.

Con respecto a la versión mínima de libcurl requerida, dada la experiencia de GDAL que se puede construir con libcurl bastante antiguo para una funcionalidad similar, podemos apuntar a libcurl & gt = 7.29.0 (ya que está disponible en RHEL 7).

El usuario también puede configurar una interfaz de red enchufable alternativa en caso de que no se haya incorporado suppot para libcurl, o si para el contexto de uso deseado, el usuario desea proporcionar la implementación de la red (un caso de uso típico podría ser QGIS que usaría sus instalaciones de red basadas en QT para resolver problemas con SSL, proxy, autenticación, etc.)

Un archivo de configuración de texto, instalado en $/share/proj/proj.ini (o $/proj.ini) contendrá la URL de la CDN que se utilizará. El usuario también puede anular esta configuración con proj_context_set_url_endpoint () o mediante la variable de entorno PROJ_NETWORK_ENDPOINT.

La razón para colocar proj.ini en esa ubicación es que es un lugar muy conocido por los usuarios de PROJ, con la mecánica PROJ_LIB existente para sistemas como Windows, donde las rutas codificadas en tiempo de ejecución no son generalmente utilizables.

API de C¶

La API C preliminar para lo anterior es:

Para que el acceso a la red sea eficiente, PROJ tendrá internamente un caché en memoria de rangos de archivos para emitir solicitudes de red solo por fragmentos de 16 KB o varios de ellos, para limitar el número de solicitudes HTTP GET y minimizar la latencia causada por el acceso a la red. Esto es muy similar al comportamiento de la capa GDAL / vsicurl / I / O. El plan es copiar principalmente la implementación vsicurl de GDAL dentro de PROJ, con los ajustes necesarios y el espacio de nombres adecuado.

Se agregará una estrategia de reintento (generalmente un retraso con un retroceso exponencial y cierta fluctuación aleatoria) para tener en cuenta la falla intermitente de la red o del lado del servidor.

Construcción de URL¶

La base de datos PROJ tiene un grid_transformation grid cuya columna grid_name (y posiblemente grid2_name) contiene el nombre del grid como lo indica la autoridad que ha registrado la transformación (típicamente EPSG). Dado que PROJ generalmente no puede utilizar directamente esos nombres de cuadrícula, la base de datos de PROJ también tiene una tabla grid_alternatives que vincula los nombres de cuadrícula originales con los utilizados por PROJ. Cuando el acceso a la red esté disponible y sea necesario debido a la falta de una cuadrícula local, la URL completa será el punto final de la configuración o establecido por el usuario, el nombre base del nombre de archivo utilizable PROJ y el sufijo "tif". Entonces, si el CDN está en http://example.com y el nombre de grid_alternatives es egm96_15.gtx, entonces la URL será http://example.com/egm96_15.tif

Carga de cuadrícula¶

Los siguientes archivos se verán afectados, de una forma u otra, por los cambios descritos anteriormente: nad_cvt.cpp, nad_intr.cpp, nad_init.cpp, grid_info.cpp, grid_list.cpp, apply_gridshift.cpp, apply_vgridshift.cpp.

En particular, la lógica actual que consiste en ingerir todos los valores de una cuadrícula / subcuadrícula en el arreglo ct- & gtcvs será completamente modificada, para permitir el acceso a los valores de la cuadrícula en una ubicación especificada (x, y).

Impactos de proj_create_crs_to_crs () / proj_create_operations ()

Una vez que el acceso a la red esté disponible, se asumirá que todas las cuadrículas conocidas en la base de datos PROJ (tabla grid_transformation + grid_alternatives) están disponibles, al calcular las tuberías potenciales entre dos CRS.

Concretamente, esto será equivalente a llamar a proj_operation_factory_context_set_grid_availability_use () con el argumento de uso establecido en un nuevo valor de enumeración

Almacenamiento en caché local en disco de cuadrículas remotas¶

Como muchos flujos de trabajo tenderán a usar las mismas cuadrículas una y otra vez, se agregará un almacenamiento en caché local en disco de cuadrículas remotas. La caché será una única base de datos SQLite3, en un directorio de escritura del usuario compartido por todas las aplicaciones que utilizan PROJ.

Su tamaño total será configurable, con un tamaño máximo predeterminado de 100 MB en proj.ini. La caché también mantendrá la marca de tiempo de la última vez que verificó varias propiedades globales del archivo (su tamaño, los encabezados de Última modificación y ETag). Se utilizará un parámetro de tiempo de vida, con un valor predeterminado de 1 día en proj.ini, para determinar si se debe acceder a la CDN para verificar si la información en la caché aún está actualizada.

La estructura de base de datos planificada es:

La tabla de fragmentos almacenará fragmentos de 16 KB (o menos para los fragmentos de terminación). Los fragmentos enlazados y enlazados_chunks_head_tail tabla swill actúan como una lista doblemente enlazada de fragmentos, con los menos usados ​​recientemente al final de la lista, que serán desalojados cuando la caché se sature.

Como esta base de datos puede ser accedida por varios subprocesos o procesos al mismo tiempo, el código que accede a ella respetará cuidadosamente los errores de SQLite3 con respecto a los bloqueos, para hacer reintentos apropiados si otro subproceso / proceso está bloqueando la base de datos actualmente. Los accesos que requieran una modificación de la base de datos comenzarán con una transacción BEGIN INMEDIATE para adquirir un bloqueo de escritura.

Esta base de datos debe estar alojada en un disco local, no en uno de red. De lo contrario, se esperan problemas de bloqueo de SQLite3.

Proveedor de CDN¶

Amazon Public Datasets se ha ofrecido a ser un proveedor de almacenamiento y CDN.

El programa cubre el almacenamiento y la salida (ancho de banda) de los datos. Por lo general, no permiten el uso de CloudFront (su CDN) como parte del programa (por lo general, buscamos que esté cubierto por créditos), pero en este caso, estarían bien para proporcionárselo. Solo nos pedirán que mantengamos la URL de CloudFront "visible" (según corresponda para el caso de uso) para que las personas puedan ver dónde están alojados los datos en caso de que vayan a buscar. Sus términos se pueden ver en https://aws.amazon.com/service-terms/ y CloudFront tiene su propia sección pequeña. Esos términos pueden cambiar un poco de vez en cuando debido a cambios menores. Se supone que los cambios importantes en los términos del servicio no son frecuentes. También existen los términos del Programa de conjunto de datos públicos en http://aws.amazon.com/public-datasets/terms/. Estos tampoco cambian efectivamente con el tiempo y se renuevan cada 2 años.

Criterios para el alojamiento de grid¶

Las cuadrículas alojadas en el CDN serán exactamente las recopiladas, actualmente y en el futuro, por la iniciativa proj-datumgrid. En particular, se aceptan nuevas cuadrículas siempre que se publiquen bajo una licencia que sea compatible con la definición de código abierto y la fuente de la cuadrícula esté claramente establecida y sea verificable. Las licencias adecuadas incluyen:

Para que las nuevas cuadrículas sean utilizadas de manera transparente por la mecánica proj_create_crs_to_crs (), deben estar registradas en la base de datos PROJ (proj.db) en la tabla grid_transformation y grid_alternatives. La ruta nominal para tener un nuevo registro en grid_transformation es que se registre una transformación en el conjunto de datos EPSG (si no hay uno existente), que posteriormente se importará a la base de datos PROJ.

Control de versiones, preservación histórica de cuadrículas¶

La política al respecto debe ser similar a la que se aplica a proj-datumgrid, que aunque no esté formalizada, gira en torno a las siguientes líneas:

Las agencias geodésicas lanzan regularmente nuevas versiones de cuadrículas. Normalmente para los EE. UU., NOAA ha lanzado ajustes verticales GEOID99, GEOID03, GEOID06, GEOID09, GEOID12A, GEOID12B, GEOID18 para NAVD88 a NAD83 / NAD83 (2011). Cada una de estas cuadrículas es considerada por EPSG y PROJ tiene un objeto separado, con nombres de archivo distintos. El lanzamiento de una nueva versión no hace que la cuadrícula anterior se elimine automáticamente. Dicho esto, debido a las precisiones anunciadas y las reglas de sustitución del conjunto de datos EPSG, la cuadrícula más reciente generalmente se usará para una transformación CRS - & gt CRS si el usuario usa proj_create_crs_to_crs () (con la excepción de que si un VERT_CRS WKT incluye un GEOID_MODEL conocido a PROJ, se utilizará una versión antigua de la cuadrícula). Si el usuario especifica una tubería completa con un nombre de cuadrícula explícito, por supuesto, será estrictamente respetado. A medida que pase el tiempo, el tamaño de los conjuntos de datos administrados por proj-datumgrid aumentará, tendremos que explorar en lo que administramos para los archivos .zip / .tar.gz distribuidos. Esto no debería ser una preocupación para el contenido alojado en CDN.

En caso de que ocurrieran errores de conversión relacionados con el software del formato de cuadrícula original al utilizado por PROJ (ya sea GTX, NTv2 o GeoTIFF), la versión errónea anterior del conjunto de datos sería reemplazada por la corregida. En esa situación, esto podría tener un efecto con el almacenamiento en caché en disco local de las cuadrículas remotas. Tendremos que ver con los proveedores de CDN utilizados si podemos usar, por ejemplo, el encabezado HTTP ETag en el cliente para detectar un cambio, de modo que el contenido antiguo en caché no se reutilice por error (si no es posible, tendremos que usar algo de texto archivo que enumera los nombres de la cuadrícula y su md5sum actual)


geotiff.js tiene un soporte limitado para archivos en formato BigTIFF. Las limitaciones se originan en las capacidades de las implementaciones actuales de JavaScript con respecto a los analizadores y estructuras de enteros de 64 bits: no hay funciones para leer enteros de 64 bits de una secuencia y no existen tales matrices escritas. Como BigTIFF se basa en compensaciones de 64 bits y también permite valores de etiqueta de esos tipos. Para seguir proporcionando un apoyo razonable, se implementa lo siguiente:

  • Los enteros de 64 bits se leen como dos enteros de 32 bits y luego se combinan. Como los números en JavaScript generalmente se implementan como flotantes de 64 bits, puede haber inexactitudes para muy valores grandes.
  • Para matrices de enteros de 64 bits, se utiliza el tipo de matriz predeterminado. Esto puede causar problemas para algunos algoritmos de compresión si esas matrices se utilizan para valores de píxeles.

Ver el vídeo: GDAL Tutorial #1: Introduction + Installation