[659] | 1 | .. _kernel-mapserver: |
---|
| 2 | |
---|
| 3 | Optional MapServer support |
---|
| 4 | ========================== |
---|
| 5 | |
---|
| 6 | Processing geospatial data using WPS Services is usefull. Publishing their results directly as WMS, WFS or WCS ressources is even more convenient. This is possible since `ZOO-Project 1.3 <http://zoo-project.org>`__ using the **optional MapServer support**. The latter thus allows for automatic publication of WPS Service output as WMS/WFS or WCS using a :ref:`kernel_index` specific internal mechanism which is detailed in this section. |
---|
| 7 | |
---|
| 8 | |
---|
| 9 | .. note:: |
---|
| 10 | |
---|
| 11 | |mapserver| `MapServer <http://mapserver.org>`__ is an open source WMS/WFS/WCS server. Learn more by reading its `documentation <http://mapserver.org/documentation.html>`__. |
---|
| 12 | |
---|
| 13 | |
---|
| 14 | .. |mapserver| image:: ../_static/mapserver.png |
---|
| 15 | :height: 74px |
---|
| 16 | :width: 74px |
---|
| 17 | :scale: 50% |
---|
| 18 | :alt: MapServer logo |
---|
| 19 | |
---|
| 20 | |
---|
| 21 | How does it work ? |
---|
| 22 | ------------------------- |
---|
| 23 | |
---|
| 24 | If a request with ``mimeType=image/png`` is sent to :ref:`kernel_index`, the latter will detect that the *useMapServer* option is set to true an it will automatically: |
---|
| 25 | |
---|
| 26 | * Execute the service using the *<Default>* block definition (these values must be understood by `GDAL <http:/gdal.org>`__) |
---|
| 27 | * Store the resulting output on disk (in the ``[main]`` > ``dataPath`` directory) |
---|
| 28 | * Write a `mapfile <http://mapserver.org/mapfile/index.html>`__ (in the ``[main]`` > ``dataPath`` directory) using the `MapServer <http://mapserver.org>`__ C-API (this sets up both WMS and WFS services). |
---|
| 29 | |
---|
| 30 | Existing WPS Services source code doesn't need to be modified once the MapServer support is activated. It only takes to edit their respective :ref:`services-zcfg` files accordingly. |
---|
| 31 | |
---|
| 32 | .. note:: In case of a vector data source output, both WMS and WFS configuration are included by default in the resulting mapfile. |
---|
| 33 | |
---|
| 34 | .. note:: In case of a raster data source output, both WMS and WCS configuration are included by default in the resulting mapfile. |
---|
| 35 | |
---|
| 36 | Depending on the requests, ZOO-Kernel is able to return a location header and different request types: |
---|
| 37 | |
---|
| 38 | * ResponseDocument=XXXX@asReference=true |
---|
| 39 | |
---|
| 40 | In this case, ZOO-Kernel will return the GetMap/GetFeature/GetCoverage request as KVP in the *href* of the result. |
---|
| 41 | |
---|
| 42 | * ResponseDocument=XXXX@asReference=false |
---|
| 43 | |
---|
| 44 | In this case, ZOO-Kernel will return the result of the GetMap/GetFeature/GetCoverage request as KVP of the href used in the previous case. |
---|
| 45 | |
---|
| 46 | * RawDataOutput=XXXX@asReference=true/false |
---|
| 47 | |
---|
| 48 | In this case, ZOO-Kernel will return the GetMap/GetFeature/GetCoverage request as KVP in a specific location header, which implies that the browser is supposed to request MapServer directly. |
---|
| 49 | |
---|
| 50 | Whatever the default output *mimeType* returned by a WPS service is, it is used if the *useMapserver* option is found at runtime. As an example, if ``<Default>`` and ``<Supported>`` blocks are found in the ZOO Service configuration file as shown bellow, this means that the service returns GML 3.1.0 features by default. |
---|
| 51 | |
---|
| 52 | .. code-block:: guess |
---|
| 53 | |
---|
| 54 | <Default> |
---|
| 55 | mimeType = text/xml |
---|
| 56 | encoding = UTF-8 |
---|
| 57 | schema = http://schemas.opengis.net/gml/3.1.0/base/feature.xsd |
---|
| 58 | </Default> |
---|
| 59 | <Supported> |
---|
| 60 | mimeType = image/png |
---|
| 61 | useMapserver = true |
---|
| 62 | </Supported> |
---|
| 63 | |
---|
| 64 | Installation and configuration |
---|
| 65 | ------------------------------ |
---|
| 66 | |
---|
| 67 | Follow the step described bellow in order to activate the ZOO-Project optional MapServer support. |
---|
| 68 | |
---|
| 69 | Prerequisites |
---|
| 70 | ............. |
---|
| 71 | |
---|
| 72 | * latest `ZOO-Kernel <http://zoo-project.org/trac/browser/trunk/zoo-project/zoo-kernel>`__ trunk version |
---|
| 73 | * `MapServer <http://mapserver/org>`__ version >= 6.0.1 |
---|
| 74 | |
---|
| 75 | First download the lastest zoo-kernel by checking out the svn. Use the following command from do the directory where your previously checked out (in this example we will use ``<PREV_SVN_CO>`` to design this directory). |
---|
| 76 | |
---|
| 77 | .. code-block:: guess |
---|
| 78 | |
---|
| 79 | cd <PREV_SVN_CO> |
---|
| 80 | svn checkout http://svn.zoo-project.org/svn/trunk/zoo-kernel zoo-kernel-ms |
---|
| 81 | |
---|
| 82 | Then uncompress the MapServer archive (ie. ``mapserver-6.0.1.tar.bz2``) into ``/tmp/zoo-ms-src``, and compile it using the following command: |
---|
| 83 | |
---|
| 84 | .. code-block:: guess |
---|
| 85 | |
---|
| 86 | cd /tmp/zoo-ms-src/mapserver-6.0.1 |
---|
| 87 | ./configure --with-ogr=/usr/bin/gdal-config --with-gdal=/usr/bin/gdal-config \ |
---|
| 88 | --with-proj --with-curl --with-sos --with-wfsclient --with-wmsclient \ |
---|
| 89 | --with-wcs --with-wfs --with-postgis --with-kml=yes --with-geos \ |
---|
| 90 | --with-xml --with-xslt --with-threads --with-cairo |
---|
| 91 | make |
---|
| 92 | cp mapserv /usr/lib/cgi-bin |
---|
| 93 | |
---|
| 94 | Once done, compile ZOO-Kernel with MapServer support from the ``<PREV_SVN_CO>`` directory, using the following command: |
---|
| 95 | |
---|
| 96 | .. code-block:: guess |
---|
| 97 | |
---|
| 98 | cd zoo-kernel-ms |
---|
| 99 | autoconf |
---|
| 100 | ./configure --with-python --with-mapserver=/tmp/zoo-ms-src/mapserver-6.0.1 |
---|
| 101 | make |
---|
| 102 | |
---|
| 103 | You can then copy the new ZOO-Kernel to ``/usr/lib/cgi-bin`` directory, as follow: |
---|
| 104 | |
---|
| 105 | .. code-block:: guess |
---|
| 106 | |
---|
| 107 | cp zoo_loader.cgi /usr/lib/cgi-bin |
---|
| 108 | |
---|
| 109 | |
---|
| 110 | Main configuration file |
---|
| 111 | ........................ |
---|
| 112 | |
---|
| 113 | Open and edit the ``/usr/lib/cgi-bin/main.cfg`` file, by adding the following content in the ``[main]`` section: |
---|
| 114 | |
---|
| 115 | .. code-block:: guess |
---|
| 116 | |
---|
| 117 | dataPath = /var/www/temp/ |
---|
| 118 | mapserverAddress=http://localhost/cgi-bin/mapserv |
---|
| 119 | |
---|
| 120 | The ``dataPath`` directory is mandatory and must belong to the Apache user. |
---|
| 121 | |
---|
| 122 | .. code-block:: guess |
---|
| 123 | |
---|
| 124 | mkdir /var/www/temp/ |
---|
| 125 | chown -r apache:apache /var/www/temp/ |
---|
| 126 | |
---|
| 127 | A ``symbols.sym`` file is required in this directory. Create it and add the following content in it: |
---|
| 128 | |
---|
| 129 | .. code-block:: guess |
---|
| 130 | |
---|
| 131 | SYMBOLSET |
---|
| 132 | SYMBOL |
---|
| 133 | NAME "circle" |
---|
| 134 | TYPE ellipse |
---|
| 135 | FILLED true |
---|
| 136 | POINTS |
---|
| 137 | 1 1 |
---|
| 138 | END |
---|
| 139 | END |
---|
| 140 | END |
---|
| 141 | |
---|
| 142 | .. note:: |
---|
| 143 | Only one symbol definition is required (with any name) for the WMS service output. |
---|
| 144 | |
---|
| 145 | The ZOO-Project optional MapServer support is activated at this step. Don't forget to add the ``mapserverAddress`` and ``msOgcVersion`` parameters to the ``main.cfg`` file in order to to specify the path to MapServer and the OGC WebService version used by the Services. |
---|
| 146 | |
---|
| 147 | .. code-block:: guess |
---|
| 148 | mapserverAddress=http://localhost/cgi-bin/mapserv.cgi |
---|
| 149 | msOgcVersion=1.0.0 |
---|
| 150 | |
---|
| 151 | .. warning:: |
---|
| 152 | ZOO-kernel will segfault (checking ``NULL`` value should correct this behavior) if the ``mapserverAddress`` parameter is not found |
---|
| 153 | |
---|
| 154 | |
---|
| 155 | Service configuration file |
---|
| 156 | ............................ |
---|
| 157 | |
---|
| 158 | useMapserver |
---|
| 159 | ************* |
---|
| 160 | |
---|
| 161 | In order to activate the MapServer WMS/WFS/WCS output for a specific service, the ``useMapserver`` parameter must be added to the ``<Default>`` or ``<Supported>`` blocks of the Service `services-zcfg`. If ``useMapserver=true``, this means that the output result of the Service is a GDAL compatible datasource and that you want it to be automatically published by MapServer as WMS,WFS or WCS. |
---|
| 162 | |
---|
| 163 | When the useMapserver option is used in a ``<Default>`` or ``<Supported>`` block, then you have to know what are the corresponding mimeType: |
---|
| 164 | |
---|
| 165 | * text/xml: Implies that the output data will be accessible through a WFS GetFeature request (default protocol version 1.1.0) |
---|
| 166 | * image/tiff: Implies that the output data will be accessible through a WCS GetCoverage request (default protocol version 2.0.0) |
---|
| 167 | * any other mimeType coupled with useMapserver option: Implies that the output data will be accessible through a WMS GetMap request (default protocol version 1.3.0). You can check the supported output mimeType by sending a GetCapabilities request to MapServer. |
---|
| 168 | |
---|
| 169 | |
---|
| 170 | You get the same optional parameter ``msOgcVersion`` as for the ``main.cfg``. This will specify that this is the specific protocol version the service want to use (so you may set also locally to service rather than globally). |
---|
| 171 | |
---|
| 172 | Styling |
---|
| 173 | ************* |
---|
| 174 | |
---|
| 175 | The optional ``msStyle`` parameter can also be used to define a custom MapServer style block (used for vector datasource only), as follow: |
---|
| 176 | |
---|
| 177 | .. code-block:: guess |
---|
| 178 | |
---|
| 179 | msStyle = STYLE COLOR 125 0 105 OUTLINECOLOR 0 0 0 WIDTH 3 END |
---|
| 180 | |
---|
| 181 | If a WPS service outputs a one band raster file, then it is possible to add a ``msClassify`` parameter and set it to ``true`` in the output ComplexData ``<Default>`` or ``<Supported>`` nodes of its ``zcfg`` file. This allows ZOO-Kernel to use its own default style definitions in order to classify the raster using equivalent intervals. |
---|
| 182 | |
---|
| 183 | .. code-block:: guess |
---|
| 184 | |
---|
| 185 | msClassify = .... |
---|
| 186 | |
---|
| 187 | Example |
---|
| 188 | ************** |
---|
| 189 | |
---|
| 190 | An example :ref:`services-zcfg` file configured for the optional MapServer support is shown bellow: |
---|
| 191 | |
---|
| 192 | .. code-block:: guess |
---|
| 193 | |
---|
| 194 | <Default> |
---|
| 195 | mimeType = text/xml |
---|
| 196 | encoding = UTF-8 |
---|
| 197 | schema = http://schemas.opengis.net/gml/3.1.0/base/feature.xsd |
---|
| 198 | useMapserver = true |
---|
| 199 | </Default> |
---|
| 200 | <Supported> |
---|
| 201 | mimeType = image/png |
---|
| 202 | useMapserver = true |
---|
| 203 | asReference = true |
---|
| 204 | msStyle = STYLE COLOR 125 0 105 OUTLINECOLOR 0 0 0 WIDTH 3 END |
---|
| 205 | </Supported> |
---|
| 206 | <Supported> |
---|
| 207 | mimeType = application/vnd.google-earth.kmz |
---|
| 208 | useMapserver = true |
---|
| 209 | asReference = true |
---|
| 210 | msStyle = STYLE COLOR 125 0 105 OUTLINECOLOR 0 0 0 WIDTH 3 END |
---|
| 211 | </Supported> |
---|
| 212 | <Supported> |
---|
| 213 | mimeType = image/tif |
---|
| 214 | useMapserver = true |
---|
| 215 | asReference = true |
---|
| 216 | msClassify = .... |
---|
| 217 | </Supported> |
---|
| 218 | |
---|
| 219 | In this example, the default output ``mimeType`` is ``image/png``, so a WMS GetMap request will be returned, or the resulting ``image/tiff`` will be returned as WCS GetCoverage request. |
---|
| 220 | |
---|
| 221 | |
---|
| 222 | Test requests |
---|
| 223 | -------------- |
---|
| 224 | |
---|
| 225 | The optional MapServer support can be tested using any service. The |
---|
| 226 | simple *HelloPy* Service is used in the following example requests. |
---|
| 227 | |
---|
| 228 | .. note:: |
---|
| 229 | The following examples require a zip file containing a Shapefile (http://localhost/data/data.zip) and a tif file (http://localhost/data/demo.tif) |
---|
| 230 | |
---|
| 231 | Accessing a remote Zipped Shapefile as WFS GetFeatures Request: |
---|
| 232 | |
---|
| 233 | .. code-block:: guess |
---|
| 234 | |
---|
| 235 | http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.zip&ResponseDocument=Result@asReference=true@mimetype=text/xml |
---|
| 236 | |
---|
| 237 | Accessing a remote Zipped Shapefile as WMS GetMap Request: |
---|
| 238 | |
---|
| 239 | .. code-block:: guess |
---|
| 240 | |
---|
| 241 | http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.zip&ResponseDocument=Result@asReference=true@mimetype=image/png |
---|
| 242 | |
---|
| 243 | Accessing a remote tiff as WMS GetMap Request: |
---|
| 244 | |
---|
| 245 | .. code-block:: guess |
---|
| 246 | |
---|
| 247 | http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.tiff&ResponseDocument=Result@asReference=true@mimetype=image/png |
---|
| 248 | |
---|
| 249 | Accessing a remote tiff as WCS GetMap Request: |
---|
| 250 | |
---|
| 251 | .. code-block:: guess |
---|
| 252 | |
---|
| 253 | http://localhost/cgi-bin/zoo_loader.cgi?request=Execute&service=WPS&version=1.0.0&Identifier=HelloPy&DataInputs=a=Reference@xlink:href=http://localhost/data/data.tiff&ResponseDocument=Result@asReference=true@mimetype=image/tiff |
---|
| 254 | |
---|
| 255 | |
---|