Geomajas, a GIS framework for the web, focuses on efficient data delivery, security and performance.
Geomajas is open source, anyone can see how the solution is built and there is a world-wide community active on the project. The openness guarantees high quality as there are many eyes looking at how things are done. It is distributed under the GNU Affero General Public License (AGPL).
Integrate, transform and secure GIS data
Geomajas is an application framework which is focused on building spatial applications. You can easily and generically access spatial data. Data sources are abstracted to raster or vector data.
The command pattern is used for remote access to the framework. Internally, everything is wired using spring services (1). Certain complex operations are implemented using a pipeline. This combination makes it possible to customize almost everything. It is easy to add extra commands to the framework and it is easy to customize the pipelines. The latter can be data source (2) specific.
The framework is built using many plug-ins. The back-end provides a basic set of commands and services and wiring code. Specific implementations (for example data sources) or extensions (like security implementations, printing,… are handled in plug-ins. This gives you a lot of flexibility, You can choose to include only the functionality you need, thus keeping your application lean.
Most of the spatial services are implemented using a pipeline. This is a construct which can be extended or replaced specific for each data source. Extension can be done by adding interceptors around a group of steps or by adding individual steps.
Services can be transactional and you can combine information from several data sources, add (business) rules to evaluate,…
Various data sources are available to access spatial databases and standard GIS data sources.
The data which is accessible in Geomajas is grouped in applications. Each application can contain a set of maps. Each map is itself built from a list of layers. A layer is a description of a data source with some additional configuration (like styles). A map can be part of several applications and a layer can be included in many maps.
The framework is cloud-ready. It the load is too large to handle on one machine, you can simple add extra machines to handle more load. There is no need for sharing state between machines except for caching. The caching itself uses a distributed cache (3) to assure this can also be scaled out.
Security is fully integrated in the Geomajas framework. When accessing the commands, the framework uses a security token to request the policies from a policy server. The token itself is provided by an authentication service. The framework itself assure that the policies are enforced.
The framework does not itself handle passwords or store policies (though a specific security plug-in might do so). This handling can be redirected to specialized services (4).
Because of the deep integration in the framework, all data can be affected by security. For example, raster images may have parts cleared when the area is not allowed to be visible.
Caching is integrated into Geomajas (5). This integration has several advantages. It is security aware, the security context is included in cache checks. Also, the cache is integrated with both the read and write of the data sources. The cached entries are automatically invalidated when data is written to the data source. This way the data can be cached and still up-to-date. The need to clear caches regularly to prevent cached data from being too stale is also removed (6).
To make data available again Geomajas uses faces. Faces convert data and commands to allow access using a client specific protocol. While this focused on providing map interaction in the browser in the past, in future there will be support for various standard formats like WMS, WFS etc.
The faces fully tap into the power of the framework. The client only has to support one format for communication with the server. All conversions to and from that format are handled on the server. This format can be very efficient to reduce both transfer time and ease processing on the client, making the client more light-weight. For security, you only need to provide your credentials once (see above). No credentials are stored on the client so they cannot be intercepted. All the server enhancements which are configured on the server are seamlessly available. This includes caching, rasterization,…
Geomajas currently has the following set of plug-ins:
- GWT face using the SmartGWT widget toolkit. Ideal face for developing rich browser based applications in Java.
- Pure GWT face. A face for building browser based applications which does not depend on a specific widget library. This is best for people who do not want do use SmartGWT and for mobile applications (as it is more lightweight than the GWT face).
- REST face which allows communicating to Geomajas using GeoJSON.
- Data sources
- GeoTools layer: provides access all vector data sources supported by GeoTools, most significantly to WFS data and data stored in ArcGIS.
- Google layer: provides access to Google maps raster data.
- OpenStreetMap layer provides access to rendered OpenStreetMap data (various renderings). This can be customized to access many tile server which use Mercator as projection.
- Caching: provides powerful caching which can stay up-to-date with regards to changes in the data source and which is fully integrated in the framework, including security.
- Rasterizing: fast access to vector data by offloading the actual rasterizing to the server.
- Geocoder: geocoder which allows location coordinates to be found based on a string representation like address or POI name.
- Printing: simple printing plug-in which allows a map to be exported as a PDF file.
- Reporting: integration of Geomajas and JasperReports, allowing maps to be included in a report. This report can be exported to various formats including PDF, Word, Open Document Format,…
- Static security: security provider which contains a static configuration of the roles.
There are also a couple of plug-in which contain additional widgets for the GWT face.
Geomajas is supported by Geosparc. There is a Geosparc Edition which is more stable and for which commercial support is available. The Geosparc edition is available under AGPL or a commercial license. Geosparc provides training, SLA’s and consulting services through it world-wide partner network.
(1) Dependency injection or Inversion of Control.
(2) Data sources are often usually called layers.
(4) Examples include OpenAM (formerly OpenSSO), Kerberos, PERMIS,…
(5) In fact, the caching shows the power of configuration in Geomajas. All the caching is handled in a plug-in. There are nothing caching specific in the core, only configuration hooks.
(6) This obviously assumes all writes are through the Geomajas services. If this is not the case, limiting the cache validity is highly recommended.