...
The client UI for the filtering contains a couple of new controls that were not previously available with other input forms, the slider and multi-slider. These controls are useful for layer filtering because they provide an easier way to constrain a numeric value to a certain range but . But they’re also different in that they force a value to have to be chosen, that is a filter the that uses a slider for a value will always have that value applied when displaying the layer, which . This can be important when the table behind the layer contains a number of “sets” of data but only one should be displayed at a time, and the column behind the parameter is used to separate out the data into the various sets, for . An example , of this could be the year when the data in the table was generated and the user would only want to see a single year at a time, or for a layer with flood levels and you only want to show a single depth.
In addition to the filter panel, there is also a ToC panel right-click context menu item, weave.toc.filterLayer
, that . This can be added to the ToC panel context menu to allow the user to filter a layer directly. It’s recommended that the layer filtering capability is provided either in the filter panel or context menu item be used at one timein a client and not both (as providing both could result in display synchronisation issues).
Finally, there is a new flag available for the ToC panel, showFilterIcon
, which when set to true will place an indicator icon next to a layer in the ToC that currently has a filter applied.
...
The filtering only affects the display of the layer on the map, it plays no part for example if the user tries to spatially select entities that are associated with that layer , (this may change depending upon demand) or when displaying a legend.
Configuration
Namespace
urn:com.cohga.weave.map.filter#1.0
Tags
layer
...
Properties
Name | Type | Required | Description |
id | string | yes | Unique identifier for this filter |
label | string | yes | Text to be displayed to the user to represent this filter |
mapengine | string | yes | The identifier of the map engine the layer to filter belongs to |
layer | string | yes | The identifier of the layer in the map engine this filter applies to |
Sub-tags
Name | Type | Cardinality |
parameter | urn:com.cohga.weave.map.filter#1.0:parameter | 1..n |
parameter
...
Properties
Name | Type | Required | Default | Description |
id | string | yes | A unique identifier for the parameter | |
label | string | yes | The prompt text displayed when user input the parameter value | |
column | string | yes | The name of the column within the layer that this parameter references. | |
controlType | 'text', '‘list', 'radio', ‘check', ‘multicheck’, 'silder’, 'multislider’ | no | 'text' | The UI control to use when displaying the parameter |
dataType | 'boolean', 'float', 'integer', 'string' | no | 'string' | The data type for the parameter |
allowBlank | boolean | no | true | Give the user the choice of an empty value in the listbox (as opposed to a null value) |
value | any | no | The default value of the parameter (except multislider fields) | |
dataSet | no | Where to get the values for a listbox | ||
labelColumn | string | no | Column in the datadefinition that supplies the label of the value to show the user | |
valueColumn | string | no | Column in the datadefinition that supplies the value of the value to use in the SQL | |
scalarparametertype | string | no | 'simple' | 'simple' or 'multi-value' to determine of more than one value can be selected from a list. |
width | integer | no | Set the width of the field | |
minValue | number | yes - for slider and multislider | The minimum value allowed for a numeric field. | |
maxValue | number | yes - for slider and multislider | The maximum value allowed for a numeric field. | |
leftValue | number | no | The initial minimum value for a multislider | |
rightValue | number | no | The initial maximum value for a multislider | |
increment | number | no | The increment to use for fields that support it, the units are dependant upon the field type. | |
trueValue | any | no | The value that equates to "true" in the underlying table, only suitable for checkboxes | |
falseValue | any | no | The value that equates to "false" in the underlying table, only suitable for checkboxes | |
decimalPrecision | number | no | The precision of any numeric fields |
Sub-tags
Name | Type | Cardinality |
list | urn:com.cohga.weave.map.filter#1.0:list | 1..1 - only for radio and multicheck fields |
list
...
Properties
Name | Type | Required | Description |
value | string | yes | Value to be used in the filter |
label | string | yes | Text to be displayed to the user to represent this filter |
checked | string | no | Should this check box be initially checked. Only for list within multicheck field |
Examples
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="urn:com.cohga.server.config#1.0" xmlns:filtermapfilter="urn:com.cohga.weave.map.filter#1.0" xmlns:data="urn:com.cohga.server.data.database#1.0"> <!-- provide the values for the title names list --> <data:datadefinition id="titles.names"> <datasourcedataconnection datasource="main" table="TITLES" prefix="DISTINCT"> <parameter name="title_name" label="Title Name" column="TITLENAME"/> </datasourcedataconnection> </data:datadefinition> <!-- create a simple list parameter to filter on title name --> <filter<mapfilter:layer id="titles"> <label>Titles</label> <mapengine>main</mapengine> <layer>titles</layer> <parameter id="name" label="Name" controlType="list" scalarParameterType="multi-value" dataSet="titles.names" column="TITLENAME"/> </filtermapfilter:layer> </config> |
Code Block | ||
---|---|---|
| ||
<!-- parameter examples --> <!-- a parameter representing a floating point value between 2.5 and 26 with an increment of 0.5 and default value of 13 --> <parameter id="level"> <label>Level (m)</label> <controlType>slider</controlType> <dataType>float</dataType> <column>Level_mGH</column> <minValue>2.5</minValue> <maxValue>26</maxValue> <value>13</value> <increment>0.5</increment> <decimalPrecision>1</decimalPrecision> </parameter> <!-- a parameter representing an integer value between 2011 and 2019 inclusive with a default minimum of 2015 and default maximum of 2018 --> <parameter id="study_year"> <label>Study Year</label> <controlType>multislider</controlType> <dataType>int</dataType> <column>Study_year</column> <minValue>2011</minValue> <maxValue>2019</maxValue> <leftValue>2015</leftValue> <rightValue>2018</rightValue> </parameter> <!-- multiple grouped check boxes. Note in this case all checked boxes start as checked but if none of the check boxes are checked all items would be displayed as well --> <parameter id="location"> <label>Location</label> <controlType>multicheck</controlType> <column>Location</column> <dataType>string</dataType> <list label="Catchment, Todd" value="Todd Catchment" checked="true"/> <list label="River, Adelaide" value="Adelaide River" checked="true"/> <list label="River, McArthur" value="McArthur River" checked="true"/> </parameter> <!-- single check box. Note in thethis case since we've set a different true value when this check box is checked the filter applied will be "Location='Adelaide River'" rather than "Location=true" as would be the case if trueValue were nonot set --> <parameter id="location"> <label>Adelaide River Only</label> <controlType>check</controlType> <column>Location</column> <dataType>string</dataType> <trueValue>Adelaide River</trueValue> </parameter> <!-- radio button --> <parameter id="location"> <label>Location</label> <controlType>radio</controlType> <column>Location</column> <dataType>string</dataType> <value>Adelaide River</value> <list label="Catchment, Todd" value="Todd Catchment"/> <list label="River, Adelaide" value="Adelaide River"/> <list label="River, McArthur" value="McArthur River"/> </parameter> <!-- list box --> <parameter id="location"> <label>Location</label> <controlType>list</controlType> <dataSet>locations</dataSet> <column>Location</column> <dataType>string</dataType> </parameter> <!-- a basic text box. Note this format is discuorageddiscouraged as the user has no way of knowing if the value they're entering is valid and may result in nothing being displayed --> <parameter id="location"> <label>Location</label> <controlType>text</controlType> <column>Location</column> <dataType>string</dataType> </parameter> |
...
Code Block | ||
---|---|---|
| ||
<client:config id="filtering">
<title>Example Filtering client</title>
<!-- other config here -->
<view id="weave.layerFilter">
<location>east</location>
</view>
<!-- other config here -->
<view id="com.cohga.html.client.map.tocView">
<location>west</location>
<label>Layers</label>
<showFilterIcon>true</showFilterIcon>
<contextmenu>
<item action="weave.toc.filterLayer"/>
</contextmenu>
</view>
</client:config> |