UNPKG

@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
"use strict"; 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;