Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GeoNode at work. how do I do this, how do I do that? FOSS4GNA 2023

GeoNode at work. how do I do this, how do I do that? FOSS4GNA 2023

GeoNode is a Web Spatial Content Management System based entirely on Open Source tools whose purpose is to promote the sharing of data and their management in a simple environment where even non-expert users of GIS technologies can view, edit, manage, and share spatial data, maps, prints and documents attached.

GeoNode is an open source project initiated in 2010 by the World Bank Global Facility for Disaster Reduction and Recovery group (GFDRR), but from 2011 is entirely run by the developer community that the project has been able to attract. It claims some large organizations among its contributors such as the United Nations, the World Bank and the European Commission as well as many NGOs and private companies. Supported by a vast, diverse and global open source community, GeoNode is an official project of the Open Source Geospatial Foundation (OSGeo).

Using an open source stack based on mature and robust frameworks and software like Django, MapStore, PostGIS, GeoServer and pycsw, an organization can build on top of GeoNode its own SDI or geospatial portal. GeoNode provides a large number of user-friendly capabilities, broad interoperability using Open Geospatial Consortium (OGC) standards, and a powerful authentication/authorization mechanism.

Over the years, GeoSolutions has been involved in a number of projects, ranging from local administrations to global institutions, involving GeoNode deployments, customizations and enhancements. A gallery of projects and use cases will showcase the versatility and effectiveness of GeoNode, both as a standalone application and as a service component, for building secured geodata catalogs and web mapping services, dashboards and geostories. In particular the recent advancements in data ingestion and harvesting workflows will be presented, along with the many ways to expose its secured services to third party clients. Examples of GeoNode's builtin capabilities for extending and customizing its frontend application will be showcased.

Simone Giannecchini

November 29, 2023

More Decks by Simone Giannecchini

Other Decks in Technology


  1. GeoNode at work! how do I do this, how do

    I do that? FOSS4G-NA 2023 - Baltimore Alessio Fabiani GeoSolutions
  2. GeoSolutions • Offices in Italy & US, clients worldwide •

    30+ collaborators, 25+ Engineers • Our products • Our Offer Enterprise Support Services Deployment Subscription Professional Training Customized Solutions GeoNode
  3. Affiliations We strongly support Open Source, it Is in our

    core We actively participate in OGC working groups and get funded to advance new open standards We support standards critical to GEOINT
  4. Creating Downstream Applications • GeoNode cannot address all use cases

    • Avoid reinventing the wheel • Avoid implicit/explicit forks 🡪 Custom GeoNode Applications to the rescue! • A proper “GeoNode Project”: • Start from a template (geonode-project) • Generate a “materialized” Django project • It extends the “vanilla” GeoNode • It provides a custom Django app • It provides a ready to use Docker Compose configuration
  5. Creating Downstream Applications This approach offers several opportunities • Customize

    GeoNode look and feel • Define a brand new end user interface • Extend its models and services without modifying GeoNode Core • Extend the client application, including developing new MapStore client plugins
  6. Creating Downstream Applications This approach allows us to make the

    most out of what GeoNode core offers without sacrificing versatility and specific project needs It’s doable, we did it (or at least we tried to ☺ )
  7. UTU

  8. Theming • The React client is wrapped inside standard Django

    templates • It integrates with the styling with Django templates • A simplified Theming is still available from the Django admin but advanced customization can be done with SCSS variables and CSS overrides • More customization available through Django template snippets overrides
  9. Theming • Template ‘snippets’ are used to break GeoNode templates

    granularly and leverage the full power of the Django templating system. • The geonode-mapstore-client/snippets/custom_theme.html snippet can be used to override the base gn-theme {% load static %} {% block content %} <style> .msgapi .gn-theme { --gn-primary: #388AC8; --gn-primary-contrast: #ffffff; --gn-link-color: #397AAB; --gn-link-hover-color: #1b4d74; --gn-focus-color: rgba(57, 122, 171, 0.4); --gn-footer-color: #ffffff; --gn-footer-bg: #034f78; --gn-footer-link-color: #ffffff; --gn-footer-link-hover-color: #dddddd; --gn-loader-primary-contrast-color: #ffffff; --gn-loader-primary-contrast-fade-color: rgba(255, 255, 255, 0.2); --gn-loader-primary-color: #388AC8; --gn-loader-primary-fade-color: rgba(56, 138, 200, 0.2); (….)
  10. Client configuration • The client configuration is composed of a

    static configuration (localConfig.js) plus the configuration coming from the GeoNode context • The client merges these configurations at runtime into a global __GEONODE_CONFIG__ Javascript variable. • The geonode-mapstore-client/_geonode_config.html template can be overridden to customize and extend the configuration
  11. Frontend configuration • In the following example we configure some

    translations for the specific project {% extends 'geonode-mapstore-client/_geonode_config.html' %} {% block override_local_config %} <script> window.__GEONODE_CONFIG__.overrideLocalConfig = function(localConfig, _) { const config = _.mergeWith(localConfig, { "translationsPath": [ "/static/mapstore/ms-translations", "/static/mapstore/gn-translations", "/static/mapstore/translations" ] }, function(objValue, srcValue, key) { if (_.isArray(objValue)) { return srcValue; } // supportedLocales is an object so it's merged with the default one // so to remove the default languages we should take only the supportedLocales from override if (key === 'supportedLocales') { return srcValue; } }); return config; }; </script> {% endblock %}
  12. DECATASTROPHIZE – Emergency Management • Emergency Management 🡪 coordinate field

    interventions • Use Impact Assessment COP as back-end layers • Collaborative Map Annotations Module (front-end and back-end)
  13. Data integration and ingestion • Custom ETL pipelines with Airflow

    ◦ pre-processing ◦ optimization ◦ ingestion and publishing (GeoNode API)
  14. Data integration and ingestion • And speaking of QGIS you

    can of course use, integrate and extend its GeoNode plugin
  15. AuthN/AuthZ integrations GeoNode as an Oauth2/OpenID client • Integration with

    standard OpenID Connect and Oauth2 authentication flows • Custom logic for users mapping to groups and roles in GeoNode (JWT fields / claims) • We have experience with: ◦ Azure AD ◦ WSO2 ◦ Auth0 ◦ Keycloak ◦ Google
  16. AuthN/AuthZ integrations GeoNode as an Oauth2/OpenID provider • GeoNode has

    an integrated Oauth2 provider • Geoserver with GeoNode is an example where GeoNode acts as an authentication provider for Geoserver • Use cases ◦ Authentication for Desktop GIS applications (e.g. QGIS) ◦ GeoNode acts as a provider and as a client application. Real use case example: QGIS -> GeoNode -> Azure AD
  17. Using an existing PostgreSQL? • You’re not forced to use

    the PostgreSQL RDMS shipped with GeoNode’s Docker setup • You can use existing services and clusters. You just need to configure things and let GeoNode create the required schemas, and tables (with migrations)
  18. Your own DB tables • Yes, you can register an

    existing DB table inside Geoserver (DB store), publish the Geoserver layer and then publish to the GeoNode catalogue. • BUT ◦ Backup and Restore will not manage your own DB tables, users, etc. ◦ Styles you create with GeoNode’s style editor will be placed in GeoNode’s own Geoserver workspace
  19. Using an existing Geoserver? • If you want to use

    it as the reference Geoserver for GeoNode you are in charge of: ◦ installing and configuring the required extensions needed by GeoNode (GeoFence, Oauth2, Key Authentication, SLD REST Service, WPS, etc.) ◦ configure Geoserver with the expected workspace, store and authentication services required by GeoNode
  20. Using an existing Geoserver? • If you want to serve

    existing Geoserver services through GeoNode the best solution is to use GeoNode Remote Services and the Harvesting service.
  21. Deployment • If you want to full stack of services

    the best approach is with Docker Compose • The manual setup is best suited for ◦ multi-machine setups ◦ integration with existing services (Proxy/Gateways, DBs, etc.) ◦ DB and/or Geoserver clustering