Cartografia S-57 sobre WMS

De ChuWiki

Introducción[editar]

Veamos una pequeña introducción a la cartografía S-57 y cómo instalarla en geoserver para ofrecerla por WMS.

La cartografía S-57 es cartografía náutica. Contiene montón de información sobre cables submarinos, boyas, faros, puertos, profundidades, zonas donde se puede anclar, de pesca, rocas, etc, etc.

Los ficheros de esta cartografía tienen extensión .000. Cada fichero puede tener actualizaciones con extensiones .001, .002, etc. El nombre de los ficheros sigue la siguiente nomenclatura AABCCCCC.000. Las dos primeras letras AA representan el país que produce los mapas, para España será ES. La B es el propósito para ese mapa concreto, un número del 1 al 6, que de alguna forma determina la escala

1  General  <1:1 499 999 
2  Arrumbamiento  1:350 000 – 1:1 499 999 
3  Costera  1:90 000   – 1:349 999 
4  Aproche  1:22 000   – 1:89 999 
5  Puerto  1:4 000     – 1:21 999 
6  Amarre  > 1:4 000 

Finalmente, CCCCC es un código que indica la zona del mapa. Un ejemplo de nombre de fichero puede ser ES30044B.000

Visualización de los datos[editar]

En los ficheros de la cartografía S-57 sólo vienen datos (posiciones de los elementos, curvas de nivel, atributos de los mismos, etc). En http://www.s-57.com/ puedes ver todos los posibles tipos de datos y atributos que vienen en los ficheros de cartografía S-57.

El cómo dibujar esos datos viene especificado en la norma S-52. En ella se definen colores, tipos de líneas y símbolos. En este documento http://www.iho.int/iho_pubs/standard/S-52/PresLib_e3.4_Part_I_Addendum.pdf tienes la definición de los símbolos. Es, por tanto, cosa de la aplicación que hagamos el dibujar correctamente los datos contenidos en la cartografía S-57.

La aplicación libre OpenCPN http://opencpn.org/ocpn/ es capaz de dibujarnos la cartografía de forma estándar. La aplicación de pago PolarView (con 30 días de prueba gratis) también lo hace http://www.polarnavy.com/main/prod1 . Esta última es especialmente interesante cuando estamos desarrollando nuestra propia aplicación porque podemos pedir en cada punto del mapa la información completa de todos los objetos S-57 que hay en ese punto, sirviendo de ejemplo o como forma fácil de consultar el contenido del fichero .000

Dentro de OpenCPN tenemos un png con todos los símbolos https://github.com/OpenCPN/OpenCPN/blob/master/data/s57data/rastersymbols-day.png que podemos usar (leete primero la licencia https://github.com/OpenCPN/OpenCPN/blob/master/Findgps.cmake )

Pasar la cartografía a GeoServer[editar]

GeoServer no entiene este formato de datos. Hubo un proyecto de plugin para hacerlo, pero se abandonó. La única posibilidad que tenemos en convertir esta cartografía a un formato que entienda GeoServer.


Conversión de formato : GDAL[editar]

GDAL http://www.gdal.org/ es una librería que entiende y convierte entre montones de formatos de cartografía. Podemos con esta librería convertir S-57 es Shapfiles o en PostGis, formatos que sí entiende GeoServer. Los Shapefiles no soportan todas las características que tiene S-57, así que aquí se opta por usar esta opción. Una vez instalado GDAL y puestos sus ejecutables en el path, el siguiente comando nos hace la conversión

ogr2ogr -f "PostgreSQL" PG:"dbname=databasename host=addr port=5432 user=x password=y" ES30044B.000

donde

  • ogr2ogr es el ejecutable de conversión
  • -f "PostgreSQL" indica el formato de destino, es decir, una base de datos PosgreSQL con PostGIS.
  • PG:"..." son los datos de conexión a la base de datos.
    • databasename es el nombre de la base de datos donde queremos meter la cartografía, con PostGIS instalado. Debe estar previamente creada.
    • addr es el nombre del host (localhost por defecto)
    • 5432 el puerto de PostgreSQL
    • x el usuario de la base de datos
    • y la password
  • ES30044B.000 el nombre del fichero con la cartografía S-57

Si sobre la misma base de datos queremos añadir más datos de cartografía S-57 (más ficheros de extensión .000), el comando es el mismo pero con las opciones -update -append

ogr2ogr -update -append -f "PostgreSQL" ....

Una vez ejecutado el comando, si todo va bien, nos creará un montón de tablas de nombres estilo DEPARE, BUAARE, LNDARE, LIGHTS, ... cada una con uno de los tipos de datos.

Publicación en GeoServer[editar]

Una vez portados los datos, el mecanismo de publicación en GeoServer es como el de cualquier otro tipo de cartografía en PostGIS. Creamos desde la ventana de administración de GeoServer un nuevo almacén de datos PostGis, pasando los parámetros de conexión. Esto nos mostrará todas las posibles capas que podemos publicar. Ahora es un poco rollo, porque hay que ir una a una publicándola. Como relleno rápido del mapa, las dos capas interesantes son LNDARE, que es la tierra, y DEPARE, que es el mar con sus líneas de nivel. Luego es cuestión de ir añadiendo aquellas capas que tengan los datos que nos interesen (LIGTHS son las luces de los faros, BUAARE son áreas construidas (ciudades), etc, etc).

Otro gran trabajo adicional es la creación de ficheros SLD de GeoServer para cada capa, de forma que se muestre con el estándar. Por ejemplo, DEPARE son las líneas de nivel del mar. Los colores del estándar son más o menos estos

  • Menos de 0 metros de profundidad (tierra/playas, etc) van en verde #00ba85
  • Entre 0 metros y 30 metros de profundidad (aguas poco profundas) van en azul oscuro #26c2ff
  • Más de 30 metros de pofundidad, en azul claro verdoso #ccf5de

(Los valores y colores son los que he visto reproducidos con PolarView http://www.polarnavy.com/main/prod1

Un par de imágenes del resultado con solo las capas mencionadas anteriormente puede ser la siguiente (OpenLayers y GeoServer, con WMS)