Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

As of Weave 2.5, there is a built-in map engine that is able to generate map images based on spatial data that has been registered using a Spatial Engine.

The configuration for the Weave map engine consists of two parts, the first part defines what data will be made available to be drawn by the map engine, and the second part determines how that data will be drawn.

Note

Currently, all of the data that 's is drawn by a Weave map engine must come from the same spatial engine, but you can have multiple Weave map engines configured.

Note

And the The map engine also only supports vector data, it does not currently support raster data.

Namespace

urn:com.cohga.server.map.weave#1.0

Tags

mapengine

Properties

Name

Type

Required

Default

Description

id

string

yes


Unique identifier for this map engine

The namespace used for the Weave map engine is com.cohga.server.map.weave.

...

languagexml
titleExample Weave map engine

spatialengine

string

yes


The spatial engine that will be providing the data

format

string

yes


What image format the map engine will support

layers

#layer

yes


A list of the layers that this map engine will provide

styles

#style

yes


A list of the styles that can be used to display a layer.

Alternatively this can point to an external SLD file

legend

#legend

no

Alter the legend display

timeout

integer

no

10

Number of second before drawing of map will stop

antialiasing

boolean

no

true

Should the rendering use antialiasing

limit

integer

no

Limit the number of features that are drawn on the map to help reduce the time to render the image

maxerrorcount

integer

no

10

Maximum number of rendering errors that can occur before the rendering is aborted

layer

Properties

Name

Type

Cardinality

Description

id

string

1..1

The unique id of the layer

label

string

1..1

The user visible label for the label

layer

string

1..1

The layer, within the spatial engine, that this layer will use

style

#style

1..1

The style that this layer should be displayed with

minscale

number

0..1

The minimum scale the layer should be rendered at

maxscale

number

0..1

The maximum scale the layer should be rendered at

style

Properties

Name

Type

Cardinality

Description

id

string

1..1

The unique id for this style, which can then be referenced by a layer

type

string

0..1

What geometry type does this style represent? point, line or polygon.

This is only used if the style is defined inline and not required if this style references an SLD file

Notes

See the section below on inline styles for information on how the styles are defined.

legend

Alter the display of the legend

Properties

None

Sub-tags

Name

Type

Cardinality

Description

remove

#remove

0..1

Layers to remove.

Layers listed here will not display.

layer

#layer

0..n

Layer to include.

Only layers listed here will display

Content

None

remove

Properties

None

Sub-tags

Name

Type

Cardinality

layer

#layer

0..n

Content

None

layer

Properties

None

Content

The name of the layer, or a comma separated list of layer names. Also support * for wildcards.

Sub-tags

None

Examples

Example Weave map engine
Code Block
languagexml
<?xml version="1.0" encoding="UTF-8"?>

<config xmlns="urn:com.cohga.server.config#1.0" xmlns:weave="urn:com.cohga.server.map.weave#1.0">

	<weave:mapengine id="vector">
		<spatialengine>gis</spatialengine>
		<format>image/png32</format>
		<layers>
			<layer id="contours01" label="Contours 1m" layer="GIS.CONTOURS_01M" style="contour"/>
			<layer id="contours02" label="Contours 2m" layer="GIS.CONTOURS_02M" style="contour"/>
			<layer id="contours05" label="Contours 5m" layer="GIS.CONTOURS_05M" style="contour"/>
			<layer id="contours10" label="Contours 10m" layer="GIS.CONTOURS_10M" style="contour"/>
		</layers>
		<styles>
			<style id="contour">
				<type>line</type>
				<stroke-color>#853111</stroke-color>
				<stroke-width>2</stroke-width>
			</style>
		</styles>
		<legend>
			<!-- remove some of the layers from the legend -->
			<remove>
				<layer>contours01</layer>
				<layer>contours02</layer>
				<layer>contours05</layer>
			</remove>
			<!-- an alternatove to the above remove tag here would be this, since it lists the only layers that should be in the legend
			<layer>contours10</layer>
			-->
		</legend>
	</weave:mapengine>

</config>

...

You can specify one or more filters for each layer that can be used to refine what data is retrieved from the underlying table, e.g.

Filtering data using CQL
Code Block
languagexmltitleFiltering data using CQL
<layer id="active_incidents" label="Active Incidents" layer="GIS.INCIDENTS" style="incidents">
	<filter>STATUS = 'ACTIVE'</filter>
</layer>
<layer id="inactive_incidents" label="Inactive Incidents" layer="GIS.INCIDENTS" style="incidents">
	<filter><![CDATA[STATUS <> 'ACTIVE']]></filter>
</layer>

Here we've split a single spatial table into two layers, not note the use of the <![CDATA[...]]> to enclose the second filter, because it contains special XML characters (< and >).

...

The filters are specified using the CQL query language, which is similar to SQL. 


The styles section can define multiple named styles, which are then referenced using the style attribute of the individual layer in the layers section.

The example above uses a simple inline style definition that uses CSS like attributes to define how the vector data should be drawn. It's also possible to use an external SLD (Styled Layer Descriptor) file to describe how the layer should be displayed , if you require more advanced styling. In this case, you can just reference the SLD file using the layer style attribute, e.g.

...

...

Using an external SLD file to style a layer

...

Code Block
languagexml
<layer id="contours01" label="Contours 1m" layer="GIS.CONTOURS_01M" style="sld\contours.sld"/>

In this example there should be a file locates located at weave\platform\workspace\sld\contours.sld that contains the XML definition for the style.

Example SLD file
Code Block
languagexmltitleExample SLD file
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>
    <Name>Countor<<Name>Contour</Name>
    <UserStyle>
      <Title>Contour</Title>
      <FeatureTypeStyle>
        <Rule>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#853111</CssParameter>
              <CssParameter name="stroke-width">2</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

This SLD file does not do much more that than the inline style shown in the first example, but this page isn't a tutorial on SLD.

Alternatively, when referring to an external SLD file it can also be specified in the style itself, rather than the layer, so the layer can reference one of the inline styles, and the style then points to the external SLD file, e.g.

Code Block
languagexml
<styles>
			<style id="contour">sld\contours.sld</style>
		</styles>

This way if you use the same SLD file for multiple layers you can just reference a single inline style and have that style refer to the SLD file.

...

 When specifying a style within the Weave map engine config directly you need to specify and an id for the style, so that it can be referenced by the layer, and also what type of features the style will be applied to, point, line (or linestring) or polygon, and you do this by setting the type attribute for the style.

Additionally, you can specify a maximum and minimum scale range for the style using minScale (or minscale) and maxScale (or maxscale).

Finally, you can also specify a label (or title) and a description (or abstract) which can be used when generating the legend.

After that, it's just a case of setting the appropriate attributes that define how you want the data rendered.

The following are the different values that can be used with an inline style definition, not note that both "colour" and "color" can be used, and the hyphen is also optional, so "stroke-colour" and "strokecolor" can both be used.

When specifying colours you can either use hex notation with RRGGBB and prefix the value with a #, for example, #ff0000 for red, or you can use a pre-defined colour from the list black, blue, cyan, darkgray, darkgrey, gray, grey, green, lightgray, lightgrey, magenta, orange, pink, red, whiteyellow.

...

When specifying a style for lines you can specify the stroke attributes, for a polygons polygon both stroke and fill attributes, and for points stroke, fill and mark are required.

Stroke

Name

Default

stroke-colour

orange

stroke-width

3

stroke-opacity

1

Fill

Name

Default

fill-colour

orange

fill-opacity

0.125

Mark

Name

Default

mark-type

circle

mark-size

10

mark-opacity

1

mark-rotation

0

Joining Tables

From 2.6.4 it's possible to join to another table if the underlying spatial engine is using a database, i.e. this won't work for shapefiles for example. 

This would for example provide the ability to filter the rows displayed on the map based on the value in a column in a table different from the one containing the geometry. To join the additional table you need to add a <join/> tag with the information about the other table (which must be in the same database) and how it is joined to the source table. Additionally you can set the type of join, inner or outer, and add a filter for the extra table.

Code Block
languagexml
<layer id="my_active_incidents" label="My Active Incidents" layer="GIS.INCIDENTS" style="incidents">
	<join>
		<type>inner</type> <!-- this is the default, and will result in only the rows that are in both tables being displayed -->
		<table>GIS.INCIDENT_DETAILS</table> <!-- The name of the table to join to GIS.INCIDENTS -->
		<where>ID = ID</where> <!-- The columns in the two tables to join, must always be an equals -->
		<filter>STATUS = 'ACTIVE'</filter> <!-- An additional filter to further reduce the rows that are displayed -->
		<filter>USERID = '${user.id}'/> <!-- Another filter, this time selecting rows that belong to the current user -->
	</join>
</layer>

Join

Name

Type

Carnality

Default

Description

table

string

1..1


The name of the table to join to the source table

where

string

1..1


A description of the join between the two columns. This should always be a X = Y type of expression where X is the column in the source table and Y is the column in the extra table. The rows from the two tables will be matched based on the values in the X column in the source table having the same value as the Y column in the target table.

type

'outer' or 'inner'

0..1

'inner'

Should the join between the two tables be an inner join, only rows in both tables are returned, or an outer join, rows in the source table are still returned even if they don't have a matching row in the extra table

filter

string

0..n


This is a ECQL expression that will be applied to the extra table to filter the rows that should be included, this includes support for user attributes.