UNPKG

geotoolbox

Version:

geotoolbox is GIS javascript library. It is based on d3geo, topojson and geos-wasm.

47 lines (45 loc) 1.59 kB
import { isgeojson, isarrayofobjects } from "./helpers/helpers"; import { autoType } from "d3-dsv"; const d3 = Object.assign({}, { autoType }); /** * @function autotype * @summary The function detects common data types such as numbers, dates and booleans, and convert properties values to the corresponding JavaScript type. Besed on d3.autoType(). * @description Based on `d3.autoType`. * @param {object|Array} data - A GeoJSON FeatureCollection or an array of objects * @param {object} options - Optional parameters * @param {boolean} [options.mutate = false] - Use `true` to update the input data. With false, you create a new object, but the input object remains the same. * @returns {object|array} - A GeoJSON FeatureCollection or an array of objects. (it depends on what you've set as `data`). * @example * geotoolbox.autotype(*a geojson or an array of objects*) */ export function autotype(data, { mutate = false } = {}) { let x = data; if (isgeojson(x)) { if (!mutate) { x = JSON.parse(JSON.stringify(data)); } x.features = x.features.map((d) => ({ ...d, properties: d3.autoType( Object.fromEntries( Object.entries(d.properties).map(([key, value]) => [ key, String(value), ]) ) ), })); } else if (isarrayofobjects(x)) { x = x.map((d) => d3.autoType( Object.fromEntries( Object.entries(d).map(([key, value]) => [key, String(value)]) ) ) ); if (mutate) { data.splice(0, data.length, ...x); } } return x; }