One of the many goals of IGIBS is to generate Web Map Services that will be used in conjunction with INSPIRE type View Services which themselves are compliant with the INSPIRE Technical Guidance for View Services version 3.0. To that end, it made sense to take the following basic INSPIRE criteria into consideration when making our choice of tools:
- Support for the LANGUAGE request parameter in a GetCapabilities Request.
- Support for “extended attributes” including elements extending the
_ExtendedCapabilities substitution group of the WMS 1.3.0 schema with a custom
xsd. - Support for the optional WMS 1.3.0 parameters wms:identifier, wms:AuthorityUrl and wms:LayerLimit
Up till ~3 weeks ago (May 12th) no stable release of either geoserver or mapserver satisfied any of the above criteria.
Mapserver Customisation
In order to make IGIBS services INSPIRE compliant we are using a customised version of mapserver 5.6.6. The customizations involve backporting selected features from the development tree of version 6.0 plus our own additions to add support for the LANGUAGE parameter and the extended attributes in the GetCapabilites response. The code is available for perusal here for any interested parties. It comprises a patch against mapserver 5.6.6 plus a sample mapscript wrapper that can be run as a cgi to provide an INSPIRE compliant View Service. Since Mapserver 6.0 the patch should no longer be necessary, but the mapscript wrapper is still required.
Latest Developments
On May 12, 2011 mapserver released version 6.0 and geoserver released version 2.1.0. As part of that release, Geoserver got funding from the Ordnance Survey to add support for the aforementioned INSPIRE spec as a plugin and can now satisfy all of the above criteria, while mapserver only got support for the wms:Layerlimit attribute.
Conclusion
The choice of software depends on one’s requirements. For a national mapping agency seeking INSPIRE compliance it seems that geoserver 2.1.0 is currently the best route. For the purpose of IGIBS, we will stick to the modified mapserver 5.6.6 for the following reasons:
- Speed. Mapserver has performed considerably faster in our tests involving rendering and reprojection of geospatial data, which is crucial for the dynamically generated services of IGIBS.
- Flexibility. Mapserver can be very easily scripted in a high level language for prototyping and experimentation.
- Tried and trusted modifications to ensure compatibility while still being flexible enough to follow the fluid INSPIRE specs.
- Geoserver does not yet fully support all parts of the INSPIRE TG e.g. the “scenario 2” mentioned in the standard.
Please feel free to submit any comments.
3 Responses to “Comparing Geoserver / Mapserver in terms of INSPIRE compliance”
Sorry, the comment form is closed at this time.
GeoServer 2.1.0 has much better raster reprojection performance than 2.0.2, did you try it out? We basically implemented the same linearized reprojection approach MapServer uses (local linear approximation of the projection formulas instead of the actual ones)
Thanks for the info Andrea! It is good news that the latest geoserver/geotools release reimplemented raster warping in a similar fashion to mapserver. I will be very interested to see how it fares to mapserver in my next round of tests.
Putting aside the INSPIRE plugin and it’s support for scenario 1/scenario 2 extended capabilities and Multi-lingual support (bug report) GeoServer (2.1.1) also fails the INSPIRE requirement to provide a bounding box for each of the supported SRS/CRS.
eg
…
<CRS>EPSG:4326</CRS>
<CRS>CRS:84</CRS>
<EX_GeographicBoundingBox>
<westBoundLongitude>-7.629</westBoundLongitude>
<eastBoundLongitude>1.765</eastBoundLongitude>
<southBoundLatitude>49.89</southBoundLatitude>
<northBoundLatitude>60.849</northBoundLatitude>
</EX_GeographicBoundingBox>
<BoundingBox CRS=”EPSG:4326″ minx=”49.89″ miny=”-7.629″ maxx=”60.849″ maxy=”1.765″/>
<Attribution>
…
The response is at least missing a BoundingBox for CRS:84 the CRS which is automatically added. And ideally we need a BoundingBox for all of the CRS declared in the root layer level.