You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

GeoServer is an open source server for sharing geospatial data. It is often used to publish shapefiles and PostGIS tables (Vector data), ArcGrid and GeoTiff (Raster data). Moreover, it also allows for configuration of (cascading) remote WMS. Deltares maintains its own instance of GeoServer here. Data layers from GeoServer can be exposed in via WMS/WFS in many standard formats for subsequent public use. As NetCDF data format is widely used by the scientific community, ingesting that data through GeoServer tools represents a valid and useful alternative of data dissemination. Additional information on NetCDF data format can be found here.

This tutorial refers to GeoServer <stable> version 2.8.2 on Windows. Since the stable version of GeoServer does not allow ingestion of NetCDF as input Coverage Format, Geoserver Extension can be installed from http://geoserver.org/release/2.8.x/. Once the extension has been downloaded, the .jar files have to be copied to GeoServer 2.8.2\webapps\geoserver\WEB-INF\lib\. For any of the following steps, the easiest way to work with NetCDF Coverage input is to use the user interface provided by GeoServer installation. However, for reasons of efficiency and process automation a client might prefer to use the REST API GeoServer provides. The REST configuration allows you to work with bindings from various programming languages or simply with cURL command line tool. Python bindings are also available from gsconfig.py, but there is no implementation of working with NetCDF files yet. 

Adding a workspace

This is the first step before adding any resource, so that your project is kept tidy and structured. That has to be done prior to the store creation for our NetCDF resources.

GeoServer User interface

First of all, create and add a workspace.

RESTful interface

Add a workspace called ws.

Python | gsconfig.py
import os
from geoserver.catalog import Catalog

geoserverRestURL = "http://localhost:8090/geoserver/rest/"
username = "admin" 
password = "geoserver"
workspace = 'ws'

cat = Catalog(geoserverRestURL, username, password)
ws = cat.create_workspace(workspace, workspace)

# # delete workspace
# ws = cat.get_workspace(workspace)
# cat.delete(ws) 
cmd | cURL
curl -u admin:geoserver -v -POST -H "Content-type: text/xml" -d "<workspace><name>ws</name></workspace>" "http://localhost:8090/geoserver/rest/workspaces"
Python | requests
import os
import requests

workspace = 'ws'

headers_xml = {'content-type': 'text/xml'}
headers_zip = {'content-type': 'application/zip'}
headers_sld = {'content-type': 'application/vnd.ogc.sld+xml'}

r_create_workspace = requests.post("http://localhost:8090/geoserver/rest/workspaces", 
    auth=('admin', 'geoserver'), 
    data='<workspace><name>' + workspace + '</name></workspace>',
    headers=headers_xml) 

Adding a NetCDF coverage store

At the moment of writing this tutorial, the NetCDF plugin supports datasets where each variable’s axis is identified by an independent coordinate variable, therefore two dimensional non-independent latitude-longitude coordinate variables aren’t currently supported.

GeoServer User interface

Once the workspace is created, you can add a NetCDF data store by following instructions and requirements on this page.

RESTful interface

Add a store called st. If you have a GeoTIFF, using Python bindings, cat.create_coveragestore() is sufficient. As Python bindings do not support adding NetCDF data stores yet, cURL commands and Python requests are shown only.

cmd | cURL
REM Coordinate reference system CRS can be added as well, although not compulsory, under nativeCRS tags. Example: ...<nativeCRS>GEOGCS...</nativeCRS><srs>EPSG:4326</srs>...
curl -u admin:geoserver -v -POST -H "Content-type: text/xml" -d "<coverageStore><name>st</name><workspace>ws</workspace><enabled>true</enable><type>NetCDF</type><url>d:\\YOURPATH\\data.nc</url></coverageStore>" "http://localhost:8090/geoserver/rest/workspaces/ws/coveragestores?configure=all"
Python | requests
coveragestore = 'st'

r_create_coveragestore = requests.post('http://localhost:8090/geoserver/rest/workspaces/ws/coveragestores?configure=all', 
    auth=('admin', 'geoserver'), 
    data='<coverageStore><name>' + coveragestore + '</name><workspace>' + workspace + "</workspace><enabled>true</enabled><type>NetCDF</type><url>" + "d:\\YOURPATH\\data.nc" + '</url></coverageStore>',
    headers=headers_xml)

Adding a layer

Before creating a layer, the .nc file has to be zipped so that it can be transferred to a Web server via application/zip content type. Later on, the zip file can be deleted.

import zipfile

# zip file
zfile = 'd:\\YOURPATH\\data.zip'
output = zipfile.ZipFile(zfile, 'w')
output.write('d:\\YOURPATH\\data.nc', coveragestore + '.nc', zipfile.ZIP_DEFLATED )
output.close()

 

ToBeContinued.

 

 

  • No labels