S-57 data

From GRASS-Wiki
Jump to navigation Jump to search

More to come

Basics

(see the mailing list posts linked at the end of that page):
http://thread.gmane.org/gmane.comp.linux.gps/3920/focus=3937
http://thread.gmane.org/gmane.comp.linux.gps/3920/focus=3934

Obtaining data

Worldwide

  • ...

Cananda

  • ...

USA

  • Free ENC vector data for the USA from NOAA
http://nauticalcharts.noaa.gov/mcd/enc/download.htm
  • Nice previews / chart picker:
http://www.oceangrafix.com/o.g/search-nautical-charts.html

Import

  • Use a Lat/lon WGS84 location
Select "create new location from georeferenced file", using the ENC *.000 file. It's just lat/lon WGS84, so you could create a new location by EPSG code (4326) or by custom entry too. Another automatic way (from within grass) is to use v.in.ogr's location= option.
  • Unzip dataset
unzip NOAA_ENCs440569.zip
  • test dataset with ogrinfo
ogrinfo --formats | grep S57
ogrinfo ENC_ROOT/US3NY01M/US3NY01M.000
  • Try to load and view it with a nice viewer like OpenEV or libS52's s52glx test app
  • Import S-57 data into GRASS GIS (grass.osgeo.org) with v.in.ogr
  # change default database from DBF to SQLite as it is less lossy
  db.connect driver=sqlite \
     database='$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db'

  # import data  (ignore the many string warnings)
  v.in.ogr dsn=ENC_ROOT/US3NY01M/US3NY01M.000 out=noaa_12300
  # have a look
  v.info noaa_12300
  g.region vect=noaa_12300
  # render all features from all layers
  d.mon x0; d.vect noaa_12300

  # view DB columns available for layer 20:
  v.info -c noaa_12300 layer=20

  # browse attribute database
  v.db.connect -p noaa_12326 | head -n1
  sqlitebrowser $MAPSET/sqlite.db

SQLiteBrowser from http://sqlitebrowser.sourceforge.net/

  # e.g. land              Layer: LNDARE
  ogrinfo -ro ENC_ROOT/US3NY01M/US3NY01M.000 | grep LNDARE
    20: LNDARE
  d.vect noaa_12300 layer=20 type=area disp=shape,attr attrcol=objnam \
    llayer=20 fcolor=255:200:80
  # e.g. soundings         Layer: SOUNDG   (automated layer by name)
  LAYER=SOUNDG
  LAYER_ID=`ogrinfo -ro ENC_ROOT/US3NY01M/US3NY01M.000 | \
    grep "$LAYER" | cut -f1 -d':'`
    38: SOUNDG (Multi Point)
  d.vect noaa_12300 layer=$LAYER_ID type=point icon=basic/diamond \
    fcolor=yellow size=6
  # e.g. buoys             Layer: BOYSPP
  ogrinfo -ro ENC_ROOT/US3NY01M/US3NY01M.000 | grep BOY
    7: BOYLAT (Point)
    8: BOYSAW (Point)
    9: BOYSPP (Point)
  d.vect noaa_12300 layer=7 type=point icon=basic/circle \
    fcolor=orange size=8
  d.vect noaa_12300 layer=8 type=point icon=basic/circle \
    fcolor=magenta size=8
  d.vect noaa_12300 layer=9 type=point icon=basic/circle \
    fcolor=blue size=8
  • Set zoom, display layers, colors, line widths, labels, etc. in GRASS
(this will take some work)
   # show everything
   NUMLAYERS=`v.db.connect -g noaa_12326 | wc -l`
   for layer in `seq 1 $NUMLAYERS` ; do
       echo "layer=$layer"
       d.vect noaa_12326 layer=$layer \
          color=$((layer*4)):$((layer*4)):$((layer*4)) \
          fcolor=$((layer*4)):$((layer*4)):$((layer*4))
   done
  • Color and symbology standards: see libS52 from OpenEV contrib/ CVS
http://www.iho.shom.fr/ECDIS/s52intro.htm
http://www.iho.shom.fr/publicat/free/files/PresLib_3.3_Addendum_2007.pdf
    e.g. fill color for land is 255:200:80
    d.vect noaa_12326 attrcol=objnam llayer=24 disp=attr \
      layer=24 fcolor=255:200:80

?? For more colors see openev/contrib/S52/doc/C1.lup_collision.txt

Accessing S-52 symbology

S-57 is the data format. The S-52 standard contains the standardized coloring and symbology for electronic navigation charts. We want to view the S-57 data through the lens of the S-52 rules. Some ideas for that:

  • GRASS interface: (wishlist prototype) display imported S-57 data (v.in.ogr or v.external) using S-52's coloring and layer-order info. Some environment will be information like lighting level and hull depth (start at 0) will be needed
  • View with the OpenEV plugin (functional)
  • Create the dataviewer as a QGIS plugin (wishlist user app)


libS52


How to build

  • Install build dependencies
Install OpenGL and X11 -dev packages (X11/Xlib.h and GL/gl.h)
PROJ.4 for proj_api.h?
  • Build it:
make          # for s52glx simple test program
make default  # for libS52

Run simple s52glx test program

  • Get ENC data
  • Edit s52test.conf with the full path to your ENC chart datafile (*.000 file)
  • Run it with ./s52glx and you should see a new window with all layers rendered
  • Screenshots

OpenEV S52 plugin

  • Copy libS52.so to GDAL's lib directory
putting the lib in /usr/local/lib seems to work.
run ldconfig ?
  • Configure OpenEV with render plugin support:
CFLAGS='-I/usr/include/gdal' CPPFLAGS='-I/usr/include/gdal' \
  ./configure --with-double-geocoord --with-render-plugin

make
Test S52 plugin with OpenEV
  • Set environment variables
export S57_CSV=/usr/share/gdal
export OGR_S57_OPTIONS="LNAM_REFS:ON,UPDATES:ON,\
SPLIT_MULTIPOINT:ON,PRESERVE_EMPTY_NUMBERS:ON,\
RETURN_LINKAGES:ON"
  • Using gvtest:
./openev/gvtest -ogr=/path/to/ENC_ROOT/US3NY01M/US3NY01M.000 
  • Using s52test:
("make s52test" won't compile: problem finding S57_ogr*()?)
(s52test.conf will need ENC path adjusted)
./openev/contrib/S52/s52testdyn


  • [??] Using pymod/openev.py:
(Open .000 file, load all layers)
export PYTHONPATH="/usr/lib/python2.4/site-packages/gtk-1.2"
./openev/pymod/openev.py

GRASS S-52 interface for rendering S-57 data

  • TODO
  • build little command line app to output coloring and layer order info which can be fed to d.vect et al?

QGIS S-52 plugin for viewing S-57 data

  • TODO
  • anyone have ideas?