Children: |
Description
The goal is to enable a geoserver WFS request with a 3D bounding box so that we receive only geometries with one or more points in that 3D bounding box.
In other words, there is a min and max for the third coordinate as well as the first two.
In 2D we have in KVP:
BBOX=x0,y0,x1,y1
However, in 3D we get:
BBOX=x0,y0,z0,x1,y1,z1
Only 3d geometries that qualify for the min and max pairs for all three axes are returned.
In order to accomplish this, Geotools must support
- 3D Envelopes: a 3D envelope geometry class and a 3D referenced envelope geometry class.
- 3D Bounding Boxes: a 3D Bounding Box has two additional attributes (min z and max z) and filters geometries using all three dimensions.
Status
Voting has not started yet:
- Andrea Aime
- Ben Caradoc-Davies
- Christian Mueller
- Ian Turton
- Justin Deoliveira
- Jody Garnett
- Simone Giannecchini
Tasks
This section is used to make sure your proposal is complete (did you remember documentation?) and has enough paid or volunteer time lined up to be a success
| no progress |
| done |
| impeded |
| lack mandate/funds/time |
| volunteer needed |
|---|
- NC: Implement
- Update default implementation
- Update wiki (both module matrix and upgrade to to 2.5 pages) |
- Remove deprecated code from GeoTools project
- Update the user guide
- Update or provided sample code in demo
- review user documentation
API Changes
The changes are API additions, rather than changes.
There will be the following new interfaces in geoapi:
- BBOX3D, for the 3D bbox filter, subinterface of BBOX
There will be the following new classes in main
- BBOX3DImpl, implementation of interface
- Envelope3D, Extension of JTS Envelope
- ReferencedEnvelope3D, Referenced version of Envelope3D
Furthermore, the FIlterFactory interfaces will be extended with the following methods:
- BBOX3D bbox(String propertyName, double minx, double miny, double minz, double maxx, double maxy, double maxz, String srs);
- BBOX3D bbox( Expression geometry, double minx, double miny, double minz, double maxx, double maxy, double maxz, String srs);
- BBOX3D bbox( Expression geometry, double minx, double miny, double minz, double maxx, double maxy, double maxz, String srs, MatchAction matchAction);
Corresponding with their 2D equivalents.
Because ReferencedEnvelope3D must be derived from Evelope3D, it cannot be derived from ReferencedEvelope. Both have a joint parent (Envelope), but ReferencedEvelope3D is not a ReferencedEnvelope.
To solve this issue an additional proposal is made to change the API (optional, after discussion):
- Create a ReferencedEvelope interface
- Let ReferencedEnvelope class be derived from ReferencedEvelope interface
- Switch all code that uses ReferencedEnvelope class to using ReferencedEvelope interface (Possibly little changes?)
- Let ReferencedEvelope3D class implement ReferencedEnvelope interface
Filter
BEFORE:
AFTER:
Documentation Changes
list the pages effected by this proposal
- gt-opengis filter api update to reflect api change
- gt-main filter examples updated to reflect api change