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

GeoNode: Use Cases & Custom Applications - FOSS...

GeoNode: Use Cases & Custom Applications - FOSS4G EU 2025

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.

Avatar for Simone Giannecchini

Simone Giannecchini PRO

July 22, 2025
Tweet

More Decks by Simone Giannecchini

Other Decks in Technology

Transcript

  1. How to customize GeoNode cannot address all use cases •

    Avoid implicit/explicit forks • Avoid reinventing the wheel Custom GeoNode Applications to the rescue! • A GeoNode Project is generated via a template (repo geonode-project) • Layout and standard files for a Django project • Preconfigured Django app • Vanilla GeoNode as a default requirement • Ready to use Docker Compose configuration
  2. GeoNode projects 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
  3. Theming • React client ◦ is wrapped inside standard Django

    templates ◦ it integrates with the styling with Django templates • A simplified Theming is still available within the Django admin pages • Advanced customization can be done with SCSS variables and CSS overrides • More customization available through Django template snippets overrides
  4. Theming • Example of template snippet to customize the color

    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); (….) {% 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 %} • Example of template snippet to customize translations
  5. Custom pages and catalogues • NEWS: GeoNode 5 (master branch)

    ◦ Override and customize the catalogue for specific resource types (datasets, maps, etc.) ◦ Embed “mini-catalogues” inside a single page ◦ Embed catalogues inside custom pages
  6. UTU

  7. Data integration and ingestion • Custom ETL pipelines with Airflow

    ◦ pre-processing ◦ optimization ◦ ingestion and publishing (GeoNode API)
  8. Data integration and ingestion • Cadastral data ETL ◦ continuous

    processing of cadastral data updates ◦ ingestion and publishing (GeoNode API)
  9. 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 ◦ Okta
  10. 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
  11. Using your own PostgreSQL • You’re not forced to use

    the PostgreSQL RDBMS shipped with GeoNode Docker setup • You can use existing services and clusters. You just need to configure things and give GeoNode the required grants, in order to be able to create the required schemas and tables (through Django migrations)
  12. Using your own DB tables/Layers • Yes, you can register

    an existing DB table inside Geoserver (with any 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
  13. Using your own 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 • If you only want to serve existing Geoserver services through GeoNode the best solution is to use GeoNode Remote Services and the Harvesting service.
  14. GeoNode Deployment • If you want to deploy the 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