koopjs / koop

Transform, query, and download geospatial data on the web.
http://koopjs.github.io
Other
651 stars 125 forks source link

fix: faulty geometric filtering #1003

Closed rgwozdz closed 1 month ago

rgwozdz commented 2 months ago

Recent testing shows that in certain circumstances, filtering by geometry did not work as it should. The test case that surfaced the initial issue was:

Context: dataset type: Multipolygon feature collection geometry filter: envelope spatial relation: intersects

When the filter envelope completely contained one of the multi-polygon features, it was found to be excluded from the returned feature set.

Following this discovery I performed an audit on all of Koop's supported geometric filtering operations: intersects, contains, within. I found the within implementation to be incorrect. Extensive testing on ArcGIS Server indicates:

In addition, some multi- geometries were not being supported in the contains operation. This PR ensures geometry filtering follows the above rules for all appropriate geometry types.

changeset-bot[bot] commented 2 months ago

🦋 Changeset detected

Latest commit: 944213faeabbe6cf5dc4432470ef6736b1f59d80

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages | Name | Type | | -------------------------- | ----- | | @koopjs/winnow | Patch | | @koopjs/featureserver | Patch | | @koopjs/output-geoservices | Patch | | @koopjs/koop-core | Patch |

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

github-actions[bot] commented 2 months ago

Coverage Report (change vs master)

File Path Statements Branches Functions Lines
packages/winnow/src/filter-and-transform/filter-and-transform.js 100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
packages/winnow/src/filter-and-transform/filters/contains.js 100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
packages/winnow/src/filter-and-transform/filters/envelope-intersects.js 100.0 green
vs
95.0 yellowGreen
100.0 green
vs
88.2 yellow
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
packages/winnow/src/filter-and-transform/filters/helpers.js 100.0 green
vs
(NA)
100.0 green
vs
(NA)
100.0 green
vs
(NA)
100.0 green
vs
(NA)
packages/winnow/src/filter-and-transform/filters/intersects.js 100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
packages/winnow/src/filter-and-transform/filters/within.js 100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
packages/winnow/src/normalize-query-options/geometry-filter.js 97.0 yellowGreen
vs
97.0 yellowGreen
88.0 yellow
vs
84.6 yellow
100.0 green
vs
100.0 green
97.0 yellowGreen
vs
96.9 yellowGreen
packages/winnow/src/sql-query-builder/where-builder/index.js 100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green
100.0 green
vs
100.0 green