Skip to content

A Java implementation of the GEO label, including client and server module and a standalone generator for GEO labels.


Notifications You must be signed in to change notification settings


Repository files navigation


A Java implementation of the GEO label server API.

Build Status


The GEO label summarizes geospatial metadata in various formats in a nice visual image showing the availability of information on a number of facets, such as producer metadata, stand compliance, or quality information. Take a look at the demo server or run this implementation with Docker:

docker build --tag geolabel-server .
docker run --rm -it -p 8080:8080 geolabel-server

Open landing page at http://localhost:8080/glbservice/ and query the API at http://localhost:8080/glbservice/api/v1/.

The GEO label

The GEO label is an interactive visual summary of geospatial metadata to facilitate search and discovery use cases. Ii is a graphical representation which comprises 8 informational facets: producer profile, lineage information, producer comments, compliance with standards, quality information, user feedback, expert reviews, and citations information. Each informational facet can have an availability states: available, not available, available only at a higher level. This information is encoded with symbols and colours for easy comprehensibility and repeated recognition.

Currently, the GEO label supports several metadata standards such as ISO19115 and FGDC (producer metadata documents), SensorML, as well as GeoViQua Quality Information Model (producer and user quality information).

More information: and

The GEO label API

The GEO label server is basically an API to generate a SVG document based on standardised metadata documents (e.g. XML) that can (a) be POSTed to the server, or (b) a GET Url can be build to let the server request the document and provide a permanent link to the label.

The Java implementation currently only supports the endpoint geolabel to generate labels.

The API further defines endpoints to retrieve seperate facets as well as "drilldown" informations where the service provides a visual and textual perspective (HTML) into specific aspects of a given metadata document.

Full API documentation:

Transformation Rules/Mappings

The GEO label basically uses a set of XPath expressions to determine if the required information is available so that a facet can be marked as available. For interoperability reasons (using the same configuration file as the PHP implementation, and PHP only supports XPath 1.0) this Java implementation uses XPath 1.0.

The transformation rules are be downloaded on startup from and the service has a local fallback if the online file cannot be found.

For future work, using XPath 2.0 using Saxon would be an advantage because wildcards can be used for namespaces. A commit that still contains a Saxon-based implementation is

Project Modules

This project consists of a service implementation generating GEO label SVG representations from supplied metadata, a client API to access such a service as well as a client JSF component to directly render GEO labels into JSF 1/2 and JSP based webpages.


Client API to access a GEO label service. Uses a builder pattern to allow various combinations of metadata and feedback document inputs supporting streams, URL references and XML Documents.

InputStream geoLabel = GeoLabelClientV1.createGeoLabelRequest()


Simple JSF component rendering GEO labels from actual feedback/metadata documents and/or URL references. Supports asynchronous loading using Partial Page Rendering.

<html xmlns=""
		<glb:geolabel metadataUrl="#{metadataUrl}" feedbackUrl="#{feedbackUrl}"	async="true" size="100" />

For more details see jsf/


Web application running in Servlet Containers - for more details see server/


Resources required by server and client modules.

For more details see commons/


This project is developed in Java and managed with Maven.


mvn clean install

Run server locally

See server/


Run unit tests with

mvn test

License headers and NOTICE

The service uses plugins to manage the license headers and the NOTICE file during every build.

Check the NOTICE file and license headers with mvn notice:check and mvn license:check respectively. Update the NOTICE file with mvn notice:generate. Update the license headers (based on the template in /misc) with mvn license:format.

You can also see the plugins' documentation/help pages with Maven:

mvn notice:help -Ddetail=true
mvn license:help -Ddetail=true


Deployment with Google Cloud Run

"Cloud Run is a managed compute platform that automatically scales your stateless containers." (

Create a new Project in Google Cloud, e.g. "geolabel-java-api" and select it (make sure that billing is enabled for the project).

Enable the Cloud Run API.

Open the Cloud Shell.

Enter the following commands:

//clone the project from GitHub
git clone
cd GEO-label-java

//build the container image with the Dockerfile, geolabel-java-api is the project-id, geolabel the name of the image 
gcloud builds submit --tag

//deploying to cloud run
gcloud run deploy --image --platform managed
//enter a service name, e.g. geolabel
//choose a region, e.g. europe-west1-b
//respond y to allow unauthenticated invocations
//after a few seconds, the command line displays the service URL

More Information at .

[WIP] Deployment with AWS Lambda

See lambda/

JMeter Test Plan

The installation instructions for JMeter can be found at At misc/JMeterTests you find the GEO_Label_API.jmx test plan which can be open in Apache JMeter (File/Open).

On the left side are the user scenarios which can be run all together (green arrow) or separately (right click on scenario and "start").

The results are shown in tables, trees and graphs.


Daniel Nüst (

Support: Metadatada management community mailing list, see


The GEO label Java project is licensed under The Apache Software License, Version 2.0.

For licenses of used libraries see NOTICE file.


A Java implementation of the GEO label, including client and server module and a standalone generator for GEO labels.







No packages published

Contributors 4