Tuesday 29 April 2014

Creating an S-57 ENC Display with OpenLayers and GeoServer

Something that I have been wanting to do for a long time - that is to render S-57 ENC (Electronic Navigation Charts) using OpenLayers and GeoServer.

The process starts with converting the S-57 ".000" file in numerous Shapefiles using ogr2ogr. S-57 Objects have Geometric Primitives like Points, Lines, and Polygons; and are tied to Spatial Objects that have coordinates. The conversion then has to be done for each Geometry type:

ogr2ogr -skipfailures -f "ESRI Shapefile" point US5FL24M.000 -nlt POINT
ogr2ogr -skipfailures -f "ESRI Shapefile" line US5FL24M.000 -nlt LINESTRING
ogr2ogr -skipfailures -f "ESRI Shapefile" area US5FL24M.000 -nlt POLYGON


These commands will create point, line, polygon Shapefiles in corresponding folders for S-57 file US5FL24M.000 - note that many of the output files will be not-applicable (possibly blank) and we need to refer to the S-57 Specification to see which Class has which Geometric Primitives. Example is LNDARE which is "land area" - this supports both area and point geometries and needed to be styled for both.

Next step then was to figure out the specification for each S-57 Class and how it is styled based on the S-52 Specification for ECDIS Display. I created several styles using SLD for several key layers. The initial results look promising:



There are many complexities built into the rules of S-52, some Classes have several pages of Activity Diagrams that need to be translated into SLD.

Comments are most welcome.