winnow
Version:
Apply sql-like filters to GeoJSON
46 lines (38 loc) • 1.02 kB
JavaScript
const isDifferentCrs = require('./is-different-crs')
function params (features, {
returnGeometry,
inputCrs,
outputCrs,
aggregates,
geometry,
geometryPrecision
} = {}) {
const params = []
// NOTE: order matters here
// select fragment: transform function parameters here
if (shouldAddCrsParams({ aggregates, returnGeometry, inputCrs, outputCrs })) {
params.push(getCrsString(inputCrs), getCrsString(outputCrs))
}
if (geometryPrecision) {
params.push(geometryPrecision)
}
// from fragment: features parameter here
params.push(Array.isArray(features) ? features : [features])
// where fragment: geometry filter parameter here
if (geometry) {
params.push(geometry)
}
return params
}
function shouldAddCrsParams ({
aggregates,
returnGeometry,
inputCrs,
outputCrs
} = {}) {
return !aggregates && returnGeometry !== false && isDifferentCrs(inputCrs, outputCrs)
}
function getCrsString ({ wkt, wkid } = {}) {
return wkt || `EPSG:${wkid}`
}
module.exports = params