Slide 1

Slide 1 text

GeoNode Use Cases & Custom Applications FOSS4G 2025 - Mostar Mattia Giupponi GeoSolutions

Slide 2

Slide 2 text

GeoSolutions ● GeoNode

Slide 3

Slide 3 text

GeoNode customizations

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Theming

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Theming • Example of template snippet to customize the color theme {% load static %} {% block content %} .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

Slide 9

Slide 9 text

Custom themes and layout examples

Slide 10

Slide 10 text

Fossil Fuel Atlas (SEI)

Slide 11

Slide 11 text

Fossil Fuel Atlas (SEI)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

EURAC

Slide 14

Slide 14 text

KMaP (ISPRA)

Slide 15

Slide 15 text

KMaP (ISPRA)

Slide 16

Slide 16 text

UTU

Slide 17

Slide 17 text

AdbPo - Geoportale Distretto Po

Slide 18

Slide 18 text

AdbPo - Geoportale Distretto Po

Slide 19

Slide 19 text

Custom modules examples

Slide 20

Slide 20 text

Custom MapStore plugins Custom client plugins for meteorological data

Slide 21

Slide 21 text

DECATASTROPHIZE – Emergency Management • Collaborative Map Annotations (front-end and back-end)

Slide 22

Slide 22 text

Custom workflows

Slide 23

Slide 23 text

Data integration and ingestion ● Custom ETL pipelines with Airflow ○ pre-processing ○ optimization ○ ingestion and publishing (GeoNode API)

Slide 24

Slide 24 text

Data integration and ingestion ● Cadastral data ETL ○ continuous processing of cadastral data updates ○ ingestion and publishing (GeoNode API)

Slide 25

Slide 25 text

Data integration and ingestion ● QGIS plugins and processing models

Slide 26

Slide 26 text

Custom deployments

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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)

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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.

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

That’s all! http://www.geosolutionsgroup.com/contacts [email protected]