Slide 1

Slide 1 text

GeoNode at work! how do I do this, how do I do that? FOSS4G-NA 2023 - Baltimore Alessio Fabiani GeoSolutions

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Many GeoNodes

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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 ☺ )

Slide 8

Slide 8 text

Custom themes and layout

Slide 9

Slide 9 text

Minerva Interlligence

Slide 10

Slide 10 text

UNMISS UNITED NATIONS MISSION IN SOUTH SUDAN

Slide 11

Slide 11 text

AdbPo - Geoportale Distretto Po

Slide 12

Slide 12 text

AdbPo - Geoportale Distretto Po

Slide 13

Slide 13 text

UTU

Slide 14

Slide 14 text

InfoMapNode (WIP)

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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 %} .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); (….)

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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 %} 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; }; {% endblock %}

Slide 19

Slide 19 text

Theme Generator

Slide 20

Slide 20 text

Custom modules

Slide 21

Slide 21 text

The Future – Custom MS plugins Custom MapStore plugin for meteorological data

Slide 22

Slide 22 text

HEV-E

Slide 23

Slide 23 text

HEV-E

Slide 24

Slide 24 text

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)

Slide 25

Slide 25 text

Minerva Intelligence

Slide 26

Slide 26 text

SCORE

Slide 27

Slide 27 text

SCORE

Slide 28

Slide 28 text

Custom workflows

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Data integration and ingestion ● QGIS plugins and processing models

Slide 31

Slide 31 text

Data integration and ingestion ● And speaking of QGIS you can of course use, integrate and extend its GeoNode plugin

Slide 32

Slide 32 text

Custom deployments

Slide 33

Slide 33 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

Slide 34

Slide 34 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 35

Slide 35 text

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)

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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.

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

That’s all! http://www.geosolutionsgroup.com/contacts info@geosolutionsgroup.com