UNPKG

winnow

Version:

Apply sql-like filters to GeoJSON

36 lines (27 loc) 1.38 kB
const _ = require('lodash') /** * Ensure idField is set if metadata doesn't have a value but a field named OBJECTID is present * @param {object} metadata */ function normalizeIdField (options, features = []) { const metadata = _.get(options, 'collection.metadata') const idField = extractIdField(metadata, features[0]) if (shouldWarnIdFieldIsMissingFromData(idField, features)) { console.warn('WARNING: requested provider has "idField" assignment, but this property is not found in properties of all features.') } return idField } function extractIdField ({ idField, fields } = {}, feature = {}) { if (idField) return idField // metadata.idField is not set, but fields array includes OBJECTID, use that as idField if (_.find(fields, { name: 'OBJECTID' })) return 'OBJECTID' const properties = feature.properties || feature.attributes if (_.has(properties, 'OBJECTID') && properties.OBJECTID !== null) return 'OBJECTID' return null } function shouldWarnIdFieldIsMissingFromData (idField, features) { if (process.env.NODE_ENV === 'production' || process.env.KOOP_WARNINGS === 'suppress' || !idField || features.length === 0) return const propertiesFromFirstFeature = _.get(features, '[0].properties') || _.get(features, '[0].attributes', {}) return propertiesFromFirstFeature[idField] === undefined } module.exports = normalizeIdField