featureserver
Version:
*An open source implementation of the GeoServices specification*
79 lines (65 loc) • 1.87 kB
JavaScript
const _ = require('lodash')
const {
QueryFields
} = require('../helpers/fields')
const {
getCollectionCrs,
normalizeSpatialReference
} = require('../helpers')
const featureResponseTemplate = require('../../templates/features.json')
/**
* Modifies a template features json file with metadata, capabilities, and data from the model
* @param {object} data - data from provider model
* @param {object} params
* @return {object} formatted features data
*/
function renderFeaturesResponse (data = {}, params = {}) {
const template = _.cloneDeep(featureResponseTemplate)
const {
uniqueIdField: uniqueIdFieldDefault,
objectIdFieldName: objectIdFieldNameDefault
} = template
const {
metadata: {
limitExceeded,
transform,
idField
} = {}
} = data
const computedProperties = {
geometryType: params.geometryType,
spatialReference: getOutputSpatialReference(data, params),
fields: QueryFields.create({ ...data, ...params }),
features: data.features || [],
exceededTransferLimit: !!limitExceeded,
objectIdFieldName: idField || objectIdFieldNameDefault,
uniqueIdField: {
...uniqueIdFieldDefault,
name: idField || uniqueIdFieldDefault.name
}
}
if (transform) {
computedProperties.transform = transform
}
return { ...template, ...computedProperties }
}
function getOutputSpatialReference (collection, {
outSR,
outputCrs,
inputCrs,
sourceSR
}) {
const spatialReference = outputCrs || outSR || inputCrs || sourceSR || getCollectionCrs(collection) || 4326
const { wkid, wkt, latestWkid } = normalizeSpatialReference(spatialReference)
if (wkid && latestWkid) {
return { wkid, latestWkid }
}
if (wkid) {
return { wkid }
}
if (latestWkid) {
return { latestWkid }
}
return { wkt }
}
module.exports = { renderFeaturesResponse }