@gouvfr-anct/mednum
Version:
✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique
21 lines (20 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.qpvShapesMapFromTransfer = exports.multiPolygonToListOfPolygons = void 0;
const toSinglePolygon = (positions) => ({
coordinates: [positions],
type: 'Polygon'
});
const multiPolygonToListOfPolygons = (multiPolygon) => multiPolygon.coordinates.flatMap((polygonCoordinates) => polygonCoordinates.map(toSinglePolygon));
exports.multiPolygonToListOfPolygons = multiPolygonToListOfPolygons;
const isPolygon = (shape) => shape.type === 'Polygon';
const polygonsFromShape = (shapeToAdd, polygons = []) => isPolygon(shapeToAdd) ? [...polygons, shapeToAdd] : [...polygons, ...(0, exports.multiPolygonToListOfPolygons)(shapeToAdd)];
const toPolygons = (existingQpvTransfer) => existingQpvTransfer.reduce((polygons, shapeToAdd) => polygonsFromShape(shapeToAdd, polygons), []);
const upsertQpvToShapesMap = (existingQpvTransfer, qpvShapesMap, { list_com_2023, geo_shape: shapeToAdd }) => existingQpvTransfer.length === 0
? qpvShapesMap.set(list_com_2023, polygonsFromShape(shapeToAdd.geometry))
: qpvShapesMap.set(list_com_2023, isPolygon(shapeToAdd.geometry)
? [...toPolygons(existingQpvTransfer), shapeToAdd.geometry]
: [...toPolygons(existingQpvTransfer), ...(0, exports.multiPolygonToListOfPolygons)(shapeToAdd.geometry)]);
const hasGeoShape = (qpv) => qpv.geo_shape != null;
const qpvShapesMapFromTransfer = (qpvTransfer) => qpvTransfer.reduce((qpvShapesMap, qpv) => hasGeoShape(qpv) ? upsertQpvToShapesMap(qpvShapesMap.get(qpv.list_com_2023) ?? [], qpvShapesMap, qpv) : qpvShapesMap, new Map());
exports.qpvShapesMapFromTransfer = qpvShapesMapFromTransfer;