Migrar la URL Base de GeoNode¶
El comando de administración migrate_baseurl Management Command te permite reparar todos los enlaces de GeoNode siempre que, por alguna razón, necesites cambiar el Domain Name o la IP Address de GeoNode.
Esto debe usarse también en los casos en que necesites cambiar el esquema de red de HTTP a HTTPS, por ejemplo.
En primer lugar, echemos un vistazo a la opción –help del comando de administración migrate_baseurl para inspeccionar todas las opciones y características del comando.
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --help
Esto producirá un resultado similar al siguiente
usage: manage.py migrate_baseurl [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color] [-f]
[--source-address SOURCE_ADDRESS]
[--target-address TARGET_ADDRESS]
Migrate GeoNode VM Base URL
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
-f, --force Forces the execution without asking for confirmation.
--source-address SOURCE_ADDRESS
Source Address (the one currently on DB e.g.
http://192.168.1.23)
--target-address TARGET_ADDRESS
Target Address (the one to be changed e.g. http://my-
public.geonode.org)
Ejemplo 1: Quiero mover mi instancia de GeoNode de
http:\\127.0.0.1ahttp:\\example.orgAdvertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=127.0.0.1 --target-address=example.org
Ejemplo 2: Quiero mover mi instancia de GeoNode de
http:\\example.orgahttps:\\example.orgAdvertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=http:\\example.org --target-address=https:\\example.org
Ejemplo 3: Quiero mover mi instancia de GeoNode de
https:\\example.orgahttps:\\geonode.example.orgAdvertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py migrate_baseurl --source-address=example.org --target-address=geonode.example.org
Nota
Después de migrar la URL base, asegúrate de sanitizar los enlaces y los metadatos del catálogo también (Actualizar permisos, metadatos, leyendas y enlaces de descarga).
Actualizar permisos, metadatos, leyendas y enlaces de descarga¶
Las siguientes tres utilidades Management Commands, permiten realizar correcciones:
Users/Groups Permissions en Datasets; estos se actualizarán y sincronizarán también con los del GIS Server
Metadata, Legend y enlaces de Download en Datasets y Maps
Limpia los Duplicated Links y las Outdated Thumbnails
Comando de administración sync_geonode_datasets¶
Este comando permite sincronizar los permisos ya existentes en los conjuntos de datos. Para cambiar o configurar los permisos de los conjuntos de datos, consulta la sección Permisos de sincronización por lotes
Las opciones son:
filter; Solo actualiza los datos de los nombres de conjuntos de datos que coinciden con el filtro dado.
username; Actualizar únicamente los datos que pertenecen al nombre de usuario especificado.
updatepermissions; Actualiza los permisos del conjunto de datos; sincronízalos nuevamente con GeoSpatial Server. Esta opción también está disponible en la página Layer Details.
updateattributes; Actualiza los atributos del conjunto de datos; sincronízalos nuevamente con GeoSpatial Server. Esta opción también está disponible en la página Layer Details.
updatethumbnails; Actualizar la miniatura del conjunto de datos. Esta opción también está disponible en la página Layer Details.
updatebbox; Actualizar el conjunto de datos BBOX y el BBOX de LotLan. Esta opción también está disponible en la página Layer Details.
remove-duplicates; Elimina enlaces duplicados.
En primer lugar, echemos un vistazo a la opción –help del comando de administración sync_geonode_datasets para inspeccionar todas las opciones y características del comando.
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py sync_geonode_datasets --help
Nota
Si habilitó local_settings.py el comando cambiará de la siguiente manera:
DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py sync_geonode_datasets --help
Esto producirá un resultado similar al siguiente
usage: manage.py sync_geonode_datasets [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color] [-i] [-d] [-f FILTER]
[-u USERNAME] [--updatepermissions]
[--updatethumbnails] [--updateattributes][--updatebbox]
Update the GeoNode Datasets: permissions (including GeoFence database),
statistics, thumbnails
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
-i, --ignore-errors Stop after any errors are encountered.
-d, --remove-duplicates
Remove duplicates first.
-f FILTER, --filter FILTER
Only update data the Datasets that match the given
filter.
-u USERNAME, --username USERNAME
Only update data owned by the specified username.
--updatepermissions Update the Dataset permissions.
--updatethumbnails Update the Dataset styles and thumbnails.
--updateattributes Update the Dataset attributes.
--updatebbox Update the Dataset BBOX.
Ejemplo 1: Quiero actualizar/sincronizar todos los permisos y atributos de los conjuntos de datos con el servidor geoespacial
Advertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py sync_geonode_datasets --updatepermissions --updateattributes
Ejemplo 2: Quiero regenerar las miniaturas de todos los conjuntos de datos pertenecientes a
afabianiAdvertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py sync_geonode_datasets -u afabiani --updatethumbnails
Comando de gestión sync_geonode_maps¶
Este comando es básicamente similar al anterior, pero afecta a los Maps; con algunas limitaciones.
Las opciones son:
filter; Solo actualiza los datos de los títulos de los mapas que coinciden con el filtro dado.
username; Actualizar únicamente los datos que pertenecen al nombre de usuario especificado.
updatethumbnails; Actualiza los estilos y las miniaturas del mapa. Esta opción también está disponible en la página Map Details.
remove-duplicates; Elimina enlaces duplicados.
En primer lugar, echemos un vistazo a la opción –help del comando de administración sync_geonode_maps para inspeccionar todas las opciones y características del comando.
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py sync_geonode_maps --help
Nota
Si habilitó local_settings.py el comando cambiará de la siguiente manera:
DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py sync_geonode_maps --help
Esto producirá un resultado similar al siguiente
usage: manage.py sync_geonode_maps [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color] [-i] [-d] [-f FILTER]
[-u USERNAME] [--updatethumbnails]
Update the GeoNode maps: permissions, thumbnails
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
-i, --ignore-errors Stop after any errors are encountered.
-d, --remove-duplicates
Remove duplicates first.
-f FILTER, --filter FILTER
Only update data the maps that match the given filter.
-u USERNAME, --username USERNAME
Only update data owned by the specified username.
--updatethumbnails Update the map styles and thumbnails.
Ejemplo 1: Quiero regenerar la Miniatura del Mapa
Este es un Mapa de pruebaAdvertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py sync_geonode_maps --updatethumbnails -f 'This is a test Map'
Comando de administración set_all_datasets_metadata¶
Este comando permite restablecer los Atributos de metadatos y el Esquema de catálogo en los conjuntos de datos. El comando también actualizará el XML del Catálogo CSW y los vínculos de GeoNode.
Las opciones son:
filter; Actualiza únicamente los datos de los conjuntos de datos que coincidan con el filtro dado.
username; Actualizar únicamente los datos que pertenecen al nombre de usuario especificado.
remove-duplicates; Actualiza los estilos y miniaturas del mapa.
delete-orphaned-thumbs; Elimina enlaces duplicados.
set-uuid; actualizará el UUID en función del UUID_HANDLER si está configurado (predeterminado False).
set_attrib; Si se establece, se actualizarán los atributos del recurso tomados de Geoserver. (Predeterminado: True).
set_links; Si se establece, se actualizarán los enlaces del recurso. (Predeterminado: True).
En primer lugar, echemos un vistazo a la opción –help del comando de administración set_all_datasets_metadata para inspeccionar todas las opciones y características del comando.
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py set_all_datasets_metadata --help
Nota
Si habilitó local_settings.py el comando cambiará de la siguiente manera:
DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py set_all_datasets_metadata --help
Esto producirá un resultado similar al siguiente
usage: manage.py set_all_datasets_metadata [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH]
[--traceback] [--no-color] [-i] [-d]
[-t] [-f FILTER] [-u USERNAME]
Resets Metadata Attributes and Schema to All Datasets
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
-i, --ignore-errors Stop after any errors are encountered.
-d, --remove-duplicates
Remove duplicates first.
-t, --delete-orphaned-thumbs
Delete Orphaned Thumbnails.
-f FILTER, --filter FILTER
Only update data the Datasets that match the given
filter
-u USERNAME, --username USERNAME
Only update data owned by the specified username
Ejemplo 1: Después de haber cambiado la URL Base, quiero regenerar todo el esquema del catálogo y eventualmente eliminar todos los duplicados.
Advertencia
Asegúrate siempre de utilizar la configuración correcta
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py set_all_datasets_metadata -d
Cargando datos en GeoNode¶
Hay situaciones en las que no es posible o no resulta conveniente utilizar el Upload Form para añadir nuevos Conjuntos de Datos a GeoNode a través de la interfaz web. Por ejemplo:
El conjunto de datos es demasiado grande para cargarlo a través de una interfaz web.
Importar datos desde un almacenamiento masivo mediante programación.
Importar tablas de una base de datos.
Esta sección lo guiará a través de las distintas opciones disponibles para cargar datos en su GeoNode desde GeoServer, desde la línea de comandos o mediante programación.
Advertencia
Algunas partes de esta sección se han tomado del proyecto GeoServer y de la documentación de capacitación.
Comando de gestión importlayers¶
La aplicación Django geonode.geoserver incluye 2 comandos de administración que puedes usar para cargar datos en tu GeoNode.
Ambos pueden invocarse mediante el script manage.py.
En primer lugar, echemos un vistazo a la opción –help del comando de administración importlayers para inspeccionar todas las opciones y características del comando.
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py importlayers --help
Nota
Si habilitó local_settings.py el comando cambiará de la siguiente manera:
DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py importlayers --help
Esto producirá un resultado similar al siguiente
usage: manage.py importlayers [-h] [-hh HOST] [-u USERNAME] [-p PASSWORD]
[--version] [-v {0,1,2,3}] [--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback] [--no-color]
[--force-color] [--skip-checks]
[path [path ...]]
Brings files from a local directory, including subfolders, into a GeoNode site.
The datasets are added to the Django database, the GeoServer configuration, and the
pycsw metadata index. At this moment only files of type Esri Shapefile (.shp) and GeoTiff (.tif) are supported.
In order to perform the import, GeoNode must be up and running.
positional arguments:
path path [path...]
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
-hh HOST, --host HOST
Geonode host url
-u USERNAME, --username USERNAME
Geonode username
-p PASSWORD, --password PASSWORD
Geonode password
Si bien la descripción de la mayoría de las opciones debería explicarse por sí sola, vale la pena revisar algunas de las opciones clave un poco más en detalle.
El -hh identifica el servidor GeoNode donde queremos cargar nuestros conjuntos de datos. El valor predeterminado es http://localhost:8000.
-u identifica el nombre de usuario para iniciar sesión. El valor predeterminado es admin.
-p identifica la contraseña para iniciar sesión. El valor predeterminado es admin.
El comando de gestión de importación de conjuntos de datos se invoca especificando las opciones descritas anteriormente y especificando la ruta a un directorio que contiene varios archivos. Para los fines de este ejercicio, utilizaremos el conjunto predeterminado de conjuntos de datos de prueba que se incluyen con GeoNode. Puede reemplazar esta ruta con un directorio a sus propios shapefiles.
First let's run the GeoNode server:
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py runserver
Then let's import the files:
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py importlayers /home/user/.virtualenvs/geonode/lib/python3.8/site-packages/gisdata/data/good/vector/
Este comando producirá la siguiente salida en tu terminal
san_andres_y_providencia_poi.shp: 201
san_andres_y_providencia_location.shp: 201
san_andres_y_providencia_administrative.shp: 201
san_andres_y_providencia_coastline.shp: 201
san_andres_y_providencia_highway.shp: 201
single_point.shp: 201
san_andres_y_providencia_water.shp: 201
san_andres_y_providencia_natural.shp: 201
1.7456605294117646 seconds per Dataset
Output data: {
"success": [
"san_andres_y_providencia_poi.shp",
"san_andres_y_providencia_location.shp",
"san_andres_y_providencia_administrative.shp",
"san_andres_y_providencia_coastline.shp",
"san_andres_y_providencia_highway.shp",
"single_point.shp",
"san_andres_y_providencia_water.shp",
"san_andres_y_providencia_natural.shp"
],
"errors": []
}
Como salida, el comando imprimirá:
layer_name: status code for each Layer
upload_time spent of each Dataset
A json with the representation of the Datasets uploaded or with some errors.
El código de estado es la respuesta que llega desde GeoNode. Por ejemplo, 201 significa que el conjunto de datos se ha cargado correctamente
Si encuentras errores al ejecutar este comando, consulte los registros de GeoNode para obtener más información.
Comando de administración updatelayers¶
Si bien es posible importar conjuntos de datos directamente desde el sistema de archivos de tu servidor a tu GeoNode, es posible que tengas un GeoServer existente que ya contenga datos o que desees configurar datos desde un GeoServer que no sea directamente compatible con la carga de datos.
GeoServer admite una amplia gama de formatos de datos y conexiones a bases de datos; es posible que algunos de ellos no sean compatibles con los formatos de carga de GeoNode. Puede agregarlos a tu GeoNode siguiendo el procedimiento que se describe a continuación.
GeoServer admite 4 tipos de datos: Raster, Vector, Databases y Cascaded.
Para obtener una lista de los formatos admitidos para cada tipo de datos, consulta las siguientes páginas:
https://docs.geoserver.org/latest/en/user/data/vector/index.html
https://docs.geoserver.org/latest/en/user/data/raster/index.html
https://docs.geoserver.org/latest/en/user/data/database/index.html
https://docs.geoserver.org/latest/en/user/data/cascaded/index.html
Nota
Algunos de estos formatos raster o vectoriales o tipos de bases de datos requieren que instale complementos específicos en GeoServer para poder usarlos. Consulta la documentación de GeoServer para obtener más información.
Datos de una base de datos PostGIS¶
Veamos un ejemplo de configuración de una nueva base de datos PostGIS en GeoServer y luego configure esos conjuntos de datos en tu GeoNode.
En primer lugar, visite la interfaz de administración de GeoServer en tu servidor. Normalmente, se encuentra en el puerto 8080 y está disponible en http://localhost:8080/geoserver/web/
Debe iniciar sesión con las credenciales de superusuario que configuró cuando configuró por primera vez tu instancia de GeoNode.
Una vez que hayas iniciado sesión en la interfaz de administración de GeoServer, deberías ver lo siguiente.
Nota
La cantidad de tiendas, conjuntos de datos y espacios de trabajo puede ser diferente dependiendo de lo que ya tenga configurado en tu GeoServer.
A continuación, selecciona la opción «Stores» en el menú de la izquierda y luego la opción «Add new Store». Se mostrará la siguiente pantalla.
En este caso, queremos seleccionar el tipo de almacenamiento PostGIS para crear una conexión a nuestra base de datos existente. En la siguiente pantalla, deberás ingresar los parámetros para conectarse a tu base de datos PostGIS (modifica según sea necesario para tu propia base de datos).
Nota
Si no estás seguro de alguna configuración, déjala como predeterminada.
La siguiente pantalla te permite configurar los conjuntos de datos en tu base de datos. Por supuesto, esto variará según los conjuntos de datos en tu base de datos.
Selecciona el botón «Publish» para uno de los conjuntos de datos y se mostrará la siguiente pantalla en la que podrás ingresar metadatos para este conjunto de datos. Dado que administraremos estos metadatos en GeoNode, podemos dejarlos así por ahora.
Las cosas que deben especificarse son el SRS declarado y debes seleccionar los enlaces «Calcular desde datos» y «Calcular desde límites nativos» después de especificar el SRS.
Haz clic en guardar y este conjunto de datos ahora estará configurado para su uso en su GeoServer.
El siguiente paso es configurar estos conjuntos de datos en GeoNode. El comando de administración
updatelayersse puede utilizar para este propósito. Al igual que conimportlayers, es útil ver las opciones de línea de comandos para este comando pasando la opción –help
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py updatelayers --help
Nota
Si habilitó local_settings.py el comando cambiará de la siguiente manera:
DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py updatelayers --help
Esto producirá un resultado similar al siguiente
usage: manage.py updatelayers [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS] [--pythonpath PYTHONPATH]
[--traceback] [--no-color] [-i]
[--skip-unadvertised]
[--skip-geonode-registered] [--remove-deleted]
[-u USER] [-f FILTER] [-s STORE] [-w WORKSPACE]
[-p PERMISSIONS]
Update the GeoNode application with data from GeoServer
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
-i, --ignore-errors Stop after any errors are encountered.
--skip-unadvertised Skip processing unadvertised Datasets from GeoSever.
--skip-geonode-registered
Just processing GeoServer Datasets still not registered
in GeoNode.
--remove-deleted Remove GeoNode Datasets that have been deleted from
GeoSever.
-u USER, --user USER Name of the user account which should own the imported
Datasets
-f FILTER, --filter FILTER
Only update data the Datasets that match the given
filter
-s STORE, --store STORE
Only update data the Datasets for the given geoserver
store name
-w WORKSPACE, --workspace WORKSPACE
Only update data on specified workspace
-p PERMISSIONS, --permissions PERMISSIONS
Permissions to apply to each Dataset
El procedimiento de actualización incluye los siguientes pasos:
El proceso obtiene de GeoServer las capas WMS relevantes (todas, por tienda o por espacio de trabajo)
Si se define un filtro, se filtran las capas de GeoServer
Para cada una de las capas, se crea un conjunto de datos GeoNode basado en los metadatos registrados en GeoServer (título, resumen, límites)
Se agregan nuevas capas, se reemplazan las capas existentes, a menos que se use la opción –skip-geonode-registered
Las capas GeoNode, agregadas en ejecuciones anteriores del proceso de actualización, que ya no están disponibles en GeoServer se eliminan, si la opción –remove-delete está configurada
Advertencia
Siempre se debe especificar uno de los –workspace o –store si deseas ingerir conjuntos de datos que pertenecen a un Workspace específico. Por ejemplo, para ingerir los conjuntos de datos presentes en el espacio de trabajo geonode, deberás especificar la opción -w geonode.
Vamos a incorporar el Conjunto de Datos
geonode:_1_SARMIENTO_ENERO_2018desde el espacio de trabajogeonode.DJANGO_SETTINGS_MODULE=geonode.settings python manage.py updatelayers -w geonode -f _1_SARMIENTO_ENERO_2018
Inspecting the available Datasets in GeoServer ... Found 1 Datasets, starting processing /usr/local/lib/python2.7/site-packages/owslib/iso.py:117: FutureWarning: the .identification and .serviceidentification properties will merge into .identification being a list of properties. This is currently implemented in .identificationinfo. Please see https://github.com/geopython/OWSLib/issues/38 for more information FutureWarning) /usr/local/lib/python2.7/site-packages/owslib/iso.py:495: FutureWarning: The .keywords and .keywords2 properties will merge into the .keywords property in the future, with .keywords becoming a list of MD_Keywords instances. This is currently implemented in .keywords2. Please see https://github.com/geopython/OWSLib/issues/301 for more information FutureWarning) Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [master.demo.geonode.org] A new Dataset has been uploaded From: webmaster@localhost To: mapadeldelito@chubut.gov.ar Reply-To: webmaster@localhost Date: Tue, 08 Oct 2019 12:26:17 -0000 Message-ID: <20191008122617.28801.94967@d3cf85425231> <body> You have received the following notice from master.demo.geonode.org: <p> The user <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i> uploaded the following Dataset:<br/> <strong>_1_SARMIENTO_ENERO_2018</strong><br/> You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018 </p> <p> To change how you receive notifications, please go to http://master.demo.geonode.org </p> </body> ------------------------------------------------------------------------------- Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [master.demo.geonode.org] A new Dataset has been uploaded From: webmaster@localhost To: giacomo8vinci@gmail.com Reply-To: webmaster@localhost Date: Tue, 08 Oct 2019 12:26:17 -0000 Message-ID: <20191008122617.28801.53784@d3cf85425231> <body> You have received the following notice from master.demo.geonode.org: <p> The user <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i> uploaded the following Dataset:<br/> <strong>_1_SARMIENTO_ENERO_2018</strong><br/> You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018 </p> <p> To change how you receive notifications, please go to http://master.demo.geonode.org </p> </body> ------------------------------------------------------------------------------- Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [master.demo.geonode.org] A new Dataset has been uploaded From: webmaster@localhost To: fmgagliano@gmail.com Reply-To: webmaster@localhost Date: Tue, 08 Oct 2019 12:26:17 -0000 Message-ID: <20191008122617.28801.26265@d3cf85425231> <body> You have received the following notice from master.demo.geonode.org: <p> The user <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i> uploaded the following Dataset:<br/> <strong>_1_SARMIENTO_ENERO_2018</strong><br/> You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018 </p> <p> To change how you receive notifications, please go to http://master.demo.geonode.org </p> </body> ------------------------------------------------------------------------------- Found geoserver resource for this Dataset: _1_SARMIENTO_ENERO_2018 ... Creating Default Resource Links for Layer [geonode:_1_SARMIENTO_ENERO_2018] -- Resource Links[Prune old links]... -- Resource Links[Prune old links]...done! -- Resource Links[Compute parameters for the new links]... -- Resource Links[Create Raw Data download link]... -- Resource Links[Create Raw Data download link]...done! -- Resource Links[Set download links for WMS, WCS or WFS and KML]... -- Resource Links[Set download links for WMS, WCS or WFS and KML]...done! -- Resource Links[Legend link]... -- Resource Links[Legend link]...done! -- Resource Links[Thumbnail link]... -- Resource Links[Thumbnail link]...done! -- Resource Links[OWS Links]... -- Resource Links[OWS Links]...done! Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [master.demo.geonode.org] A Dataset has been updated From: webmaster@localhost To: mapadeldelito@chubut.gov.ar Reply-To: webmaster@localhost Date: Tue, 08 Oct 2019 12:26:20 -0000 Message-ID: <20191008122620.28801.81598@d3cf85425231> <body> You have received the following notice from master.demo.geonode.org: <p> The following Dataset was updated:<br/> <strong>_1_SARMIENTO_ENERO_2018</strong>, owned by <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i><br/> You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018 </p> <p> To change how you receive notifications, please go to http://master.demo.geonode.org </p> </body> ------------------------------------------------------------------------------- Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [master.demo.geonode.org] A Dataset has been updated From: webmaster@localhost To: giacomo8vinci@gmail.com Reply-To: webmaster@localhost Date: Tue, 08 Oct 2019 12:26:20 -0000 Message-ID: <20191008122620.28801.93778@d3cf85425231> <body> You have received the following notice from master.demo.geonode.org: <p> The following Dataset was updated:<br/> <strong>_1_SARMIENTO_ENERO_2018</strong>, owned by <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i><br/> You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018 </p> <p> To change how you receive notifications, please go to http://master.demo.geonode.org </p> </body> ------------------------------------------------------------------------------- Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [master.demo.geonode.org] A Dataset has been updated From: webmaster@localhost To: fmgagliano@gmail.com Reply-To: webmaster@localhost Date: Tue, 08 Oct 2019 12:26:20 -0000 Message-ID: <20191008122620.28801.58585@d3cf85425231> <body> You have received the following notice from master.demo.geonode.org: <p> The following Dataset was updated:<br/> <strong>_1_SARMIENTO_ENERO_2018</strong>, owned by <i><a href="http://master.demo.geonode.org/people/profile/admin">admin</a></i><br/> You can visit the Dataset's detail page here: http://master.demo.geonode.org/Datasets/geonode:_1_SARMIENTO_ENERO_2018 </p> <p> To change how you receive notifications, please go to http://master.demo.geonode.org </p> </body> ------------------------------------------------------------------------------- Found geoserver resource for this Dataset: _1_SARMIENTO_ENERO_2018 /usr/local/lib/python2.7/site-packages/geoserver/style.py:80: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead. if not user_style: /usr/local/lib/python2.7/site-packages/geoserver/style.py:84: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead. if user_style: ... Creating Default Resource Links for Layer [geonode:_1_SARMIENTO_ENERO_2018] -- Resource Links[Prune old links]... -- Resource Links[Prune old links]...done! -- Resource Links[Compute parameters for the new links]... -- Resource Links[Create Raw Data download link]... -- Resource Links[Create Raw Data download link]...done! -- Resource Links[Set download links for WMS, WCS or WFS and KML]... -- Resource Links[Set download links for WMS, WCS or WFS and KML]...done! -- Resource Links[Legend link]... -- Resource Links[Legend link]...done! -- Resource Links[Thumbnail link]... -- Resource Links[Thumbnail link]...done! -- Resource Links[OWS Links]... -- Resource Links[OWS Links]...done! [created] Layer _1_SARMIENTO_ENERO_2018 (1/1) Finished processing 1 Datasets in 5.0 seconds. 1 Created Datasets 0 Updated Datasets 0 Failed Datasets 5.000000 seconds per Dataset
Nota
En caso de no especificar la opción -f, los Datasets que ya existen en tu GeoNode solo se actualizarán y la configuración se sincronizará entre GeoServer y GeoNode.
Advertencia
Al actualizar desde GeoServer, ¡se cambiará la configuración en GeoNode!
Uso de GDAL y OGR para convertir tus datos para su uso en GeoNode¶
GeoNode admite la carga de datos en formatos ESRI shapefiles, GeoTIFF, CSV, GeoJSON, ASCII-GRID y KML / KMZ (solo para los últimos tres formatos si está utilizando el backend geonode.importer).
Si tus datos están en otros formatos, deberás convertirlos a uno de estos formatos para usarlos en GeoNode.
Si tus datos ráster no se procesan correctamente, es posible que no puedan utilizarse con GeoServer ni con GeoNode. Deberás procesarlos con GDAL.
Debes asegurarte de tener la biblioteca GDAL instalada en tu sistema. En Ubuntu puedes instalar este paquete con el siguiente comando:
sudo apt-get install gdal-bin
OGR (datos vectoriales)¶
OGR se utiliza para manipular datos vectoriales. En este ejemplo, utilizaremos archivos .tab de MapInfo y los convertiremos en archivos de formas con el comando ogr2ogr. Utilizaremos archivos de MapInfo de muestra del sitio web vinculado a continuación.
http://services.land.vic.gov.au/landchannel/content/help?name=sampledata
Puedes descargar el conjunto de datos Admin;(Postcode) emitiendo el siguiente comando:
$ wget http://services.land.vic.gov.au/sampledata/shape/admin_postcode_vm.zip
Necesitarás descomprimir este conjunto de datos emitiendo el siguiente comando:
$ unzip admin_postcode_vm.zip
Esto te dejará con los siguientes archivos en el directorio donde ejecutaste los comandos anteriores:
|-- ANZVI0803003025.htm
|-- DSE_Data_Access_Licence.pdf
|-- VMADMIN.POSTCODE_POLYGON.xml
|-- admin_postcode_vm.zip
--- vicgrid94
--- mif
--- lga_polygon
--- macedon\ ranges
|-- EXTRACT_POLYGON.mid
|-- EXTRACT_POLYGON.mif
--- VMADMIN
|-- POSTCODE_POLYGON.mid
--- POSTCODE_POLYGON.mif
Primero, inspeccionemos este conjunto de archivos usando el siguiente comando:
$ ogrinfo -so vicgrid94/mif/lga_polygon/macedon\ ranges/VMADMIN/POSTCODE_POLYGON.mid POSTCODE_POLYGON
La salida tendrá un aspecto similar al siguiente:
Had to open data source read-only.
INFO: Open of `vicgrid94/mif/lga_polygon/macedon ranges/VMADMIN/POSTCODE_POLYGON.mid'
using driver `MapInfo File' successful.
Layer name: POSTCODE_POLYGON
Geometry: 3D Unknown (any)
Feature Count: 26
Extent: (2413931.249367, 2400162.366186) - (2508952.174431, 2512183.046927)
Layer SRS WKT:
PROJCS["unnamed",
GEOGCS["unnamed",
DATUM["GDA94",
SPHEROID["GRS 80",6378137,298.257222101],
TOWGS84[0,0,0,-0,-0,-0,0]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Lambert_Conformal_Conic_2SP"],
PARAMETER["standard_parallel_1",-36],
PARAMETER["standard_parallel_2",-38],
PARAMETER["latitude_of_origin",-37],
PARAMETER["central_meridian",145],
PARAMETER["false_easting",2500000],
PARAMETER["false_northing",2500000],
UNIT["Meter",1]]
PFI: String (10.0)
POSTCODE: String (4.0)
FEATURE_TYPE: String (6.0)
FEATURE_QUALITY_ID: String (20.0)
PFI_CREATED: Date (10.0)
UFI: Real (12.0)
UFI_CREATED: Date (10.0)
UFI_OLD: Real (12.0)
Esto le proporciona información sobre la cantidad de características, la extensión, la proyección y los atributos de este conjunto de datos.
A continuación, sigamos adelante y convirtamos este conjunto de datos en un shapefile emitiendo el siguiente comando:
$ ogr2ogr -t_srs EPSG:4326 postcode_polygon.shp vicgrid94/mif/lga_polygon/macedon\ ranges/VMADMIN/POSTCODE_POLYGON.mid POSTCODE_POLYGON
Ten en cuenta que también hemos reproyectado el conjunto de datos al sistema de referencia espacial WGS84 con la opción -t_srs ogr2ogr.
La salida de este comando se verá así:
Warning 6: Normalized/laundered field name: 'FEATURE_TYPE' to 'FEATURE_TY'
Warning 6: Normalized/laundered field name: 'FEATURE_QUALITY_ID' to 'FEATURE_QU'
Warning 6: Normalized/laundered field name: 'PFI_CREATED' to 'PFI_CREATE'
Warning 6: Normalized/laundered field name: 'UFI_CREATED' to 'UFI_CREATE'
Esta salida indica que algunos de los nombres de campo se truncaron para ajustarse a la restricción que los atributos en los shapefiles solo tienen 10 caracteres de longitud.
Ahora tendrás un conjunto de archivos que conforman el conjunto de archivos de forma postcode_polygon.shp. Podemos inspeccionarlos ejecutando el siguiente comando:
$ ogrinfo -so postcode_polygon.shp postcode_polygon
El resultado será similar al que vimos arriba cuando inspeccionamos el archivo MapInfo que convertimos:
INFO: Open of `postcode_polygon.shp'
using driver `ESRI Shapefile' successful.
Layer name: postcode_polygon
Geometry: Polygon
Feature Count: 26
Extent: (144.030296, -37.898156) - (145.101137, -36.888878)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
DATUM["WGS_1984",
SPHEROID["WGS_84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]]
PFI: String (10.0)
POSTCODE: String (4.0)
FEATURE_TY: String (6.0)
FEATURE_QU: String (20.0)
PFI_CREATE: Date (10.0)
UFI: Real (12.0)
UFI_CREATE: Date (10.0)
UFI_OLD: Real (12.0)
Estos archivos ahora se pueden cargar en su instancia de GeoNode a través del cargador normal.
Visita la página de carga de tu GeoNode, arrastra y suelta los archivos que componen el shapefile que has generado con el comando ogr2ogr de GDAL (postcode_polygon.dbf, postcode_polygon.prj, postcode_polygon.shp, postcode_polygon.shx). Concede los permisos necesarios y luego haz clic en el botón «Cargar archivos».
Tan pronto como se complete el proceso de importación, tendrás la posibilidad de ir directamente a la página de información del conjunto de datos (botón «Layer Info»), o editar los metadatos para ese conjunto de datos (botón «Edit Metadata»), o administrar los estilos para ese conjunto de datos («Manage Styles»).
GDAL (datos ráster)¶
Veamos varios ejemplos sobre cómo convertir datos raster en diferentes formatos y/o procesarlos para obtener el mejor rendimiento.
Referencias:
https://geoserver.geo-solutions.it/edu/en/raster_data/processing.html
https://geoserver.geo-solutions.it/edu/en/raster_data/advanced_gdal/
Conversión de Datos Raster: datos de Grid Binario y ASCII de Arc/Info a formato GeoTIFF.¶
Supongamos que tenemos un archivo de Grid ASCII de muestra comprimido como un archivo.
# Un-tar the files
tar -xvf sample_asc.tar
Te quedarán los siguientes archivos en tu sistema de archivos:
|-- batemans_ele
| |-- dblbnd.adf
| |-- hdr.adf
| |-- metadata.xml
| |-- prj.adf
| |-- sta.adf
| |-- w001001.adf
| |-- w001001x.adf
|-- batemans_elevation.asc
El archivo batemans_elevation.asc es un archivo de Grid ASCII de Arc/Info y los archivos en el directorio batemans_ele son un archivo de Grid Binario de Arc/Info.
Puedes utilizar el comando gdalinfo para inspeccionar ambos archivos ejecutando el siguiente comando:
gdalinfo batemans_elevation.asc
El resultado debería verse así:
Driver: AAIGrid/Arc/Info ASCII Grid
Files: batemans_elevation.asc
Size is 155, 142
Coordinate System is `'
Origin = (239681.000000000000000,6050551.000000000000000)
Pixel Size = (100.000000000000000,-100.000000000000000)
Corner Coordinates:
Upper Left ( 239681.000, 6050551.000)
Lower Left ( 239681.000, 6036351.000)
Upper Right ( 255181.000, 6050551.000)
Lower Right ( 255181.000, 6036351.000)
Center ( 247431.000, 6043451.000)
Band 1 Block=155x1 Type=Float32, ColorInterp=Undefined
NoData Value=-9999
Luego puedes inspeccionar los archivos batemans_ele ejecutando el siguiente comando:
gdalinfo batemans_ele
Y este debería ser el resultado correspondiente:
Driver: AIG/Arc/Info Binary Grid
Files: batemans_ele
batemans_ele/dblbnd.adf
batemans_ele/hdr.adf
batemans_ele/metadata.xml
batemans_ele/prj.adf
batemans_ele/sta.adf
batemans_ele/w001001.adf
batemans_ele/w001001x.adf
Size is 155, 142
Coordinate System is:
PROJCS["unnamed",
GEOGCS["GDA94",
DATUM["Geocentric_Datum_of_Australia_1994",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY["EPSG","6283"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4283"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",153],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",10000000],
UNIT["METERS",1]]
Origin = (239681.000000000000000,6050551.000000000000000)
Pixel Size = (100.000000000000000,-100.000000000000000)
Corner Coordinates:
Upper Left ( 239681.000, 6050551.000) (150d 7'28.35"E, 35d39'16.56"S)
Lower Left ( 239681.000, 6036351.000) (150d 7'11.78"E, 35d46'56.89"S)
Upper Right ( 255181.000, 6050551.000) (150d17'44.07"E, 35d39'30.83"S)
Lower Right ( 255181.000, 6036351.000) (150d17'28.49"E, 35d47'11.23"S)
Center ( 247431.000, 6043451.000) (150d12'28.17"E, 35d43'13.99"S)
Band 1 Block=256x4 Type=Float32, ColorInterp=Undefined
Min=-62.102 Max=142.917
NoData Value=-3.4028234663852886e+38
Notarás que el archivo batemans_elevation.asc no contiene información de proyección, mientras que el archivo batemans_ele sí. Por este motivo, utilizaremos los archivos batemans_ele para este ejercicio y los convertiremos a GeoTiff para utilizarlos en GeoNode. También reproyectaremos este archivo en WGS84 en el proceso. Esto se puede lograr con el siguiente comando.
gdalwarp -t_srs EPSG:4326 batemans_ele batemans_ele.tif
La salida te mostrará el progreso de la conversión y cuando se complete, obtendrás un archivo batemans_ele.tif que puede cargar a su GeoNode.
Puedes inspeccionar este archivo con el comando gdalinfo:
gdalinfo batemans_ele.tif
Lo que producirá el siguiente resultado:
Driver: GTiff/GeoTIFF
Files: batemans_ele.tif
Size is 174, 130
Coordinate System is:
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]]
Origin = (150.119938943722502,-35.654598806259330)
Pixel Size = (0.001011114155919,-0.001011114155919)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 150.1199389, -35.6545988) (150d 7'11.78"E, 35d39'16.56"S)
Lower Left ( 150.1199389, -35.7860436) (150d 7'11.78"E, 35d47' 9.76"S)
Upper Right ( 150.2958728, -35.6545988) (150d17'45.14"E, 35d39'16.56"S)
Lower Right ( 150.2958728, -35.7860436) (150d17'45.14"E, 35d47' 9.76"S)
Center ( 150.2079059, -35.7203212) (150d12'28.46"E, 35d43'13.16"S)
Band 1 Block=174x11 Type=Float32, ColorInterp=Gray
Optimización de datos ráster: optimización y entrega de datos ráster de gran tamaño¶
(ref: https://geoserver.geo-solutions.it/edu/en/raster_data/advanced_gdal/example5.html)
Al trabajar con grandes conjuntos de datos raster, puede resultar muy útil utilizar mosaicos.
El mosaico permite dividir grandes conjuntos de datos ráster en partes manejables y es fundamental para definir e implementar una interfaz de ráster E/S de nivel superior.
En este ejemplo, utilizaremos el conjunto de datos original del conjunto de datos ráster público chiangMai_ortho_optimized que actualmente está disponible en la plataforma tailandesa CHIANG MAI Urban Flooding GeoNode.
Este conjunto de datos contiene una imagen ortorectificada almacenada como RGBa GeoTiff con 4 bandas, tres bandas para el RGB y una para la transparencia (el canal alfa).
Ejecutando el comando gdalinfo para ver información detallada:
gdalinfo chiangMai_ortho.tif
Producirá los siguientes resultados:
Driver: GTiff/GeoTIFF
Files: chiangMai_ortho.tif
Size is 63203, 66211
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",99],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.028850000000000,-0.028850000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left ( 487068.775, 2055503.702) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right ( 488892.181, 2057413.890) ( 98d53'40.94"E, 18d36'27.38"N)
Lower Right ( 488892.181, 2055503.702) ( 98d53'40.98"E, 18d35'25.22"N)
Center ( 487980.478, 2056458.796) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=63203x1 Type=Byte, ColorInterp=Red
NoData Value=-10000
Mask Flags: PER_DATASET ALPHA
Band 2 Block=63203x1 Type=Byte, ColorInterp=Green
NoData Value=-10000
Mask Flags: PER_DATASET ALPHA
Band 3 Block=63203x1 Type=Byte, ColorInterp=Blue
NoData Value=-10000
Mask Flags: PER_DATASET ALPHA
Band 4 Block=63203x1 Type=Byte, ColorInterp=Alpha
NoData Value=-10000
Como puedes ver, este GeoTiff no se ha dividido en mosaicos. Sin embargo, para acceder a subconjuntos, el uso de mosaicos puede marcar la diferencia. Con el uso de mosaicos, los datos se almacenan y comprimen en bloques (tiled) en lugar de línea por línea (stripped).
En la salida del comando anterior se puede ver que cada banda tiene bloques con el mismo ancho de la imagen (63203) y una longitud unitaria. Las cuadrículas de la imagen siguiente muestran una imagen con mosaicos de igual tamaño (izquierda) y la misma cantidad de franjas (derecha). Para leer los datos del subconjunto rojo, será necesario descomprimir el área intersectada.
En la imagen en mosaico tendremos que descomprimir solo 16 mosaicos, mientras que en la imagen despojada de la derecha tendremos que descomprimir muchas más tiras.
Los datos de imágenes de drones suelen tener una estructura simplificada, por lo que, en la mayoría de los casos, es necesario optimizarlos para aumentar el rendimiento.
Echemos un vistazo al comando gdal_translate utilizado para optimizar nuestro GeoTiff:
gdal_translate -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR
--config GDAL_TIFF_INTERNAL_MASK YES -b 1 -b 2 -b 3 -mask 4
chiangMai_ortho.tif
chiangMai_ortho_optimized.tif
Nota
Para obtener más detalles sobre los parámetros del comando, consulte https://geoserver.geo-solutions.it/edu/en/raster_data/advanced_gdal/example5.html
Una vez finalizado el proceso, llame al comando gdalinfo en el archivo tif resultante:
gdalinfo chiangMai_ortho_optimized.tif
Los siguientes deberían ser los resultados:
Driver: GTiff/GeoTIFF
Files: chiangMai_ortho_optimized.tif
Size is 63203, 66211
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",99],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.028850000000000,-0.028850000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=YCbCr JPEG
INTERLEAVE=PIXEL
SOURCE_COLOR_SPACE=YCbCr
Corner Coordinates:
Upper Left ( 487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left ( 487068.775, 2055503.702) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right ( 488892.181, 2057413.890) ( 98d53'40.94"E, 18d36'27.38"N)
Lower Right ( 488892.181, 2055503.702) ( 98d53'40.98"E, 18d35'25.22"N)
Center ( 487980.478, 2056458.796) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Byte, ColorInterp=Red
NoData Value=-10000
Mask Flags: PER_DATASET
Band 2 Block=256x256 Type=Byte, ColorInterp=Green
NoData Value=-10000
Mask Flags: PER_DATASET
Band 3 Block=256x256 Type=Byte, ColorInterp=Blue
NoData Value=-10000
Mask Flags: PER_DATASET
Nuestro GeoTiff ahora está dividido en mosaicos de 256x256, tiene 3 bandas y una máscara de 1 bit para no data.
También podemos agregar vistas generales internas al archivo usando el comando gdaladdo:
gdaladdo -r average chiangMai_ortho_optimized.tif 2 4 8 16 32 64 128 256 512
Las vistas generales son versiones duplicadas de los datos originales, pero remuestreadas a una resolución más baja; también se pueden comprimir con varios algoritmos, de la misma manera que el conjunto de datos original.
De manera predeterminada, las vistas generales toman el mismo tipo de compresión y máscaras de transparencia del conjunto de datos de entrada (aplicados a través del comando gdal_translate), por lo que los parámetros que se deben especificar son:
-r average: calcula el promedio de todos los píxeles contribuyentes que no son NODATA
2 4 8 16 32 64 128 256 512: la lista de niveles de visión general integral para construir (a partir de la versión 2.3 de gdal ya no se requieren niveles para construir visiones generales)
Llamando nuevamente al comando gdalinfo:
gdalinfo chiangMai_ortho_optimized.tif
El resultado es:
Driver: GTiff/GeoTIFF
Files: chiangMai_ortho_optimized.tif
Size is 63203, 66211
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",99],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.028850000000000,-0.028850000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=YCbCr JPEG
INTERLEAVE=PIXEL
SOURCE_COLOR_SPACE=YCbCr
Corner Coordinates:
Upper Left ( 487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left ( 487068.775, 2055503.702) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right ( 488892.181, 2057413.890) ( 98d53'40.94"E, 18d36'27.38"N)
Lower Right ( 488892.181, 2055503.702) ( 98d53'40.98"E, 18d35'25.22"N)
Center ( 487980.478, 2056458.796) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Byte, ColorInterp=Red
NoData Value=-10000
Overviews: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Mask Flags: PER_DATASET
Overviews of mask band: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Band 2 Block=256x256 Type=Byte, ColorInterp=Green
NoData Value=-10000
Overviews: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Mask Flags: PER_DATASET
Overviews of mask band: 31602x3Results in:3106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Band 3 Block=256x256 Type=Byte, ColorInterp=Blue
NoData Value=-10000
Overviews: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Mask Flags: PER_DATASET
Overviews of mask band: 31602x33106, 15801x16553, 7901x8277, 3951x4139, 1976x2070, 988x1035, 494x518, 247x259, 124x130
Ten en cuenta que se han aplicado las máscaras de transparencia de las vistas generales internas (su compresión no aparece en los metadatos del archivo).
Los vehículos aéreos no tripulados suelen proporcionar también otros dos tipos de datos: «DTM (modelo digital del terreno)» y «DSM (modelo digital de superficie)».
Para optimizar esos datos es necesario llevar a cabo distintos procesos. Veamos algunos ejemplos para entender mejor cómo utilizar gdal para llevar a cabo esa tarea.
Desde la plataforma CHIANG MAI Urban Flooding GeoNode se encuentra actualmente disponible el conjunto de datos chiangMai_dtm_optimized, descarguemos su conjunto de datos original.
Este conjunto de datos debe contener el archivo DTM chiangMai_dtm.tif.
Llamando al comando gdalinfo:
gdalinfo chiangMai_dtm.tif
Se mostrará la siguiente información:
Driver: GTiff/GeoTIFF
Files: chiangMai_dtm.tif
Size is 12638, 13240
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",99],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.144270000000000,-0.144270000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left ( 487068.775, 2055503.755) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right ( 488892.059, 2057413.890) ( 98d53'40.94"E, 18d36'27.37"N)
Lower Right ( 488892.059, 2055503.755) ( 98d53'40.98"E, 18d35'25.22"N)
Center ( 487980.417, 2056458.822) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=12638x1 Type=Float32, ColorInterp=Gray
NoData Value=-10000
La lectura de esta imagen puede resultar muy lenta porque aún no se ha dividido en mosaicos. Por lo tanto, como se mencionó anteriormente, sus datos deben almacenarse y comprimirse en mosaicos para aumentar el rendimiento.
El siguiente comando gdal_translate debería ser apropiado para ese propósito:
gdal_translate -co TILED=YES -co COMPRESS=DEFLATE chiangMai_dtm.tif chiangMai_dtm_optimized.tif
Cuando los datos a comprimir consisten en imágenes (por ejemplo, fotografías aéreas, imágenes satelitales en color verdadero o mapas en color), se pueden utilizar algoritmos con pérdida como JPEG. Ahora estamos comprimiendo datos donde la precisión es importante, el tipo de datos de banda es Float32 y los valores de elevación no deben alterarse, por lo que un algoritmo con pérdida como JPEG no es adecuado. JPEG generalmente solo se debe utilizar con datos de bytes (8 bits por canal), por lo que hemos elegido la compresión DEFLATE sin pérdida a través de la opción de creación COMPRESS=DEFLATE.
Llamando nuevamente al comando gdalinfo:
gdalinfo chiangMai_dtm_optimized.tif
Podemos observar los siguientes resultados:
Driver: GTiff/GeoTIFF
Files: chiangMai_dtm_optimized.tif
Size is 12638, 13240
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",99],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.144270000000000,-0.144270000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left ( 487068.775, 2055503.755) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right ( 488892.059, 2057413.890) ( 98d53'40.94"E, 18d36'27.37"N)
Lower Right ( 488892.059, 2055503.755) ( 98d53'40.98"E, 18d35'25.22"N)
Center ( 487980.417, 2056458.822) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
NoData Value=-10000
También necesitamos crear vistas generales a través del comando gdaladdo:
gdaladdo -r nearest chiangMai_dtm_optimized.tif 2 4 8 16 32 64
A diferencia del ejemplo anterior, las vistas generales se crearán con el algoritmo de remuestreo más cercano. Esto se debe a la naturaleza de los datos que estamos representando: no debemos considerar el promedio entre dos valores de elevación sino simplemente el más cercano, ya que es más confiable en cuanto a la conservación de los datos originales.
Llamando nuevamente al comando gdalinfo:
gdalinfo chiangMai_dtm_optimized.tif
Podemos ver la siguiente información:
Driver: GTiff/GeoTIFF
Files: chiangMai_dtm_optimized.tif
Size is 12638, 13240
Coordinate System is:
PROJCS["WGS 84 / UTM zone 47N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",99],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32647"]]
Origin = (487068.774750000040513,2057413.889810000080615)
Pixel Size = (0.144270000000000,-0.144270000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_SOFTWARE=pix4dmapper
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 487068.775, 2057413.890) ( 98d52'38.72"E, 18d36'27.34"N)
Lower Left ( 487068.775, 2055503.755) ( 98d52'38.77"E, 18d35'25.19"N)
Upper Right ( 488892.059, 2057413.890) ( 98d53'40.94"E, 18d36'27.37"N)
Lower Right ( 488892.059, 2055503.755) ( 98d53'40.98"E, 18d35'25.22"N)
Center ( 487980.417, 2056458.822) ( 98d53' 9.85"E, 18d35'56.28"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
NoData Value=-10000
Overviews: 6319x6620, 3160x3310, 1580x1655, 790x828, 395x414, 198x207
Se han creado vistas generales. De manera predeterminada, heredan el mismo tipo de compresión del conjunto de datos original (no hay evidencia de ello en la salida de gdalinfo).
Otros casos de uso de datos ráster¶
Cómo servir a una gran cantidad de GeoTiff en escala de grises con Palette
Cómo proporcionar un gran número de archivos de cuadrícula ASCII DTM
Ofreciendo un gran número de GeoTiff cartográficos en blanco y negro con paleta
Ofreciendo un gran número de imágenes satelitales/aéreas RGB GeoTiff con compresión
Optimización y servicio de imágenes satelitales/aéreas RGB GeoTiff de 16 bits
Procesar conjuntos de datos ráster mediante programación¶
En esta sección proporcionaremos un conjunto de scripts shell que pueden resultar muy útiles para procesar por lotes una gran cantidad de conjuntos de datos ráster de forma programada.
process_gray.shfor filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=DEFLATE $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh chmod +x gdal_translate.sh ./gdal_translate.sh
for filename in *.optimized.tif*; do echo gdaladdo -r nearest $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh chmod +x *.sh ./gdaladdo.sh ./rename.sh
process_rgb.shfor filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -b 1 -b 2 -b 3 $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh chmod +x gdal_translate.sh ./gdal_translate.sh
for filename in *.optimized.tif*; do echo gdaladdo -r average $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh chmod +x *.sh ./gdaladdo.sh ./rename.sh
process_rgb_alpha.shfor filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR --config GDAL_TIFF_INTERNAL_MASK YES -b 1 -b 2 -b 3 -mask 4 $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh chmod +x gdal_translate.sh ./gdal_translate.sh
for filename in *.optimized.tif*; do echo gdaladdo -r average $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh chmod +x *.sh ./gdaladdo.sh ./rename.sh
process_rgb_palette.shfor filename in *.tif*; do echo gdal_translate -co TILED=YES -co COMPRESS=DEFLATE $filename ${filename//.tif/.optimized.tif}; done > gdal_translate.sh chmod +x gdal_translate.sh ./gdal_translate.sh
for filename in *.optimized.tif*; do echo gdaladdo -r average $filename 2 4 8 16 32 64 128 256 512; done > gdaladdo.sh for filename in *.optimized.tif*; do echo mv \"$filename\" \"${filename//.optimized.tif/.tif}\"; done > rename.sh chmod +x *.sh ./gdaladdo.sh ./rename.sh
Tesauro Importación y Exportación¶
Consulte Importar mediante el comando load_thesaurus y Exportar un tesauro como RDF mediante el comando dump_thesaurus.
Crear usuarios y superusuarios¶
Tu primer paso será crear un usuario. Existen tres opciones para hacerlo, dependiendo del tipo de usuario que quieras crear puedes elegir una opción diferente. Comenzaremos creando un superusuario, ya que este usuario es el más importante. Un superusuario tiene todos los permisos sin necesidad de asignarlos explícitamente.
La forma más fácil de crear un superusuario (en Linux) es abrir su terminal y escribir:
$ DJANGO_SETTINGS_MODULE=geonode.settings python manage.py createsuperuserNota
Si habilitó
local_settings.pyel comando cambiará de la siguiente manera:$ DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py createsuperuser
Se te pedirá un nombre de usuario (en este tutorial llamaremos al superusuario que ahora cree su_superusuario), una dirección de correo electrónico y una contraseña.
Ahora que has creado un superusuario, deberías familiarizarte con la Interfaz de administración de Django. Como superusuario, tienes acceso a esta interfaz, donde puedes administrar usuarios, conjuntos de datos, permisos y más. Por ahora, será suficiente con seguir los pasos. Para acceder a la Interfaz de administración de Django, ve al sitio web de tu GeoNode e inicia sesión con tu_superusuario. Una vez que hayas iniciado sesión, el nombre de tu usuario aparecerá en la parte superior derecha. Haz clic en él y aparecerá el siguiente menú:
Al hacer clic en Admin se muestra la interfaz.
Ve a Auth -> Users y verás todos los usuarios que existen en este momento. En tu caso solo será your_superuser. Haz clic en él y verás una sección de Personal Info, otra de Permissions y otra de Important dates. Por el momento, la sección de Permissions es la más importante.
Como puedes ver, hay tres casillas que se pueden marcar y desmarcar. Como has creado un superusuario, las tres casillas están marcadas de forma predeterminada. Si solo se hubiera marcado la casilla active, el usuario no sería un superusuario y no podría acceder a la Django Admin Interface (que solo está disponible para usuarios con el estado staff). Por lo tanto, tenga en cuenta las dos cosas siguientes:
un superusuario puede acceder a la Interfaz de administración de Django y tiene todos los permisos sobre los datos cargados en GeoNode.
un usuario normal (creado desde la interfaz GeoNode) solo tiene permisos activos de forma predeterminada. El usuario no tendrá la capacidad de acceder a la Interfaz de administración de Django y se le deben agregar ciertos permisos.
Hasta ahora solo hemos creado superusuarios. ¿Cómo se crea un usuario normal? Tienes dos opciones:
Interfaz de administración de Django
Primero crearemos un usuario a través de la Interfaz de administración de Django porque aún la tenemos abierta. Por lo tanto, regresa a Auth -> Users y deberías encontrar un botón a la derecha que dice Add user.
Haz clic en él y aparecerá un formulario para rellenar. Ponle al nuevo usuario el nombre test_user, elige una contraseña y haz clic en guardar en la parte inferior derecha del sitio.
Ahora deberías ser dirigido al sitio donde puedes cambiar los permisos del usuario test_user. De manera predeterminada, solo está marcada la opción active. Si quieres que este usuario también pueda asistir a esta interfaz de administración, también puedes marcar staff status. ¡Pero por ahora dejamos la configuración como está!
Para probar si el nuevo usuario se creó correctamente, regresa a la página web de GeoNode e intente iniciar sesión.
Sitio web de GeoNode
- Para crear un usuario normal, también puede utilizar el sitio web de GeoNode. Si instaló GeoNode utilizando una versión, debe
verá un botón Registrarse en la parte superior, al lado del botón Sign in (es posible que tenga que cerrar la sesión antes).
Pulsa el botón y aparecerá de nuevo un formulario para que lo rellenes. Este usuario se llamará geonode_user
Al pulsar Sign up el usuario quedará registrado, por defecto solo con el estado activo.
Permisos de sincronización por lotes¶
GeoNode proporciona un comando de administración muy útil set_layers_permisions que permite a un administrador agregar o eliminar fácilmente permisos a grupos y usuarios en uno o más conjuntos de datos.
Los argumentos del comando set_layers_permisions son:
permissions para configurar/desconfigurar –> leer, descargar, editar, administrar
READ_PERMISSIONS = [ 'view_resourcebase' ] DOWNLOAD_PERMISSIONS = [ 'view_resourcebase', 'download_resourcebase' ] EDIT_PERMISSIONS = [ 'view_resourcebase', 'change_dataset_style', 'download_resourcebase', 'change_resourcebase_metadata', 'change_dataset_data', 'change_resourcebase' ] MANAGE_PERMISSIONS = [ 'delete_resourcebase', 'change_resourcebase', 'view_resourcebase', 'change_resourcebase_permissions', 'change_dataset_style', 'change_resourcebase_metadata', 'publish_resourcebase', 'change_dataset_data', 'download_resourcebase' ]
Nota: la lista de permisos anterior puede cambiar si se habilita ADVANCED_WORKFLOW. Para obtener más información, consulte: https://docs.geonode.org/en/master/admin/admin_panel/index.html#how-to-enable-the-advanced-workflow
resources (Conjuntos de datos) sobre los que se asignarán permisos –> escriba el ID del conjunto de datos, se pueden escribir múltiples opciones con separador de coma, si no se proporcionan identificadores, se considerarán todos los conjuntos de datos
users a quienes se les asignarán permisos, se pueden escribir opciones múltiples con un separador de coma
groups a los que se asignarán permisos, se pueden escribir opciones múltiples con un separador de coma
Bandera delete (opcional) que significa que los permisos no se establecerán
Ejemplos de uso:¶
Asignar permisos de edit en los conjuntos de datos con id 1 y 2 a los usuarios username1 y username2 y al grupo group_name1.
python manage.py set_layers-permissions -p edit -u username1,username2 -g group_name1 -r 1,2
Asignar permisos de administración en todos los conjuntos de datos al grupo group_name1.
python manage.py set_layers-permissions -p manage -g group_C
Anular los permisos de descarga en el conjunto de datos con id 1 para el usuario username1.
python manage.py set_layers-permissions -p download -u username1 -r 1 -d
Las mismas funcionalidades, con algunas limitaciones, están disponibles también desde el Admin Dashboard >> Users o desde el Admin Dashboard >> Groups >> Group profiles.
Una acción denominada Set layer permissions está disponible en la lista, redirigiendo al administrador a un formulario para establecer/desestablecer permisos de lectura, edición y descarga en el perfil de usuario/grupo seleccionado.
Basta con seleccionar el conjunto de datos y pulsar «Enviar». Si está activado el modo asíncrono, la asignación de permisos es asíncrona
Eliminar determinados recursos de GeoNode¶
El comando de administración delete_resources Management Command permite eliminar recursos que cumplan una determinada condición, especificada en forma de una expresión serializada django Q().
En primer lugar, echemos un vistazo a la opción --help del comando de administración delete_resources para inspeccionar todas las opciones y características del comando.
Correr
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources --help
Nota
Si habilitó local_settings.py el comando cambiará de la siguiente manera:
DJANGO_SETTINGS_MODULE=geonode.local_settings python manage.py delete_resources --help
Esto producirá el siguiente resultado:
usage: manage.py delete_resources [-h] [-c CONFIG_PATH]
[-l LAYER_FILTERS [LAYER_FILTERS ...]]
[-m MAP_FILTERS [MAP_FILTERS ...]]
[-d DOCUMENT_FILTERS [DOCUMENT_FILTERS ...]]
[--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color] [--force-color]
Delete resources meeting a certain condition
optional arguments:
-h, --help show this help message and exit
-c CONFIG_PATH, --config CONFIG_PATH
Configuration file path. Default is:
delete_resources.json
-l LAYER_FILTERS [LAYER_FILTERS ...], --layer_filters LAYER_FILTERS [LAYER_FILTERS ...]
-m MAP_FILTERS [MAP_FILTERS ...], --map_filters MAP_FILTERS [MAP_FILTERS ...]
-d DOCUMENT_FILTERS [DOCUMENT_FILTERS ...], --document_filters DOCUMENT_FILTERS [DOCUMENT_FILTERS ...]
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
--force-color Force colorization of the command output.
Hay dos formas de declarar expresiones Q() para filtrar qué recursos deben eliminarse:
Con un archivo de configuración JSON: pasando el argumento
-cque especifica la ruta al archivo de configuración JSON.
Ejemplo 1: Ruta relativa al archivo de configuración (a
manage.py)DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -c geonode/base/management/commands/delete_resources.json
Ejemplo 2: Ruta absoluta al archivo de configuración
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -c /home/User/Geonode/configs/delete_resources.json
Con CLI: pasando
-l-d-mlista de argumentos para cada uno de los recursos (conjuntos de datos, documentos, mapas)
Ejemplo 3: Eliminar recursos sin archivo de configuración
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -l 'Q(pk__in: [1, 2]) | Q(title__icontains:"italy")' 'Q(owner__name=admin)' -d '*' -m "Q(pk__in=[1, 2])"
Archivo de configuración¶
El archivo de configuración JSON debe contener un único objeto filters, que consta de las listas Dataset, map y document. Cada lista especifica las condiciones de filtro aplicadas a un conjunto de consultas correspondiente, definiendo qué elementos se eliminarán. Los filtros se evalúan y se insertan directamente en el método .filter() de Django, lo que significa que los filtros que aparecen como elementos de lista separados se tratan como una condición AND. Para crear una consulta OR, se debe utilizar el operador |. Para obtener más información, consulte la [documentación](https://docs.djangoproject.com/en/3.2/topics/db/queries/#complex-lookups-with-q-objects) de Django. La única excepción es pasar una lista con '*', lo que provocará la eliminación de todo el conjunto de consultas del recurso.
Ejemplo 4: Ejemplo de contenido del archivo de configuración, que eliminará los conjuntos de datos con ID 1, 2 y 3, aquellos propiedad del usuario admin, junto con todos los mapas definidos.
{ "filters": { "Dataset": [ "Q(pk__in=[1, 2, 3]) | Q(title__icontains='italy')", "Q(user__name=admin)" ], "map": ["*"], "document": [] } }
CLI¶
La configuración de CLI se puede especificar con argumentos de lista -l -d -m, que de hecho son una traducción del archivo JSON de configuración. Los argumentos -l -d -m se evalúan de la misma manera que filters.Dataset, filters.map y filter.document, según el Ejemplo 4. El resultado del siguiente ejemplo será equivalente al Ejemplo 4:
Ejemplo 5: Ejemplo de configuración de CLI, que eliminará los conjuntos de datos con los ID 1, 2 y 3, junto con todos los mapas.
DJANGO_SETTINGS_MODULE=geonode.settings python manage.py delete_resources -l 'Q(pk__in: [1, 2, 3]) | Q(title__icontains:"italy")' 'Q(owner__name=admin)' -m '*'
Ejecución asincrónica a través de http¶
Es posible exponer y ejecutar comandos de administración a través de http.
Para ejecutar comandos de administración de django personalizados usualmente usamos la línea de comando:
python manage.py ping_mngmt_commands_http
$> pong
La aplicación management_commands_http nos permite ejecutar comandos cuando no tenemos acceso a la línea de comandos. Es posible ejecutar un comando mediante la API o la interfaz gráfica de usuario de administración de Django.
Por razones de seguridad, solo los usuarios administradores pueden acceder a la función y el comando deseado debe exponerse explícitamente. De forma predeterminada, se exponen los siguientes comandos: ping_mngmt_commands_http, updatelayers, sync_geonode_datasets, sync_geonode_maps, importlayers y set_all_datasets_metadata.
Para exponer más comandos, puede cambiar la variable de entorno MANAGEMENT_COMMANDS_EXPOSED_OVER_HTTP y los comandos agregados se expondrán en tu aplicación.
La lista de comandos expuestos está disponible en el punto final list_management_commands y también se presenta mediante el formulario en la página de administración create management command job.
Nota
Para utilizar los comandos de forma asincrónica, ASYNC_SIGNALS debe configurarse en True y Celery debe estar ejecutándose.
Administrar mediante la interfaz de administración de Django¶
Creando un puesto de trabajo¶
Acceda al panel de administración: http://<your_geonode_host>/admin y vaya a «Management command jobs».
Sección de administración del comando de gestión¶
Llegarás a http://<your_geonode_host>/es/admin/management_commands_http/managementcommandjob/, luego harás clic en el botón + Add management command job (http://<your_geonode_host>/es/admin/management_commands_http/managementcommandjob/add/).
Añadir tarea de comando de gestión¶
Seleccione el comando y complete el formulario, con los argumentos y/o claves si es necesario. Guarde su trabajo y en la lista seleccione la acción start, alternativamente puede marcar la opción autostart y el comando se iniciará automáticamente al crearse.
Creación de un formulario de trabajo de comando de gestión¶
Comenzando un trabajo¶
Para iniciar un trabajo:
Comenzando un trabajo¶
Seleccione el trabajo que desea iniciar.
Seleccione la acción «start».
Haga clic en «Go».
La página se actualizará y el estado del trabajo habrá cambiado. Si tarda mucho en ejecutarse, actualiza la página para ver el estado actualizado.
También está disponible la opción «stop».
Nota
Si la página tarda demasiado en cargarse, es posible que ASYNC_SIGNALS no esté activado. Si tu estado se queda bloqueado en QUEUED, verifique si Celery está ejecutándose y configurado correctamente.
Estado del trabajo¶
Al hacer clic en el enlace del ID de un trabajo, podemos ver los detalles de este trabajo. Para el trabajo que acabamos de crear, podemos verificar el mensaje de salida y el estado del trabajo de Celery.
Ejemplo de estado laboral¶
Cuando se produce un error durante la ejecución, el mensaje de seguimiento estará disponible en el traceback de Celery. En la siguiente imagen se creó un trabajo ping_mngmt_commands_http con los argumentos ["--force_exception", true]. Verificar el texto en este campo puede ser útil para solucionar errores.
Ejemplo de mensaje de seguimiento de trabajo¶
Administrar mediante puntos finales de API¶
La ejecución de los comandos de gestión se puede gestionar mediante solicitudes http a una API: http://<your_geonode_host>/api/v2/management/.
Todas las solicitudes deben ser autenticadas con permisos administrativos (superusuario).
Puedes encontrar aquí una colección de Postman con todos los ejemplos listados aquí y otros endpoints disponibles:
geonode_mngmt_commands.postman_collection.json
Lista de comandos expuestos¶
Obtener una lista de los comandos expuestos:
curl --location --request GET 'http://<your_geonode_host>/api/v2/management/commands/' --header 'Authorization: Basic YWRtaW46YWRtaW4='
Respuesta:
{
"success": true,
"error": null,
"data": [
"ping_mngmt_commands_http",
"updatelayers",
"set_all_datasets_metadata",
"sync_geonode_maps",
"importlayers",
"sync_geonode_datasets"
]
}
Nota
Debes cambiar el encabezado `Authorization (Basic YWRtaW46YWRtaW4=) a tu token de autenticación, en este ejemplo estoy usando un token para admin como nombre de usuario y admin como contraseña.
Creando un puesto de trabajo¶
Opcionalmente, antes de crear el trabajo puedes obtener tu mensaje de ayuda con la siguiente llamada:
curl --location --request GET 'http://<your_geonode_host>/api/v2/management/commands/ping_mngmt_commands_http/' --header 'Authorization: Basic YWRtaW46YWRtaW4='
Creación de un trabajo para ejecutar ping_mngmt_commands_http con 30 segundos de tiempo de suspensión:
curl --location --request POST 'http://<your_geonode_host>/api/v2/management/commands/ping_mngmt_commands_http/jobs/' \
--header 'Authorization: Basic YWRtaW46YWRtaW4=' \
--header 'Content-Type: application/json' \
--data-raw '{
"args": ["--sleep", 30],
"kwargs": {},
"autostart": false
}'
Respuesta:
{
"success": true,
"error": null,
"data": {
"id": 8,
"command": "ping_mngmt_commands_http",
"app_name": "geonode.management_commands_http",
"user": 1000,
"status": "CREATED",
"created_at": "2021-10-08T18:17:25.045752Z",
"start_time": null,
"end_time": null,
"args": [
"--sleep",
30
],
"kwargs": {},
"celery_result_id": null,
"output_message": null
}
}
Nota
Alternativamente, puedes omitir la parte jobs de la URL para crear un trabajo. (Utilice http://<your_geonode_host>/api/v2/management/commands/ping_mngmt_commands_http/ como URL)
Acciones Start/Stop¶
Para iniciar el trabajo creado:
curl --location --request PATCH 'http://<your_geonode_host>/api/v2/management/jobs/8/start/' --header 'Authorization: Basic YWRtaW46YWRtaW4='
Respuesta:
{
"success": true,
"error": null,
"data": {
"id": 8,
"command": "ping_mngmt_commands_http",
"app_name": "geonode.management_commands_http",
"user": 1000,
"status": "QUEUED",
"created_at": "2021-10-08T18:17:25.045752Z",
"start_time": null,
"end_time": null,
"args": [
"--sleep",
30
],
"kwargs": {},
"celery_result_id": null,
"output_message": null
}
}
Nota
Durante la ejecución, el trabajo se puede interrumpir mediante la siguiente llamada:
curl --location --request PATCH 'http://<your_geonode_host>/api/v2/management/jobs/8/stop/' --header 'Authorization: Basic YWRtaW46YWRtaW4='
Tenga en cuenta que el estado cambió de CREATED a QUEUED, durante la ejecución será STARTED y al final FINISHED.
Listado de trabajos y estado¶
Puedes verificar tu estado y detalles laborales con la siguiente llamada:
curl --location --request GET 'http://<your_geonode_host>/api/v2/management/jobs/8/status/' --header 'Authorization: Basic YWRtaW46YWRtaW4='
Respuesta:
{
"id": 8,
"command": "ping_mngmt_commands_http",
"app_name": "geonode.management_commands_http",
"user": 1000,
"status": "FINISHED",
"created_at": "2021-10-08T18:17:25.045752Z",
"start_time": "2021-10-08T18:20:02.761475Z",
"end_time": "2021-10-08T18:20:32.802007Z",
"args": [
"--sleep",
30
],
"kwargs": {},
"celery_result_id": "fe7359a6-5f8c-47bf-859a-84351b5ed80c",
"output_message": "Sleeping for 30.0 seconds...\npong\n",
"celery_task_meta": {
"date_done": "2021-10-08T18:20:32.810649Z",
"status": "SUCCESS",
"traceback": null,
"worker": "worker1@4f641ffa9c0b"
}
}
Al ejecutar varios trabajos y auditar los trabajos ya ejecutados, se puede recuperar una lista de trabajos mediante la siguiente llamada:
curl --location --request GET 'http://<your_geonode_host>/api/v2/management/jobs/' --header 'Authorization: Basic YWRtaW46YWRtaW4='
Respuesta:
{
"links": {
"next": null,
"previous": null
},
"total": 1,
"page": 1,
"page_size": 10,
"data": [
{
"id": 1,
"command": "ping_mngmt_commands_http",
"app_name": "geonode.management_commands_http",
"user": 1000,
"status": "FINISHED",
"created_at": "2021-10-08T18:17:25.045752Z"
}
]
}
Nota
Esta lista se puede filtrar por los campos «celery_result_id», «command», «app_name», «status», «user» y «user__username».