[mapserver-users] [Info] S-57 nautical map on MapServer

Oliver Wesp oliver.wesp at gmail.com
Fri Jul 23 13:44:26 EDT 2010


We did similar work for IENC Data (inland water)  in Germany. Have a look at

http://wsvmapserv.wsv.bund.de/wms_ienc?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.1.1

We're reading S-57 .000 files direct through the OGR Library as Jeff
suggested. We also used scripts for generating tile indexes the way we
needed them and for generating symbols from the S-52 Standard. Also we
used a php wrapper script for generating a S-52 like pick report on
GetFeatureInfo.

Feel free to contact me if you like more details.

Best regards,
Oliver

2010/7/23 easyl <thlin.box at gmail.com>:
>
> Since several months I was looking for an good example or tutorial for
> rendering S-57 nautical charts on MapServer.
> After searching without any success I tried to build up my first map with
> limit knowledge.
>
> IMO, the most hardest part is how to render them with S-52 style standard.
> (The project http://www.opencpn.org/ has done a really good work to render
> nautical map in an application.)
>
> Some resource:
> http://home.gdal.org/projects/s57/index.html
> http://grass.osgeo.org/wiki/S-57_data
> http://www.s-57.com/
>
> Here is a short description of what I have done.
>
> 1) Conver S-57 (*.000) files into shapefiles by using ogr2ogr.
>    An S-57 file is split into several shapefiles;
>    Each shapefile contains single one layer of single geometry type.
>
>    For example:
>    src.000 ------ DEPARE ------> Area    (a shapefile)
>                  +                  +--> Line     (a shapefile)
>                  |
>                  +-- (other layer)  .........................    (a
> shapefile)
>
>   Here is the ogr2ogr commands
>   > ogr2ogr -skipfailure -append -f "ESRI Shapefile" output/DEPARE/A
> src.000 -nlt POLYGON DEPARE
>   > ogr2ogr -skipfailure -append -f "ESRI Shapefile" output/DEPARE/L
> src.000 -nlt LINESTRING DEPARE
>
>   The SOUNDG layer must be converted with special care.
>  > export OGR_S57_OPTIONS="SPLIT_MULTIPOINT=ON,ADD_SOUNDG_DEPTH=ON"
>  > ogr2ogr -skipfailure -append -f "ESRI Shapefile" output/SOUNDG/P src.000
> -nlt POINT SOUNDG
>
> 2) Construct mapfile
>  2.1) Generally there are (at least) two things to take care: scale and
> layer priority.
>
>         S-57 data may have different scale value and overlap with each
> other.
>         Moreover, a S-57 data may not have a rectangle extent.
>
>         For those reasons, I construct mapfile with the following manner:
>         Sort layers after scale value, then layer priority.
>         Group them if necessary.
>         MAP
>           LAYER
>               // scale:       1:100,000
>               // priority:    low
>              CONNECTION "shapefile/100000/DEPARE/A/DEPARE.shp"
>              DATA "DEPARE"
>              GROUP "DEPARE"
>           END
>
>           LAYER
>               // scale:       1:100,000
>               // priority:    high
>              CONNECTION "shapefile/100000/LIGHTS/P/LIGHTS.shp"
>              DATA "LIGHTS"
>              GROUP "LIGHTS"
>           END
>
>           LAYER
>               // scale:       1:10,000
>               // priority:    low
>              CONNECTION "shapefile/10000/DEPARE/A/DEPARE.shp"
>              DATA "DEPARE"
>              GROUP "DEPARE"
>           END
>
>           LAYER
>               // scale:       1:10,000
>               // priority:    high
>              CONNECTION "shapefile/10000/LIGHTS/P/LIGHTS.shp"
>              DATA "LIGHTS"
>              GROUP "LIGHTS"
>           END
>         END
>
>  2.2) apply style. It is the hardest part.
>         Here I give abother two examples.
>
>  LAYER
>    NAME DEPARE_A_1500000_1
>    GROUP "DEPARE"
>    STATUS ON
>    TYPE POLYGON
>    CONNECTIONTYPE OGR
>    CONNECTION "shapefile/1500000/DEPARE/A/DEPARE.shp"
>    PROCESSING "CLOSE_CONNECTION=DEFER"
>    PROCESSING "LABEL_NO_CLIP=ON"
>    DATA "DEPARE"
>    PROJECTION
>      "proj=longlat"
>      "ellps=WGS84"
>      "datum=WGS84"
>      "no_defs"
>    END
>    CLASSITEM DRVAL1
>    CLASS
>      EXPRESSION ([DRVAL1] < 3)
>      STYLE
>        COLOR 115 182 239
>      END
>    END
>    CLASS
>      EXPRESSION ([DRVAL1] >= 3 && [DRVAL1] < 8)
>      STYLE
>        COLOR 156 198 247
>      END
>    END
>    CLASS
>      EXPRESSION ([DRVAL1] >= 8)
>      STYLE
>        COLOR 214 235 239
>      END
>    END
>  END
>
>
>  LAYER
>    NAME LIGHTS_P_1500_1
>    GROUP "LIGHTS"
>    STATUS ON
>    TYPE POINT
>    #MAXSCALEDENOM 1501
>    CONNECTIONTYPE OGR
>    CONNECTION "shapefile/1500/LIGHTS/P/LIGHTS.shp"
>    PROCESSING "CLOSE_CONNECTION=DEFER"
>    PROCESSING "LABEL_NO_CLIP=ON"
>    DATA "LIGHTS"
>    PROJECTION
>      "proj=longlat"
>      "ellps=WGS84"
>      "datum=WGS84"
>      "no_defs"
>    END
>    CLASSITEM COLOUR
>    CLASS
>      EXPRESSION ([COLOUR] == 3)
>      STYLE
>        COLOR 255 0 0
>        SIZE [VALNMR]
>        OPACITY 50
>        OUTLINECOLOR 0 0 0
>      END
>    END
>    CLASS
>      EXPRESSION ([COLOUR] == 4)
>      STYLE
>        COLOR 0 255 0
>        SIZE [VALNMR]
>        OPACITY 50
>        OUTLINECOLOR 0 0 0
>      END
>    END
>    ...
>  END
>
>  Here is the result:
> http://osgeo-org.1803224.n2.nabble.com/file/n5329589/s57MS.png
> http://osgeo-org.1803224.n2.nabble.com/file/n5329589/s57MS.PNG s57MS.PNG
>  Of course, it needs still a lot of symbols, color encoding, customized
> style after standards ....
>
> I have wrote some script to automatically convert S-57 files and construct
> mapfile (manually writing a mapfile for 100+ layers from 20+ S-57 files is
> not practical...). If anyone has interest, I can share them or even make a
> project to let everyone contribute.....
>
> Now the task to be done is to encode every possible style in
> mapfile............................:(
>
> Any suggestion is welcome!
>
>
>
>
> --
> View this message in context: http://osgeo-org.1803224.n2.nabble.com/Info-S-57-nautical-map-on-MapServer-tp5329589p5329589.html
> Sent from the Mapserver - User mailing list archive at Nabble.com.
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
>


More information about the mapserver-users mailing list