We received lots or requests regarding the possibility to build queries on geospatial data. This means on the one hand a way to do potentially complex queries for nodes based on any combination of the fields in a content type. The available fields should of course include geometry fields allowing for spatial operations like intersects or contains. The result set of the query should be displayed either as some kind of list or directly on a map. On the other hand spatial querying should be possible against WMS and WFS geo web services that might be included in a map within Drupal. For this an easy way to transform user input into the standardized query language CQL would be needed. The queried WMS or WFS would be reflected in the map showing only the filtered results.

The first option of complex querying on the level of nodes would be possible by integrating the PostGIS module with Views. The second option of querying WMS and WFS would be implemented by a new OpenLayers behavior. Below we'll outline a roadmap how both features should be implemented.

Add Views support to PostGIS module

The plugin system of the Views module makes it possible to add Views integration to other modules. The PostGIS module therefore should implement a Relationship plugin and a Filter plugin. The Filter plugin would make spatial filters available that can optionally be exposed to visitors. The Relationship plugin would provide the ability to build spatial relationships between entities. This would allow to do queries like “show me all features within a certain region” or “show only features within a specified distance of feature X”.

The mockup below illustrates how the configuration interface for geometry fields could look like.

PostGIS Views integration

The integration of PostGIS and Views is just a roadmap, the functionality is not yet available.

Filter OpenLayers WMS and WFS layer

Filtering of WMS and WFS should be enabled by implementing a new OpenLayers map behavior. The administrator should be able to activate the behavior separately for every map within the site. In the administration interface of this behavior it would be possible to define the filter criteria for every WFS or WMS layer that has been loaded in the corresponding map. The filter criteria would consist of a part according to the CQL specification and another part with a placeholder that is meant to be replaced by the user input later. The placeholder would reference the ID of a form field that has to be placed next to the map. It would be the responsibility of the developer to define the form inside a theme or as a block. This way Cartaro would include a flexible and simple solution for dynamic map WMS and WFS queries.

The first screenshot shows the planned configuration interface for the new OpenLayers map behavior that allows to define the querying options available to the user. The second screenshot shows how the same configuration would allow to query the WFS named "capitals_wfs" by the name of the capital.
CQL Filter

CQL Example

We started to implement this feature for WFS already. However there is still work to be done to make it work more generally and to use it not only for WFS but also WMS.

Related Drupal.org issues:

Comments

friedjoff’s picture

user654’s picture

.

ulim’s picture

So far we have not scheduled this feature. If you need it soon you may want to sponsor the development. In this case please contact us by e-mail.

Cheers

Uli

user654’s picture

.

augustus.kling’s picture

Cartaro stores all its data in a PostgreSQL+PostGIS database. It does have a concept of geometries and optimizes the queries on the database level – so PostGIS makes the queries really quick.

user654’s picture

.

user654’s picture

Issue summary: View changes

.

robertwb’s picture

I have made strides in figuring out the coding hooks in Views and the setup of relationships in a table definition to allow automatic addition of spatial WHERE and JOIN conditions. The first link below shows how to accomplish it by writing a small custom module that adds spatial conditions to a specific named view:

mtoscano’s picture

CQL filters have been added since beta5 but I can't find proper documentation on how to use them. Instruction above are more for developers that for site builders.
Any help in how to place the form field next to the map?
Thanks

Yo Gis’s picture

when I try to make filter with the CQL filter in OpenLayer Map structure interface, the WFS url don't contain CQL filter parameter...

It's a WFS layer
GeoServer CQL Filter is check
I save the map params.

What I am doing wrong ?

Best,