@twinmatrix/spatialverse-sdk-web 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js +293 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js +35 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js +33 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js +307 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +202 -198
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/focustree.json +121 -0
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -13
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/whatTaxonomies.json +170 -0
- package/lib/cjs/meta-atlas-sdk/combined_style.json +2313 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js +166 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js +229 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +73 -69
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +6 -1
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -103
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/cjs/react/MetaAtlasMap.js +4 -4
- package/lib/cjs/react/MetaAtlasMap.js.map +1 -1
- package/lib/cjs/react/hooks/useMapEvents/index.js +6 -3
- package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/index.js +7 -5
- package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/utils.js +1 -1
- package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
- package/lib/cjs/react/stores/useMapDataStore.js +17 -21
- package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js +286 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js +27 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js +27 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js +305 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +202 -198
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/focustree.json +121 -0
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -8
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/whatTaxonomies.json +170 -0
- package/lib/esm/meta-atlas-sdk/combined_style.json +2313 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js +158 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js +221 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +73 -68
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js +1 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/local-storage.js +6 -1
- package/lib/esm/meta-atlas-sdk/utils/local-storage.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -101
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/esm/react/MetaAtlasMap.js +4 -4
- package/lib/esm/react/MetaAtlasMap.js.map +1 -1
- package/lib/esm/react/hooks/useMapEvents/index.js +6 -3
- package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/esm/react/hooks/useStampRally/index.js +7 -5
- package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/esm/react/hooks/useStampRally/utils.js +1 -1
- package/lib/esm/react/hooks/useStampRally/utils.js.map +1 -1
- package/lib/esm/react/stores/useMapDataStore.js +17 -21
- package/lib/esm/react/stores/useMapDataStore.js.map +1 -1
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts +30 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts +5 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts +21 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts +27 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts +18 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts +37 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["turf","GeoJSONRBush","Graph","DagreGraph","alg","cloneDeep","isEmpty","PortalType","getEdge","debugMode","minSnapDistance","indexOfPointOnLine","feature","point","matchIndex","coordEach","currentCoord","coordIndex","featureIndex","multiFeatureIndex","geometryIndex","lineVertex","dist","distance","units","console","log","addIntersectionToFeature","intersectedPoint","doNearbyCheck","arguments","length","undefined","addToLine","line","cleanedFeature","cleanCoords","nearestPoint1","nearestPointOnLine","properties","index","geometry","coordinates","splice","modified","indexOnLine","snap","a","b","getType","currentPoint","snappedPoint","existingVertexOnLine","distToExistingVertexOnLine","findIntersectionsWithSuperset","i","j","id","intersections","lineIntersect","features","intersectedFeature","optimized","tree","load","forEach","line1","bbox1","bbox","possibleMatches","search","title","match","line2","dimension_where","markAsModified","mapBoxDraw","add","getFirstPointFeature","type","getParentDimension","dimension","splitResult","split","lastChildName","parentDimensionValueStrict","replace","concat","DEFAULT_DIMENSION","getPortalEdgeData","portalLinks","allEdgeLines","portalEdgeData","addLink","link","container","cost","direction","wheelchair","description","property_portalLink","edge","property_secondRelatedId","lines","pathFeatures","property_routeData","filter","portalEdge","push","addNode","mapObjectId","links","portal","escalatorGraph","Object","keys","anchorId","escalator","linksForAnchor","lift","linksForNonAnchor","k","nestedLink","hasNode","setNode","where","taxonomy1Path","hasEdge","setEdge","extrapolateLinks","graph","components","component","reachableNodes","node1","node2","edgeData","nodeEdges","isParallelLink","nodeEdge","nodeToUse","v","w","nodeEdgeData","edgeAsObj","isParallel","removeEdge","addLinkUsingGraph","escalatorEdge","start","performance","now","escalatorGraphEdges","edges","hasOwnProperty","filterPortalEdgeDataByWhere","allPortalEdgeData","whereDimension","portalId","includes","filterPortalEdgeDataByList","portalIdList","has"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.ts"],"sourcesContent":["import { Feature, LineString, GeoJsonProperties, Point } from 'geojson';\nimport * as turf from '@turf/turf';\nimport { Position } from 'geojson';\nimport MapboxDraw from '@mapbox/mapbox-gl-draw';\nimport GeoJSONRBush from 'geojson-rbush';\nimport { Graph as DagreGraph, alg, Edge as GraphEdge } from '@dagrejs/graphlib';\nimport { cloneDeep, isEmpty } from 'lodash';\nimport {\n EdgeLine, Portal, PortalEdge, PortalEdgeData, PortalLinks, PortalType,\n} from './interfaces';\nimport { getEdge } from './mapObjectsHelper';\n\nconst debugMode = false;\n\nexport const minSnapDistance = 1e-3; // meters\ntype turfLineString = Feature<LineString, GeoJsonProperties>;\n\nfunction indexOfPointOnLine(feature: turfLineString, point: Feature<Point, GeoJsonProperties>) {\n let matchIndex = -1;\n turf.coordEach(feature, (currentCoord: number[], coordIndex: number, featureIndex: number, multiFeatureIndex: number, geometryIndex: number) => {\n if (matchIndex === -1) {\n const lineVertex = turf.point(currentCoord);\n const dist = turf.distance(point, lineVertex, {\n units: 'meters',\n });\n if (debugMode) console.log('coordIndex: ', coordIndex, dist);\n if (dist < minSnapDistance) matchIndex = coordIndex;\n }\n });\n\n if (debugMode) console.log('matchIndex: ', matchIndex);\n return matchIndex;\n}\n\nfunction addIntersectionToFeature(\n intersectedPoint: Feature<Point, GeoJsonProperties>,\n feature: turfLineString,\n doNearbyCheck = true,\n) {\n const addToLine = (point: Position, line: turfLineString) => {\n const cleanedFeature = turf.cleanCoords(line);\n const nearestPoint1 = turf.nearestPointOnLine(cleanedFeature, point);\n if (nearestPoint1.properties.index !== undefined) {\n feature.geometry.coordinates.splice(nearestPoint1.properties.index + 1, 0, intersectedPoint.geometry.coordinates);\n if (feature.properties) feature.properties.modified = 1;\n if (debugMode) console.log('added');\n } else if (debugMode) console.log('nearest point on line undefined');\n };\n\n if (doNearbyCheck) {\n const indexOnLine = indexOfPointOnLine(feature, intersectedPoint);\n if (indexOnLine === -1) {\n addToLine(intersectedPoint.geometry.coordinates, feature);\n } else {\n if (debugMode) console.log('should update vertex', indexOnLine);\n feature.geometry.coordinates[indexOnLine] = intersectedPoint.geometry.coordinates;\n if (feature.properties) feature.properties.modified = 1;\n }\n } else {\n addToLine(intersectedPoint.geometry.coordinates, feature);\n }\n}\n\nfunction snap(a: turfLineString, b: turfLineString) {\n if (turf.getType(a) === 'LineString') {\n turf.coordEach(a, (currentCoord: number[], coordIndex: number, featureIndex: number, multiFeatureIndex: number, geometryIndex: number) => {\n const currentPoint = turf.point(currentCoord);\n const cleanedFeature = turf.cleanCoords(b);\n const snappedPoint = turf.nearestPointOnLine(cleanedFeature, currentPoint, { units: 'meters' });\n\n if (snappedPoint\n && snappedPoint.properties.dist !== undefined && snappedPoint.properties.index !== undefined) {\n const existingVertexOnLine = turf.point(b.geometry.coordinates[snappedPoint.properties.index]);\n const distToExistingVertexOnLine = turf.distance(currentPoint, existingVertexOnLine, {\n units: 'meters',\n });\n // If the snappedPoint is close (< minSnapDistance) to a pre-existing vertex then use that vertex instead of adding new\n if (distToExistingVertexOnLine < minSnapDistance) {\n snappedPoint.geometry.coordinates = existingVertexOnLine.geometry.coordinates;\n a.geometry.coordinates[coordIndex] = snappedPoint.geometry.coordinates;\n if (a.properties) a.properties.modified = 1;\n } else\n // Add a new line vertex to b and move vertex of a to the same location\n if (snappedPoint.properties.dist < minSnapDistance) {\n a.geometry.coordinates[coordIndex] = snappedPoint.geometry.coordinates;\n b.geometry.coordinates.splice(snappedPoint.properties.index + 1, 0, snappedPoint.geometry.coordinates);\n if (a.properties) a.properties.modified = 1;\n }\n }\n });\n }\n}\n\n// if required to disable route_edge X route_edge intersection\n//! (a[i].properties.dimension_what === b[i].properties.dimension_what && a[i].properties.dimension_what === RouteDimension.Edge && b[i].properties.dimension_what === RouteDimension.Edge)\n\n// b is a superset which also includes a\nexport function findIntersectionsWithSuperset(a: turfLineString[], b: turfLineString[]) {\n for (let i = 0; i < a.length; i += 1) {\n for (let j = 0; j < b.length; j += 1) {\n if (a[i].id !== b[j].id) {\n // TODO: Optimize for two-way snapping in one call\n snap(a[i], b[j]);\n snap(b[j], a[i]);\n const intersections = turf.lineIntersect(a[i] as any, b[j] as any);\n if (debugMode) console.log('intersections for ', i, j, intersections);\n\n // Add intersection points to the respective LineStrings\n if (intersections.features.length > 0) {\n for (let index = 0; index < intersections.features.length; index += 1) {\n const intersectedFeature = intersections.features[index];\n\n addIntersectionToFeature(intersectedFeature, a[i]);\n addIntersectionToFeature(intersectedFeature, b[j]);\n }\n }\n } else {\n // since b is a super set and is also returned as the final output, so copy latest state in b\n b[j] = a[i];\n }\n }\n }\n\n return b;\n}\n\n// It updates the given feature data inplace, make sure params are passed by reference.\nexport function optimized(a: turfLineString[], b: turfLineString[]) {\n // Step 1: Build spatial index for the second set of LineStrings\n const tree = GeoJSONRBush();\n tree.load(b);\n\n // Step 2: Find potential intersecting pairs using bounding boxes\n a.forEach((line1) => {\n const bbox1 = turf.bbox(line1);\n const possibleMatches = tree.search(bbox1);\n\n if (debugMode) console.log('possible matches for ', line1.properties.title, possibleMatches);\n\n possibleMatches.features.forEach((match) => {\n const line2 = match;\n if (line1.properties && line1.properties.dimension_where\n && line2.properties && line2.properties.dimension_where\n && line1.properties.dimension_where === line2.properties.dimension_where\n ) {\n // Step 3: Perform detailed intersection check\n snap(line1, line2 as any);\n const intersections = turf.lineIntersect(line1 as any, line2 as any);\n if (debugMode) console.log('intersections', intersections);\n\n // Add intersection points to the respective LineStrings\n if (intersections.features.length > 0) {\n for (let j = 0; j < intersections.features.length; j += 1) {\n const intersectedFeature = intersections.features[j];\n\n addIntersectionToFeature(intersectedFeature, line1, false);\n addIntersectionToFeature(intersectedFeature, line2 as any, false);\n }\n }\n }\n });\n });\n}\n\nexport function markAsModified(features: Array<Feature>, mapBoxDraw: MapboxDraw) {\n if (features) {\n for (let index = 0; index < features.length; index += 1) {\n const feature = features[index];\n // modified key is used to mark that a feature was updated by mapboxDraw or custom logic like intersection during the respective editing session\n feature.properties.modified = 1;\n\n mapBoxDraw.add(feature as any);\n }\n }\n}\n\nexport function getFirstPointFeature(features: Feature[]) : Feature | undefined {\n for (let index = 0; index < features.length; index += 1) {\n const feature = features[index];\n const type = turf.getType(feature as any);\n\n if (type === 'Point') {\n return feature;\n }\n }\n\n return undefined;\n}\n\nexport function getParentDimension(dimension: string) {\n const splitResult = dimension.split('.');\n const lastChildName = splitResult[splitResult.length - 1];\n const parentDimensionValueStrict = dimension.replace('.'.concat(lastChildName), '');\n return parentDimensionValueStrict;\n}\n\nexport const DEFAULT_DIMENSION = 'where.singapore';\nexport function getPortalEdgeData(portalLinks: PortalLinks) {\n const allEdgeLines : EdgeLine[] = [];\n const portalEdgeData : { [key: string] : Portal} = {};\n\n const addLink = (link: any, container: PortalEdge[]) => {\n const {\n cost, direction, wheelchair, description,\n } = link.property_portalLink;\n const edge = getEdge(link.property_secondRelatedId);\n if (edge && edge.lines) {\n const pathFeatures = (link.property_routeData && link.property_routeData.features)\n ? (link.property_routeData.features.filter(\n (feature : Feature<LineString, any>) => feature.geometry !== undefined && turf.getType(feature) === 'LineString' && feature.geometry.coordinates.length > 0,\n ))\n : null;\n const portalEdge = {\n ...edge,\n cost,\n direction,\n wheelchair,\n pathFeatures,\n description,\n } as PortalEdge;\n container.push(portalEdge);\n\n allEdgeLines.push(...edge.lines);\n }\n };\n\n const addNode = (mapObjectId: any, links: PortalEdge[]) => {\n const edge = getEdge(mapObjectId);\n if (edge && edge.lines) {\n const portal = {\n ...edge,\n links,\n };\n portalEdgeData[mapObjectId] = portal;\n\n allEdgeLines.push(...edge.lines);\n\n return portal;\n }\n\n return undefined;\n };\n\n console.log('portalData input', portalLinks);\n const escalatorGraph = new DagreGraph();\n if (!isEmpty(portalLinks)) {\n Object.keys(portalLinks).forEach((anchorId) => {\n const { type, links } = portalLinks[anchorId];\n\n if (type !== PortalType.escalator) {\n const linksForAnchor : PortalEdge[] = [];\n for (let j = 0; j < links.length; j += 1) {\n const link = links[j];\n addLink(link, linksForAnchor);\n\n if (type === PortalType.lift) {\n // Extrapolate links for non-anchor lifts\n const linksForNonAnchor : PortalEdge[] = [];\n for (let k = 0; k < links.length; k += 1) {\n const nestedLink = links[k];\n if (nestedLink.property_secondRelatedId !== link.property_secondRelatedId) {\n addLink(nestedLink, linksForNonAnchor);\n }\n }\n if (linksForNonAnchor.length > 0) {\n // Add node for non-anchor lift\n addNode(link.property_secondRelatedId, linksForNonAnchor);\n }\n }\n }\n\n // Add node for anchor\n addNode(anchorId, linksForAnchor);\n } else {\n if (!escalatorGraph.hasNode(anchorId)) {\n const edge = getEdge(anchorId);\n if (edge) {\n escalatorGraph.setNode(anchorId, {\n where: edge.where,\n });\n }\n }\n\n for (let j = 0; j < links.length; j += 1) {\n const link = links[j];\n if (!escalatorGraph.hasNode(link.property_secondRelatedId)) {\n escalatorGraph.setNode(anchorId, {\n where: link.taxonomy1Path,\n });\n }\n\n if (!escalatorGraph.hasEdge(anchorId, link.property_secondRelatedId)) {\n escalatorGraph.setEdge(anchorId, link.property_secondRelatedId, {\n ...link.property_portalLink,\n });\n }\n }\n }\n });\n }\n\n // eslint-disable-next-line no-loop-func\n const extrapolateLinks = (graph: DagreGraph) => {\n const components = alg.components(graph);\n components.forEach((component) => {\n const reachableNodes = component;\n\n // Connect the node directly to each indirectly connected node\n for (let i = 0; i < reachableNodes.length; i += 1) {\n const node1 = reachableNodes[i];\n for (let j = i + 1; j < reachableNodes.length; j += 1) {\n const node2 = reachableNodes[j];\n if (node1 !== node2 && !graph.hasEdge(node1, node2)) {\n let edgeData = {\n cost: 120, direction: 2, wheelchair: true,\n };\n const nodeEdges = graph.nodeEdges(node1);\n let isParallelLink = false;\n if (nodeEdges && nodeEdges.length > 0) {\n for (let k = 0; !isParallelLink && k < nodeEdges.length; k += 1) {\n const nodeEdge = nodeEdges[k];\n\n // check sibling connection with node2\n const nodeToUse = nodeEdge.v === node1 ? nodeEdge.w : nodeEdge.v;\n if (graph.hasEdge(nodeToUse, node2)) {\n const nodeEdgeData = graph.edgeAsObj(nodeToUse, node2);\n if ('isParallel' in nodeEdgeData && nodeEdgeData.isParallel) {\n isParallelLink = true;\n }\n }\n }\n edgeData = graph.edgeAsObj(nodeEdges[0]) as any;\n }\n\n if (!isParallelLink) {\n if (graph.hasEdge(node2, node1)) {\n edgeData = cloneDeep(graph.edgeAsObj(node2, node1) as any);\n if ('direction' in edgeData && edgeData.direction) {\n if (edgeData.direction !== 2) edgeData.direction *= -1;\n }\n }\n graph.setEdge(node1, node2, edgeData);\n }\n }\n }\n }\n\n // Delete all parallel links from graph\n for (let i = 0; i < reachableNodes.length; i += 1) {\n const node1 = reachableNodes[i];\n const nodeEdges = graph.nodeEdges(node1);\n for (let k = 0; nodeEdges && k < nodeEdges.length; k += 1) {\n const nodeEdge = nodeEdges[k];\n const nodeEdgeData = graph.edgeAsObj(nodeEdge);\n if ('isParallel' in nodeEdgeData && nodeEdgeData.isParallel) {\n graph.removeEdge(nodeEdge.v, nodeEdge.w);\n }\n }\n }\n });\n };\n\n const addLinkUsingGraph = (portal: Portal, escalatorEdge: GraphEdge) => {\n const nodeEdgeData = escalatorGraph.edge(escalatorEdge);\n const {\n cost, direction, wheelchair, pathFeatures, description,\n } = nodeEdgeData;\n const edge = getEdge(escalatorEdge.w);\n if (edge && edge.lines) {\n const portalEdge = {\n ...edge,\n cost,\n direction,\n wheelchair,\n pathFeatures,\n description,\n } as PortalEdge;\n portal.links.push(portalEdge);\n allEdgeLines.push(...edge.lines);\n }\n };\n\n const start = performance.now();\n extrapolateLinks(escalatorGraph);\n console.log('time extrapolation: ', (performance.now() - start) / 1000);\n\n // Add escaaltor links to portalEdgeData using the escalator graph\n const escalatorGraphEdges = escalatorGraph.edges();\n for (let i = 0; i < escalatorGraphEdges.length; i += 1) {\n const escalatorEdge = escalatorGraphEdges[i];\n // eslint-disable-next-line no-prototype-builtins\n if (!portalEdgeData.hasOwnProperty(escalatorEdge.v)) {\n // Add node and then add link\n const portal = addNode(escalatorEdge.v, []);\n if (portal) {\n addLinkUsingGraph(portal, escalatorEdge);\n }\n } else {\n const portal = portalEdgeData[escalatorEdge.v];\n addLinkUsingGraph(portal, escalatorEdge);\n }\n }\n\n console.log('portalEdgeData', portalEdgeData);\n return {\n edgeData: portalEdgeData,\n lines: allEdgeLines,\n };\n}\n\nexport function filterPortalEdgeDataByWhere(allPortalEdgeData: PortalEdgeData, whereDimension: string) {\n const allEdgeLines : EdgeLine[] = [];\n const portalEdgeData : { [key: string] : Portal} = {};\n\n // eslint-disable-next-line no-restricted-syntax\n for (const portalId in allPortalEdgeData) {\n if (allPortalEdgeData[portalId].where.includes(whereDimension)) {\n const portal = allPortalEdgeData[portalId];\n portalEdgeData[portalId] = portal;\n allEdgeLines.push(...portal.lines);\n portal.links.forEach((link) => {\n allEdgeLines.push(...link.lines);\n });\n }\n }\n\n return {\n edgeData: portalEdgeData,\n lines: allEdgeLines,\n };\n}\n\nexport function filterPortalEdgeDataByList(allPortalEdgeData: PortalEdgeData, portalIdList: Set<string>) {\n const allEdgeLines : EdgeLine[] = [];\n const portalEdgeData : { [key: string] : Portal} = {};\n\n portalIdList.forEach((portalId) => {\n if (portalId in allPortalEdgeData && portalIdList.has(allPortalEdgeData[portalId].id)) {\n const portal = allPortalEdgeData[portalId];\n portalEdgeData[portalId] = portal;\n allEdgeLines.push(...portal.lines);\n portal.links.forEach((link) => {\n allEdgeLines.push(...link.lines);\n });\n }\n });\n\n return {\n edgeData: portalEdgeData,\n lines: allEdgeLines,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["turf","GeoJSONRBush","Graph","DagreGraph","alg","cloneDeep","isEmpty","PortalType","getEdge","debugMode","minSnapDistance","indexOfPointOnLine","feature","point","matchIndex","coordEach","currentCoord","coordIndex","featureIndex","multiFeatureIndex","geometryIndex","lineVertex","dist","distance","units","console","log","addIntersectionToFeature","intersectedPoint","doNearbyCheck","arguments","length","undefined","addToLine","line","cleanedFeature","cleanCoords","nearestPoint1","nearestPointOnLine","properties","index","geometry","coordinates","splice","modified","indexOnLine","snap","a","b","getType","currentPoint","snappedPoint","existingVertexOnLine","distToExistingVertexOnLine","findIntersectionsWithSuperset","i","j","id","intersections","lineIntersect","features","intersectedFeature","optimized","tree","load","forEach","line1","bbox1","bbox","possibleMatches","search","title","match","line2","dimension_where","markAsModified","mapBoxDraw","add","getFirstPointFeature","type","getParentDimension","dimension","splitResult","split","lastChildName","parentDimensionValueStrict","replace","concat","DEFAULT_DIMENSION","getPortalEdgeData","portalLinks","allEdgeLines","portalEdgeData","addLink","link","container","cost","direction","wheelchair","description","property_portalLink","edge","property_secondRelatedId","lines","pathFeatures","property_routeData","filter","portalEdge","_objectSpread","push","addNode","mapObjectId","links","portal","escalatorGraph","Object","keys","anchorId","escalator","linksForAnchor","lift","linksForNonAnchor","k","nestedLink","hasNode","setNode","where","taxonomy1Path","hasEdge","setEdge","extrapolateLinks","graph","components","component","reachableNodes","node1","node2","edgeData","nodeEdges","isParallelLink","nodeEdge","nodeToUse","v","w","nodeEdgeData","edgeAsObj","isParallel","removeEdge","addLinkUsingGraph","escalatorEdge","start","performance","now","escalatorGraphEdges","edges","hasOwnProperty","filterPortalEdgeDataByWhere","allPortalEdgeData","whereDimension","portalId","includes","filterPortalEdgeDataByList","portalIdList","has"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.ts"],"sourcesContent":["import { Feature, LineString, GeoJsonProperties, Point } from 'geojson';\nimport * as turf from '@turf/turf';\nimport { Position } from 'geojson';\nimport MapboxDraw from '@mapbox/mapbox-gl-draw';\nimport GeoJSONRBush from 'geojson-rbush';\nimport { Graph as DagreGraph, alg, Edge as GraphEdge } from '@dagrejs/graphlib';\nimport { cloneDeep, isEmpty } from 'lodash';\nimport {\n EdgeLine, Portal, PortalEdge, PortalEdgeData, PortalLinks, PortalType,\n} from './interfaces';\nimport { getEdge } from './mapObjectsHelper';\n\nconst debugMode = false;\n\nexport const minSnapDistance = 1e-3; // meters\ntype turfLineString = Feature<LineString, GeoJsonProperties>;\n\nfunction indexOfPointOnLine(feature: turfLineString, point: Feature<Point, GeoJsonProperties>) {\n let matchIndex = -1;\n turf.coordEach(feature, (currentCoord: number[], coordIndex: number, featureIndex: number, multiFeatureIndex: number, geometryIndex: number) => {\n if (matchIndex === -1) {\n const lineVertex = turf.point(currentCoord);\n const dist = turf.distance(point, lineVertex, {\n units: 'meters',\n });\n if (debugMode) console.log('coordIndex: ', coordIndex, dist);\n if (dist < minSnapDistance) matchIndex = coordIndex;\n }\n });\n\n if (debugMode) console.log('matchIndex: ', matchIndex);\n return matchIndex;\n}\n\nfunction addIntersectionToFeature(\n intersectedPoint: Feature<Point, GeoJsonProperties>,\n feature: turfLineString,\n doNearbyCheck = true,\n) {\n const addToLine = (point: Position, line: turfLineString) => {\n const cleanedFeature = turf.cleanCoords(line);\n const nearestPoint1 = turf.nearestPointOnLine(cleanedFeature, point);\n if (nearestPoint1.properties.index !== undefined) {\n feature.geometry.coordinates.splice(nearestPoint1.properties.index + 1, 0, intersectedPoint.geometry.coordinates);\n if (feature.properties) feature.properties.modified = 1;\n if (debugMode) console.log('added');\n } else if (debugMode) console.log('nearest point on line undefined');\n };\n\n if (doNearbyCheck) {\n const indexOnLine = indexOfPointOnLine(feature, intersectedPoint);\n if (indexOnLine === -1) {\n addToLine(intersectedPoint.geometry.coordinates, feature);\n } else {\n if (debugMode) console.log('should update vertex', indexOnLine);\n feature.geometry.coordinates[indexOnLine] = intersectedPoint.geometry.coordinates;\n if (feature.properties) feature.properties.modified = 1;\n }\n } else {\n addToLine(intersectedPoint.geometry.coordinates, feature);\n }\n}\n\nfunction snap(a: turfLineString, b: turfLineString) {\n if (turf.getType(a) === 'LineString') {\n turf.coordEach(a, (currentCoord: number[], coordIndex: number, featureIndex: number, multiFeatureIndex: number, geometryIndex: number) => {\n const currentPoint = turf.point(currentCoord);\n const cleanedFeature = turf.cleanCoords(b);\n const snappedPoint = turf.nearestPointOnLine(cleanedFeature, currentPoint, { units: 'meters' });\n\n if (snappedPoint\n && snappedPoint.properties.dist !== undefined && snappedPoint.properties.index !== undefined) {\n const existingVertexOnLine = turf.point(b.geometry.coordinates[snappedPoint.properties.index]);\n const distToExistingVertexOnLine = turf.distance(currentPoint, existingVertexOnLine, {\n units: 'meters',\n });\n // If the snappedPoint is close (< minSnapDistance) to a pre-existing vertex then use that vertex instead of adding new\n if (distToExistingVertexOnLine < minSnapDistance) {\n snappedPoint.geometry.coordinates = existingVertexOnLine.geometry.coordinates;\n a.geometry.coordinates[coordIndex] = snappedPoint.geometry.coordinates;\n if (a.properties) a.properties.modified = 1;\n } else\n // Add a new line vertex to b and move vertex of a to the same location\n if (snappedPoint.properties.dist < minSnapDistance) {\n a.geometry.coordinates[coordIndex] = snappedPoint.geometry.coordinates;\n b.geometry.coordinates.splice(snappedPoint.properties.index + 1, 0, snappedPoint.geometry.coordinates);\n if (a.properties) a.properties.modified = 1;\n }\n }\n });\n }\n}\n\n// if required to disable route_edge X route_edge intersection\n//! (a[i].properties.dimension_what === b[i].properties.dimension_what && a[i].properties.dimension_what === RouteDimension.Edge && b[i].properties.dimension_what === RouteDimension.Edge)\n\n// b is a superset which also includes a\nexport function findIntersectionsWithSuperset(a: turfLineString[], b: turfLineString[]) {\n for (let i = 0; i < a.length; i += 1) {\n for (let j = 0; j < b.length; j += 1) {\n if (a[i].id !== b[j].id) {\n // TODO: Optimize for two-way snapping in one call\n snap(a[i], b[j]);\n snap(b[j], a[i]);\n const intersections = turf.lineIntersect(a[i] as any, b[j] as any);\n if (debugMode) console.log('intersections for ', i, j, intersections);\n\n // Add intersection points to the respective LineStrings\n if (intersections.features.length > 0) {\n for (let index = 0; index < intersections.features.length; index += 1) {\n const intersectedFeature = intersections.features[index];\n\n addIntersectionToFeature(intersectedFeature, a[i]);\n addIntersectionToFeature(intersectedFeature, b[j]);\n }\n }\n } else {\n // since b is a super set and is also returned as the final output, so copy latest state in b\n b[j] = a[i];\n }\n }\n }\n\n return b;\n}\n\n// It updates the given feature data inplace, make sure params are passed by reference.\nexport function optimized(a: turfLineString[], b: turfLineString[]) {\n // Step 1: Build spatial index for the second set of LineStrings\n const tree = GeoJSONRBush();\n tree.load(b);\n\n // Step 2: Find potential intersecting pairs using bounding boxes\n a.forEach((line1) => {\n const bbox1 = turf.bbox(line1);\n const possibleMatches = tree.search(bbox1);\n\n if (debugMode) console.log('possible matches for ', line1.properties.title, possibleMatches);\n\n possibleMatches.features.forEach((match) => {\n const line2 = match;\n if (line1.properties && line1.properties.dimension_where\n && line2.properties && line2.properties.dimension_where\n && line1.properties.dimension_where === line2.properties.dimension_where\n ) {\n // Step 3: Perform detailed intersection check\n snap(line1, line2 as any);\n const intersections = turf.lineIntersect(line1 as any, line2 as any);\n if (debugMode) console.log('intersections', intersections);\n\n // Add intersection points to the respective LineStrings\n if (intersections.features.length > 0) {\n for (let j = 0; j < intersections.features.length; j += 1) {\n const intersectedFeature = intersections.features[j];\n\n addIntersectionToFeature(intersectedFeature, line1, false);\n addIntersectionToFeature(intersectedFeature, line2 as any, false);\n }\n }\n }\n });\n });\n}\n\nexport function markAsModified(features: Array<Feature>, mapBoxDraw: MapboxDraw) {\n if (features) {\n for (let index = 0; index < features.length; index += 1) {\n const feature = features[index];\n // modified key is used to mark that a feature was updated by mapboxDraw or custom logic like intersection during the respective editing session\n feature.properties.modified = 1;\n\n mapBoxDraw.add(feature as any);\n }\n }\n}\n\nexport function getFirstPointFeature(features: Feature[]) : Feature | undefined {\n for (let index = 0; index < features.length; index += 1) {\n const feature = features[index];\n const type = turf.getType(feature as any);\n\n if (type === 'Point') {\n return feature;\n }\n }\n\n return undefined;\n}\n\nexport function getParentDimension(dimension: string) {\n const splitResult = dimension.split('.');\n const lastChildName = splitResult[splitResult.length - 1];\n const parentDimensionValueStrict = dimension.replace('.'.concat(lastChildName), '');\n return parentDimensionValueStrict;\n}\n\nexport const DEFAULT_DIMENSION = 'where.singapore';\nexport function getPortalEdgeData(portalLinks: PortalLinks) {\n const allEdgeLines : EdgeLine[] = [];\n const portalEdgeData : { [key: string] : Portal} = {};\n\n const addLink = (link: any, container: PortalEdge[]) => {\n const {\n cost, direction, wheelchair, description,\n } = link.property_portalLink;\n const edge = getEdge(link.property_secondRelatedId);\n if (edge && edge.lines) {\n const pathFeatures = (link.property_routeData && link.property_routeData.features)\n ? (link.property_routeData.features.filter(\n (feature : Feature<LineString, any>) => feature.geometry !== undefined && turf.getType(feature) === 'LineString' && feature.geometry.coordinates.length > 0,\n ))\n : null;\n const portalEdge = {\n ...edge,\n cost,\n direction,\n wheelchair,\n pathFeatures,\n description,\n } as PortalEdge;\n container.push(portalEdge);\n\n allEdgeLines.push(...edge.lines);\n }\n };\n\n const addNode = (mapObjectId: any, links: PortalEdge[]) => {\n const edge = getEdge(mapObjectId);\n if (edge && edge.lines) {\n const portal = {\n ...edge,\n links,\n };\n portalEdgeData[mapObjectId] = portal;\n\n allEdgeLines.push(...edge.lines);\n\n return portal;\n }\n\n return undefined;\n };\n\n console.log('portalData input', portalLinks);\n const escalatorGraph = new DagreGraph();\n if (!isEmpty(portalLinks)) {\n Object.keys(portalLinks).forEach((anchorId) => {\n const { type, links } = portalLinks[anchorId];\n\n if (type !== PortalType.escalator) {\n const linksForAnchor : PortalEdge[] = [];\n for (let j = 0; j < links.length; j += 1) {\n const link = links[j];\n addLink(link, linksForAnchor);\n\n if (type === PortalType.lift) {\n // Extrapolate links for non-anchor lifts\n const linksForNonAnchor : PortalEdge[] = [];\n for (let k = 0; k < links.length; k += 1) {\n const nestedLink = links[k];\n if (nestedLink.property_secondRelatedId !== link.property_secondRelatedId) {\n addLink(nestedLink, linksForNonAnchor);\n }\n }\n if (linksForNonAnchor.length > 0) {\n // Add node for non-anchor lift\n addNode(link.property_secondRelatedId, linksForNonAnchor);\n }\n }\n }\n\n // Add node for anchor\n addNode(anchorId, linksForAnchor);\n } else {\n if (!escalatorGraph.hasNode(anchorId)) {\n const edge = getEdge(anchorId);\n if (edge) {\n escalatorGraph.setNode(anchorId, {\n where: edge.where,\n });\n }\n }\n\n for (let j = 0; j < links.length; j += 1) {\n const link = links[j];\n if (!escalatorGraph.hasNode(link.property_secondRelatedId)) {\n escalatorGraph.setNode(anchorId, {\n where: link.taxonomy1Path,\n });\n }\n\n if (!escalatorGraph.hasEdge(anchorId, link.property_secondRelatedId)) {\n escalatorGraph.setEdge(anchorId, link.property_secondRelatedId, {\n ...link.property_portalLink,\n });\n }\n }\n }\n });\n }\n\n // eslint-disable-next-line no-loop-func\n const extrapolateLinks = (graph: DagreGraph) => {\n const components = alg.components(graph);\n components.forEach((component) => {\n const reachableNodes = component;\n\n // Connect the node directly to each indirectly connected node\n for (let i = 0; i < reachableNodes.length; i += 1) {\n const node1 = reachableNodes[i];\n for (let j = i + 1; j < reachableNodes.length; j += 1) {\n const node2 = reachableNodes[j];\n if (node1 !== node2 && !graph.hasEdge(node1, node2)) {\n let edgeData = {\n cost: 120, direction: 2, wheelchair: true,\n };\n const nodeEdges = graph.nodeEdges(node1);\n let isParallelLink = false;\n if (nodeEdges && nodeEdges.length > 0) {\n for (let k = 0; !isParallelLink && k < nodeEdges.length; k += 1) {\n const nodeEdge = nodeEdges[k];\n\n // check sibling connection with node2\n const nodeToUse = nodeEdge.v === node1 ? nodeEdge.w : nodeEdge.v;\n if (graph.hasEdge(nodeToUse, node2)) {\n const nodeEdgeData = graph.edgeAsObj(nodeToUse, node2);\n if ('isParallel' in nodeEdgeData && nodeEdgeData.isParallel) {\n isParallelLink = true;\n }\n }\n }\n edgeData = graph.edgeAsObj(nodeEdges[0]) as any;\n }\n\n if (!isParallelLink) {\n if (graph.hasEdge(node2, node1)) {\n edgeData = cloneDeep(graph.edgeAsObj(node2, node1) as any);\n if ('direction' in edgeData && edgeData.direction) {\n if (edgeData.direction !== 2) edgeData.direction *= -1;\n }\n }\n graph.setEdge(node1, node2, edgeData);\n }\n }\n }\n }\n\n // Delete all parallel links from graph\n for (let i = 0; i < reachableNodes.length; i += 1) {\n const node1 = reachableNodes[i];\n const nodeEdges = graph.nodeEdges(node1);\n for (let k = 0; nodeEdges && k < nodeEdges.length; k += 1) {\n const nodeEdge = nodeEdges[k];\n const nodeEdgeData = graph.edgeAsObj(nodeEdge);\n if ('isParallel' in nodeEdgeData && nodeEdgeData.isParallel) {\n graph.removeEdge(nodeEdge.v, nodeEdge.w);\n }\n }\n }\n });\n };\n\n const addLinkUsingGraph = (portal: Portal, escalatorEdge: GraphEdge) => {\n const nodeEdgeData = escalatorGraph.edge(escalatorEdge);\n const {\n cost, direction, wheelchair, pathFeatures, description,\n } = nodeEdgeData;\n const edge = getEdge(escalatorEdge.w);\n if (edge && edge.lines) {\n const portalEdge = {\n ...edge,\n cost,\n direction,\n wheelchair,\n pathFeatures,\n description,\n } as PortalEdge;\n portal.links.push(portalEdge);\n allEdgeLines.push(...edge.lines);\n }\n };\n\n const start = performance.now();\n extrapolateLinks(escalatorGraph);\n console.log('time extrapolation: ', (performance.now() - start) / 1000);\n\n // Add escaaltor links to portalEdgeData using the escalator graph\n const escalatorGraphEdges = escalatorGraph.edges();\n for (let i = 0; i < escalatorGraphEdges.length; i += 1) {\n const escalatorEdge = escalatorGraphEdges[i];\n // eslint-disable-next-line no-prototype-builtins\n if (!portalEdgeData.hasOwnProperty(escalatorEdge.v)) {\n // Add node and then add link\n const portal = addNode(escalatorEdge.v, []);\n if (portal) {\n addLinkUsingGraph(portal, escalatorEdge);\n }\n } else {\n const portal = portalEdgeData[escalatorEdge.v];\n addLinkUsingGraph(portal, escalatorEdge);\n }\n }\n\n console.log('portalEdgeData', portalEdgeData);\n return {\n edgeData: portalEdgeData,\n lines: allEdgeLines,\n };\n}\n\nexport function filterPortalEdgeDataByWhere(allPortalEdgeData: PortalEdgeData, whereDimension: string) {\n const allEdgeLines : EdgeLine[] = [];\n const portalEdgeData : { [key: string] : Portal} = {};\n\n // eslint-disable-next-line no-restricted-syntax\n for (const portalId in allPortalEdgeData) {\n if (allPortalEdgeData[portalId].where.includes(whereDimension)) {\n const portal = allPortalEdgeData[portalId];\n portalEdgeData[portalId] = portal;\n allEdgeLines.push(...portal.lines);\n portal.links.forEach((link) => {\n allEdgeLines.push(...link.lines);\n });\n }\n }\n\n return {\n edgeData: portalEdgeData,\n lines: allEdgeLines,\n };\n}\n\nexport function filterPortalEdgeDataByList(allPortalEdgeData: PortalEdgeData, portalIdList: Set<string>) {\n const allEdgeLines : EdgeLine[] = [];\n const portalEdgeData : { [key: string] : Portal} = {};\n\n portalIdList.forEach((portalId) => {\n if (portalId in allPortalEdgeData && portalIdList.has(allPortalEdgeData[portalId].id)) {\n const portal = allPortalEdgeData[portalId];\n portalEdgeData[portalId] = portal;\n allEdgeLines.push(...portal.lines);\n portal.links.forEach((link) => {\n allEdgeLines.push(...link.lines);\n });\n }\n });\n\n return {\n edgeData: portalEdgeData,\n lines: allEdgeLines,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
{
|
|
2
|
+
"food": [
|
|
3
|
+
"what.shop.food_anchor",
|
|
4
|
+
"what.shop.food"
|
|
5
|
+
],
|
|
6
|
+
"fun": [
|
|
7
|
+
"what.shop.fun"
|
|
8
|
+
],
|
|
9
|
+
"retail": [
|
|
10
|
+
"what.shop.retail_anchor",
|
|
11
|
+
"what.shop.retail"
|
|
12
|
+
],
|
|
13
|
+
"carpark": [
|
|
14
|
+
"what.infra.carpark"
|
|
15
|
+
],
|
|
16
|
+
"entrance": [
|
|
17
|
+
"what.infra.entrance"
|
|
18
|
+
],
|
|
19
|
+
"exit": [
|
|
20
|
+
"what.infra.exit"
|
|
21
|
+
],
|
|
22
|
+
"escalator": [
|
|
23
|
+
"what.infra.escalator"
|
|
24
|
+
],
|
|
25
|
+
"lift": [
|
|
26
|
+
"what.infra.lift"
|
|
27
|
+
],
|
|
28
|
+
"stairs": [
|
|
29
|
+
"what.infra.stairs"
|
|
30
|
+
],
|
|
31
|
+
"bicycle parking": [
|
|
32
|
+
"what.infra.parking_bike"
|
|
33
|
+
],
|
|
34
|
+
"bicycle locker": [
|
|
35
|
+
"what.infra.parking_bike_locked"
|
|
36
|
+
],
|
|
37
|
+
"airport transfer": [
|
|
38
|
+
"what.service.airport_transfer"
|
|
39
|
+
],
|
|
40
|
+
"immigration": [
|
|
41
|
+
"what.service.immigration"
|
|
42
|
+
],
|
|
43
|
+
"ground transport concierge": [
|
|
44
|
+
"what.service.ground_transport_concierge"
|
|
45
|
+
],
|
|
46
|
+
"tax refund": [
|
|
47
|
+
"what.service.tax_refund"
|
|
48
|
+
],
|
|
49
|
+
"information": [
|
|
50
|
+
"what.service.information"
|
|
51
|
+
],
|
|
52
|
+
"baggage claim": [
|
|
53
|
+
"what.service.baggage_claim"
|
|
54
|
+
],
|
|
55
|
+
"baggage storage": [
|
|
56
|
+
"what.service.baggage_storage"
|
|
57
|
+
],
|
|
58
|
+
"checkin": [
|
|
59
|
+
"what.service.checkin"
|
|
60
|
+
],
|
|
61
|
+
"checkin early": [
|
|
62
|
+
"what.service.checkin_early"
|
|
63
|
+
],
|
|
64
|
+
"money exchange": [
|
|
65
|
+
"what.service.money_exchange"
|
|
66
|
+
],
|
|
67
|
+
"movie theatre": [
|
|
68
|
+
"what.service.movie_theatre"
|
|
69
|
+
],
|
|
70
|
+
"changi rewards": [
|
|
71
|
+
"what.service.changi_rewards"
|
|
72
|
+
],
|
|
73
|
+
"connect changi": [
|
|
74
|
+
"what.service.connect_changi"
|
|
75
|
+
],
|
|
76
|
+
"attraction tour": [
|
|
77
|
+
"what.service.attraction_tour"
|
|
78
|
+
],
|
|
79
|
+
"atm": [
|
|
80
|
+
"what.service.atm"
|
|
81
|
+
],
|
|
82
|
+
"charging point": [
|
|
83
|
+
"what.service.device_charging"
|
|
84
|
+
],
|
|
85
|
+
"internet": [
|
|
86
|
+
"what.service.internet"
|
|
87
|
+
],
|
|
88
|
+
"clinic": [
|
|
89
|
+
"what.service.clinic"
|
|
90
|
+
],
|
|
91
|
+
"lost and found": [
|
|
92
|
+
"what.service.lost_and_found"
|
|
93
|
+
],
|
|
94
|
+
"post": [
|
|
95
|
+
"what.service.post"
|
|
96
|
+
],
|
|
97
|
+
"airline lounge": [
|
|
98
|
+
"what.service.airline_lounge"
|
|
99
|
+
],
|
|
100
|
+
"changi lounge": [
|
|
101
|
+
"what.service.lounge_changi"
|
|
102
|
+
],
|
|
103
|
+
"pay per use lounge": [
|
|
104
|
+
"what.service.pay_per_use_lounge"
|
|
105
|
+
],
|
|
106
|
+
"tv lounge": [
|
|
107
|
+
"what.service.tv_lounge"
|
|
108
|
+
],
|
|
109
|
+
"lodging": [
|
|
110
|
+
"what.service.lodging"
|
|
111
|
+
],
|
|
112
|
+
"meditation room": [
|
|
113
|
+
"what.service.meditation_room"
|
|
114
|
+
],
|
|
115
|
+
"prayer room": [
|
|
116
|
+
"what.service.prayer_room"
|
|
117
|
+
],
|
|
118
|
+
"rest area": [
|
|
119
|
+
"what.service.rest_area"
|
|
120
|
+
],
|
|
121
|
+
"smoking area": [
|
|
122
|
+
"what.service.smoking_area"
|
|
123
|
+
],
|
|
124
|
+
"adult diaper change": [
|
|
125
|
+
"what.service.adult_diaper_change"
|
|
126
|
+
],
|
|
127
|
+
"baby care": [
|
|
128
|
+
"what.service.baby_care"
|
|
129
|
+
],
|
|
130
|
+
"shower": [
|
|
131
|
+
"what.service.shower"
|
|
132
|
+
],
|
|
133
|
+
"toilet": [
|
|
134
|
+
"what.service.toilet"
|
|
135
|
+
],
|
|
136
|
+
"toilet accessible": [
|
|
137
|
+
"what.service.toilet_accessible"
|
|
138
|
+
],
|
|
139
|
+
"transit entry": [
|
|
140
|
+
"what.transit.transit_entry"
|
|
141
|
+
],
|
|
142
|
+
"transit exit": [
|
|
143
|
+
"what.transit.transit_exit"
|
|
144
|
+
],
|
|
145
|
+
"bus": [
|
|
146
|
+
"what.transport.bus",
|
|
147
|
+
"what.transport.type_bus"
|
|
148
|
+
],
|
|
149
|
+
"meeting point": [
|
|
150
|
+
"what.transport.meeting_point"
|
|
151
|
+
],
|
|
152
|
+
"pickup": [
|
|
153
|
+
"what.transport.pickup"
|
|
154
|
+
],
|
|
155
|
+
"skytrain": [
|
|
156
|
+
"what.transport.skytrain"
|
|
157
|
+
],
|
|
158
|
+
"taxi queue": [
|
|
159
|
+
"what.transport.taxi_queue"
|
|
160
|
+
],
|
|
161
|
+
"train": [
|
|
162
|
+
"what.transport.train"
|
|
163
|
+
],
|
|
164
|
+
"airplane gate": [
|
|
165
|
+
"what.airplane_gate"
|
|
166
|
+
],
|
|
167
|
+
"security": [
|
|
168
|
+
"what.security"
|
|
169
|
+
]
|
|
170
|
+
}
|