winnow
Version:
Apply sql-like filters to GeoJSON
30 lines (22 loc) • 1.05 kB
JavaScript
const standardQuery = require('./standard-query')
const calculateClassBreaks = require('../calculate-class-breaks')
const uniqueValueQuery = require('./unique-value-query')
function classificationQuery (features, sqlstatement, options) {
const { features: filtered } = standardQuery(features, sqlstatement, options)
validateQueryResult(filtered)
const { classification } = options
const { breakCount, type } = classification
if (type === 'classes') {
if (breakCount <= 0) throw new Error('breakCount must be positive: ' + breakCount)
return calculateClassBreaks(filtered, classification)
}
if (type === 'unique') {
return uniqueValueQuery(filtered, classification)
}
throw new Error(`unacceptable classification type: ${type}`)
}
function validateQueryResult (features) {
if (features === undefined) throw new Error('query results include undefined features')
if (features.length === 0) throw new Error('query results in zero features; features needed in order to classify')
}
module.exports = classificationQuery