WMS Server
This update exposes Weave map engines as a WMS service. The bundle can also be used to create URL's that can be called from external applications to create custom map images. The bundle supports additional parameters beyond those required by WMS and allows for more customised map output.
A new configuration describes a map context that is similar to that which is setup for a map view in a client configuration. It is generated in a similar way to the maps that are included in a BIRT report.
There can be multiple map context setups, that each describe different map setups.
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="urn:com.cohga.server.config#1.0" xmlns:wmsserver="urn:com.cohga.server.wms#1.0"> <wmsserver:context id="test"> <mapengine id="mapengine.raster"> <layer>satellite</layer> </mapengine> <mapengine id="mapengine.vector"> <layer>property</layer> <layer>road</layer> <layer>suburb</layer> <layer>mccbound</layer> </mapengine> <mapengine id="mapengine.parks" opacity="0.75"> <layer>Reserve Images</layer> </mapengine> </wmsserver:context> </config>
The above example exposes a new WMS service at /weave/wms/test
that will contain the layers listed (and only those layers).
When the WMS client tries to draw the map, Weave will use the three map engines to generate the individual images and combine them into a single map image to return to the client.
This service should be supported in any WMS compliant client.
Complete option list
Name | Description | WMS Compliant |
---|---|---|
srs | Coordinate reference system of the coordinates specified in the URL | Y |
width | Width of generated image in pixels | Y |
height | Height of generated image in pixels | Y |
format | Output format of the generated image | Y |
bgcolor | Background colour | Y |
transparent | true if transparent images should be created, false if opaque images should be generated | Y |
bbox | Comma separated minx, miny, maxx and maxy of the generated image | Y |
layers | List of layers to draw, all layers will be drawn if not set at all, and no layers drawn if layers is set to no value | Y |
exceptions | Method used to return errors to the caller | |
exceptionmessage | The error message to draw on the map if an image can not be generated | |
size | Comma separated width and height of generated image in pixels | |
dpi | DPI of generated image, to ensure scale dependencies are calculated correctly | |
minx | Left X coordinate | |
miny | Bottom Y coordinate | |
maxx | Right X Coordinate | |
maxy | Top Y coordinate | |
x | Center X coordinate | |
y | Center Y coordinate | |
center | Comma separated X and Y coordinate. Both | |
scale | Scale to generate map at | |
entity | Entity to use to determine map extent and draw highlight | |
ids | Identifiers of entities to zoom to and highlight | |
filter | Filters to be applied to 'ids' before calculating the extent. For use if external system uses different id's for the underlying GIS data | |
buffer | Amount to scale entity extent by to calculate extent, e.g. 1.2 to place a 20% buffer around the entity bounds | |
minscale | Minimum scale to zoom to when zooming to an entity | |
highlight | false if the entity highlight should not be drawn, true if it should be drawn | |
hlcolor | Vector highlight colour | |
mcolor | Marker highlight colour. Should be blue, brown, dark, green, orange, purple, red, silver or yellow. The default is green. The mcolor 'dark' is a dark grey. |
You must include a parameter or parameters in the URL to set or calculate the map bounding box, this can not be set in the context.
When specifying the map bounding box setting minx, miny, maxx and maxy is the same as specifying just bbox, and bbox will take precedence if both are present.
If a bounding box is set it will take precedence over setting the map extent based on a center x,y and scale.
If a center x, y and scale are set they will take precedence over the entity and ids.
Setting size will take precedence over setting width and height if both are present.
The above settings will generally be supplied by the WMS client, and defaults can be set in the context
.
Generally these will all be set by the WMS client when sending WMS requests to the Weave server and do not need to be specified in the configuration, however, you may want to set these values in the configuration if you're intending on constructing and using the URL's from another application and you want to simplify the URL that the other application needs to use.
For example, if you have an application that you want to always generate an 800x800 PNG image with a light blue background then you could use the URL:/weave/wms/test?width=800&height=800&bgcolor=0x7f7fff&format=png&bbox=140,-36,141,-35
or you could set width
, height
, format
and bgcolor
in the context and use the following URL instead/weave/wms/test?bbox=140,-36,141,-35
This allows you to provide a simplified URL to the application provider while specifying the fixed settings yourself, it all depends upon the requirements of the other application and how much of it can be pre-set.
Basic Context Example Requests
These example assume the above example map context
/weave/wms/test?maxx=355971&maxy=5831675&minx=323098&miny=5807358&width=800&height=600&format=png32 /weave/wms/test?bbox=323098,580735,355971,5831675&size=800,600&format=png32
/weave/wms/test?x=355971&y=5831675&scale=5000&width=800&height=600&format=png32 /weave/wms/test?center=355971,5831675&scale=5000&size=800,600&format=png32
/weave/wms/test?entity=property&ids=242765&minscale=2500&buffer=1.2&width=800&height=600&format=png32
/weave/wms/test?entity=property&ids=242765&minscale=2500&buffer=1.2&highlight=false&width=800&height=600&format=png32
/weave/wms/test?x=355971&y=5831675&scale=5000&entity=property&ids=242765&minscale=2500&buffer=1.2&width=800&height=600&format=png32
Extended Context Example Requests
The following examples assume the following map context and are the equivalent of the above.
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="urn:com.cohga.server.config#1.0" xmlns:wmsserver="urn:com.cohga.server.wms#1.0"> <wmsserver:context id="test"> <minscale>2500</minscale> <buffer>1.2</buffer> <width>800</width> <height>600</height> <format>png32</format> <entity>property</entity> <mapengine id="mapengine.raster"> <layer>satellite</layer> </mapengine> <mapengine id="mapengine.vector"> <layer>property</layer> <layer>road</layer> <layer>suburb</layer> <layer>mccbound</layer> </mapengine> <mapengine id="mapengine.parks" opacity="0.75"> <layer>Reserve Images</layer> </mapengine> </wmsserver:context> </config>
/weave/wms/test?maxx=355971&maxy=5831675&minx=323098&miny=5807358 /weave/wms/test?bbox=323098,580735,355971,5831675
/weave/wms/test?x=355971&y=5831675&scale=5000 /weave/wms/test?center=355971,5831675&scale=5000 /weave/wms/test?center=337649.188,5818856.678&scale=1000&srs=EPSG:28355 /weave/wms/test?center=145.1568367,-37.7632155&scale=5000&srs=EPSG:4283
/weave/wms/test?entity=property&ids=242765
/weave/wms/test?entity=roads&ids=AS14124&minscale=5000
/weave/wms/test?entity=roads&ids=AS14124&minscale=5000&layers=road,property
The last example specifies the layer as road
and property
because there's only one road
and property
layer in all of the map engines. If the layer id was not unique then the layer can be specified by preceding it with the map engine id and a |, e.g. mapengine.vector|roads
Generated image showing highlighted property
Using multiple contexts allows you to setup different maps depending on the target use.