@twinmatrix/spatialverse-sdk-web 0.0.3 → 0.0.4
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/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/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/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/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/meta-atlas-sdk-core.js +34 -31
- 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/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","_interopRequireWildcard","require","_geojsonRbush","_interopRequireDefault","_graphlib","_lodash","_interfaces","_mapObjectsHelper","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","debugMode","minSnapDistance","exports","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","j","id","intersections","lineIntersect","features","intersectedFeature","optimized","tree","GeoJSONRBush","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","getEdge","property_secondRelatedId","lines","pathFeatures","property_routeData","filter","portalEdge","push","addNode","mapObjectId","links","portal","escalatorGraph","DagreGraph","isEmpty","keys","anchorId","PortalType","escalator","linksForAnchor","lift","linksForNonAnchor","k","nestedLink","hasNode","setNode","where","taxonomy1Path","hasEdge","setEdge","extrapolateLinks","graph","components","alg","component","reachableNodes","node1","node2","edgeData","nodeEdges","isParallelLink","nodeEdge","nodeToUse","v","w","nodeEdgeData","edgeAsObj","isParallel","cloneDeep","removeEdge","addLinkUsingGraph","escalatorEdge","start","performance","now","escalatorGraphEdges","edges","filterPortalEdgeDataByWhere","allPortalEdgeData","whereDimension","portalId","includes","filterPortalEdgeDataByList","portalIdList"],"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","_interopRequireWildcard","require","_geojsonRbush","_interopRequireDefault","_graphlib","_lodash","_interfaces","_mapObjectsHelper","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","debugMode","minSnapDistance","exports","indexOfPointOnLine","feature","point","matchIndex","coordEach","currentCoord","coordIndex","featureIndex","multiFeatureIndex","geometryIndex","lineVertex","dist","distance","units","console","log","addIntersectionToFeature","intersectedPoint","doNearbyCheck","undefined","addToLine","line","cleanedFeature","cleanCoords","nearestPoint1","nearestPointOnLine","properties","index","geometry","coordinates","splice","modified","indexOnLine","snap","a","b","getType","currentPoint","snappedPoint","existingVertexOnLine","distToExistingVertexOnLine","findIntersectionsWithSuperset","j","id","intersections","lineIntersect","features","intersectedFeature","optimized","tree","GeoJSONRBush","load","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","getEdge","property_secondRelatedId","lines","pathFeatures","property_routeData","portalEdge","addNode","mapObjectId","links","portal","escalatorGraph","DagreGraph","isEmpty","anchorId","PortalType","escalator","linksForAnchor","lift","linksForNonAnchor","k","nestedLink","hasNode","setNode","where","taxonomy1Path","hasEdge","setEdge","extrapolateLinks","graph","components","alg","component","reachableNodes","node1","node2","edgeData","nodeEdges","isParallelLink","nodeEdge","nodeToUse","v","w","nodeEdgeData","edgeAsObj","isParallel","cloneDeep","removeEdge","addLinkUsingGraph","escalatorEdge","start","performance","now","escalatorGraphEdges","edges","filterPortalEdgeDataByWhere","allPortalEdgeData","whereDimension","portalId","includes","filterPortalEdgeDataByList","portalIdList"],"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":[]}
|
|
@@ -26,7 +26,11 @@ var _customerLayerVariant = _interopRequireDefault(require("./customerLayerVaria
|
|
|
26
26
|
var _booleanPointInPolygon = _interopRequireDefault(require("@turf/boolean-point-in-polygon"));
|
|
27
27
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
28
28
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
29
|
-
|
|
29
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
30
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
31
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
32
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
33
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // const maplibregl = require('maplibre-gl');
|
|
30
34
|
var FilterType = /*#__PURE__*/function (FilterType) {
|
|
31
35
|
FilterType["Name"] = "title";
|
|
32
36
|
FilterType["LocalRef"] = "localRef";
|
|
@@ -47,30 +51,6 @@ let EventSource = exports.EventSource = /*#__PURE__*/function (EventSource) {
|
|
|
47
51
|
}({});
|
|
48
52
|
const DEFAULT_MAP_STYLE = exports.DEFAULT_MAP_STYLE = 'https://api.maptiler.com/maps/01985ac8-56d2-707b-afa8-68abfe8f18be/style.json?key=12H5hrITUbJ1sDrVPqkq';
|
|
49
53
|
class MetaAtlasSdk {
|
|
50
|
-
onLoadCallback = (() => undefined)();
|
|
51
|
-
onLoadFailCallback = (() => undefined)();
|
|
52
|
-
mapLoaded = false;
|
|
53
|
-
onFailCallbackSent = false;
|
|
54
|
-
UserLayers = [];
|
|
55
|
-
defaultFocusedTaxonomy = 'where.gbtb';
|
|
56
|
-
currentFocus = this.defaultFocusedTaxonomy;
|
|
57
|
-
apiAuthenticationCallbackReceived = false;
|
|
58
|
-
routingVisualizer = (() => new _index.RoutingVisualizer(this))();
|
|
59
|
-
// When token middleware is online that will check the tokens.
|
|
60
|
-
tileServer = 'https://atoms-map-tiles-middleware.sandbox.spatialverse.online';
|
|
61
|
-
// HOST = 'https://atoms-sdk.qa.cag.spatialverse.online/2.0.0/';
|
|
62
|
-
HOST = 'https://atoms-sdk.sandbox.spatialverse.online/';
|
|
63
|
-
//empApiURL = 'https://atoms-api.changiairport.com';
|
|
64
|
-
empApiURL = 'https://atoms-api.sandbox.spatialverse.online';
|
|
65
|
-
// empApiURL = 'https://atoms-api.dev.cag.spatialverse.online';
|
|
66
|
-
|
|
67
|
-
mapBoxDrawSourceID = 'drawnDataSource';
|
|
68
|
-
drawGeojsonData = (() => ({
|
|
69
|
-
type: 'FeatureCollection',
|
|
70
|
-
features: []
|
|
71
|
-
}))();
|
|
72
|
-
popups = [];
|
|
73
|
-
markers = [];
|
|
74
54
|
setupFirebase() {
|
|
75
55
|
const firebaseConfig = {
|
|
76
56
|
apiKey: "AIzaSyBDWO2wNkotbgjbkyqVrC_OEAJ3mbvlheI",
|
|
@@ -132,6 +112,63 @@ class MetaAtlasSdk {
|
|
|
132
112
|
let onLoadFail = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : errorMessage => {};
|
|
133
113
|
let onRoutingStatusUpdate = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => {};
|
|
134
114
|
let onSearchStatusUpdate = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : () => {};
|
|
115
|
+
_defineProperty(this, "onLoadCallback", undefined);
|
|
116
|
+
_defineProperty(this, "onLoadFailCallback", undefined);
|
|
117
|
+
_defineProperty(this, "mapLoaded", false);
|
|
118
|
+
_defineProperty(this, "onFailCallbackSent", false);
|
|
119
|
+
_defineProperty(this, "UserLayers", []);
|
|
120
|
+
_defineProperty(this, "defaultFocusedTaxonomy", 'where.gbtb');
|
|
121
|
+
_defineProperty(this, "currentFocus", this.defaultFocusedTaxonomy);
|
|
122
|
+
_defineProperty(this, "apiAuthenticationCallbackReceived", false);
|
|
123
|
+
_defineProperty(this, "routingVisualizer", new _index.RoutingVisualizer(this));
|
|
124
|
+
// When token middleware is online that will check the tokens.
|
|
125
|
+
_defineProperty(this, "tileServer", 'https://atoms-map-tiles-middleware.sandbox.spatialverse.online');
|
|
126
|
+
// HOST = 'https://atoms-sdk.qa.cag.spatialverse.online/2.0.0/';
|
|
127
|
+
_defineProperty(this, "HOST", 'https://atoms-sdk.sandbox.spatialverse.online/');
|
|
128
|
+
//empApiURL = 'https://atoms-api.changiairport.com';
|
|
129
|
+
_defineProperty(this, "empApiURL", 'https://atoms-api.sandbox.spatialverse.online');
|
|
130
|
+
// empApiURL = 'https://atoms-api.dev.cag.spatialverse.online';
|
|
131
|
+
_defineProperty(this, "mapBoxDrawSourceID", 'drawnDataSource');
|
|
132
|
+
_defineProperty(this, "drawGeojsonData", {
|
|
133
|
+
type: 'FeatureCollection',
|
|
134
|
+
features: []
|
|
135
|
+
});
|
|
136
|
+
_defineProperty(this, "popups", []);
|
|
137
|
+
_defineProperty(this, "markers", []);
|
|
138
|
+
_defineProperty(this, "addCustomerLayer", (map, jsonToPass, onLoaded) => {
|
|
139
|
+
let customerLayerUrl = jsonToPass.customerLayerUrl;
|
|
140
|
+
let sourceLayer = jsonToPass.sourceLayer;
|
|
141
|
+
_jquery.default.getJSON(customerLayerUrl, customerLayers => {
|
|
142
|
+
this.CustomerLayers = customerLayers;
|
|
143
|
+
for (const layer of this.CustomerLayers) {
|
|
144
|
+
layer["source-layer"] = sourceLayer;
|
|
145
|
+
map.addLayer(layer);
|
|
146
|
+
this.map.on('click', layer.id, e => {
|
|
147
|
+
//setup new clicked feature
|
|
148
|
+
const clickedFeature = e.features[0];
|
|
149
|
+
this.overRideSelectionOfDrawnPointGeometry(clickedFeature);
|
|
150
|
+
console.log('clickedFeature: ', clickedFeature);
|
|
151
|
+
this.logAnalyticsEvent('feature_clicked', {
|
|
152
|
+
feature_clicked: clickedFeature.properties.title
|
|
153
|
+
});
|
|
154
|
+
if (clickedFeature.properties.isSearchable && clickedFeature.properties.title != 'Transit' && clickedFeature.properties.title != 'Public') {
|
|
155
|
+
const coords = clickedFeature.geometry.type === "Polygon" ? JSON.parse(clickedFeature.properties.center) : clickedFeature.geometry.coordinates;
|
|
156
|
+
this.metaAtlasCore.setLastClickedFeature({
|
|
157
|
+
mapObjectId: clickedFeature.properties.myMapObjectId,
|
|
158
|
+
coordinates: coords,
|
|
159
|
+
name: clickedFeature.properties.title,
|
|
160
|
+
whatDimension: clickedFeature.properties.dimension_what,
|
|
161
|
+
whereDimension: clickedFeature.properties.dimension_where,
|
|
162
|
+
geometry: clickedFeature.geometry,
|
|
163
|
+
properties: clickedFeature.properties,
|
|
164
|
+
clickEvent: e
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
onLoaded();
|
|
170
|
+
});
|
|
171
|
+
});
|
|
135
172
|
this.accessToken = accessToken;
|
|
136
173
|
this.secretKey = secretKey;
|
|
137
174
|
this.onLoadCallback = onLoad;
|
|
@@ -241,11 +278,10 @@ class MetaAtlasSdk {
|
|
|
241
278
|
this.mapBoxDraw = new _mapboxGlDraw.default({
|
|
242
279
|
displayControlsDefault: false,
|
|
243
280
|
userProperties: true,
|
|
244
|
-
modes: {
|
|
245
|
-
..._mapboxGlDraw.default.modes,
|
|
281
|
+
modes: _objectSpread(_objectSpread({}, _mapboxGlDraw.default.modes), {}, {
|
|
246
282
|
draw_marker: _draw_marker.default,
|
|
247
283
|
marker_select: _marker_select.default
|
|
248
|
-
},
|
|
284
|
+
}),
|
|
249
285
|
styles: _customStyles.mapBoxDrawDefaultStyles
|
|
250
286
|
});
|
|
251
287
|
this.map.addControl(this.mapBoxDraw);
|
|
@@ -276,40 +312,6 @@ class MetaAtlasSdk {
|
|
|
276
312
|
this.mapLoaded = true;
|
|
277
313
|
this.onLoad();
|
|
278
314
|
}
|
|
279
|
-
addCustomerLayer = (map, jsonToPass, onLoaded) => {
|
|
280
|
-
let customerLayerUrl = jsonToPass.customerLayerUrl;
|
|
281
|
-
let sourceLayer = jsonToPass.sourceLayer;
|
|
282
|
-
_jquery.default.getJSON(customerLayerUrl, customerLayers => {
|
|
283
|
-
this.CustomerLayers = customerLayers;
|
|
284
|
-
for (const layer of this.CustomerLayers) {
|
|
285
|
-
layer["source-layer"] = sourceLayer;
|
|
286
|
-
map.addLayer(layer);
|
|
287
|
-
this.map.on('click', layer.id, e => {
|
|
288
|
-
//setup new clicked feature
|
|
289
|
-
const clickedFeature = e.features[0];
|
|
290
|
-
this.overRideSelectionOfDrawnPointGeometry(clickedFeature);
|
|
291
|
-
console.log('clickedFeature: ', clickedFeature);
|
|
292
|
-
this.logAnalyticsEvent('feature_clicked', {
|
|
293
|
-
feature_clicked: clickedFeature.properties.title
|
|
294
|
-
});
|
|
295
|
-
if (clickedFeature.properties.isSearchable && clickedFeature.properties.title != 'Transit' && clickedFeature.properties.title != 'Public') {
|
|
296
|
-
const coords = clickedFeature.geometry.type === "Polygon" ? JSON.parse(clickedFeature.properties.center) : clickedFeature.geometry.coordinates;
|
|
297
|
-
this.metaAtlasCore.setLastClickedFeature({
|
|
298
|
-
mapObjectId: clickedFeature.properties.myMapObjectId,
|
|
299
|
-
coordinates: coords,
|
|
300
|
-
name: clickedFeature.properties.title,
|
|
301
|
-
whatDimension: clickedFeature.properties.dimension_what,
|
|
302
|
-
whereDimension: clickedFeature.properties.dimension_where,
|
|
303
|
-
geometry: clickedFeature.geometry,
|
|
304
|
-
properties: clickedFeature.properties,
|
|
305
|
-
clickEvent: e
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
onLoaded();
|
|
311
|
-
});
|
|
312
|
-
};
|
|
313
315
|
overRideSelectionOfDrawnPointGeometry(feature) {
|
|
314
316
|
// Check if a drawn point geometry is currently selected, it will be consider selected both in highlighted & non-highlighted state.
|
|
315
317
|
if (this.mapBoxDraw && this.mapBoxDraw.getMode() === 'simple_select' && this.mapBoxDraw.getAll().features.length === 1) {
|
|
@@ -389,8 +391,9 @@ class MetaAtlasSdk {
|
|
|
389
391
|
}
|
|
390
392
|
dropMarkerForRouting(destinations) {
|
|
391
393
|
destinations.forEach(destination => {
|
|
394
|
+
var _destination$selected, _destination$selected2;
|
|
392
395
|
console.log(destination.selectedLocation, 'destination.selectedLocation');
|
|
393
|
-
const coordinates = destination.selectedLocation
|
|
396
|
+
const coordinates = (_destination$selected = destination.selectedLocation) !== null && _destination$selected !== void 0 && _destination$selected.coordinates ? destination.selectedLocation.coordinates : (_destination$selected2 = destination.selectedLocation) === null || _destination$selected2 === void 0 || (_destination$selected2 = _destination$selected2.geometry) === null || _destination$selected2 === void 0 ? void 0 : _destination$selected2.coordinates;
|
|
394
397
|
console.log(coordinates, 'Coordinates'); // Debugging line
|
|
395
398
|
|
|
396
399
|
if (coordinates && coordinates.length === 2) {
|
|
@@ -435,9 +438,9 @@ class MetaAtlasSdk {
|
|
|
435
438
|
if (popupElem) {
|
|
436
439
|
popupElem.style.display = 'none';
|
|
437
440
|
}
|
|
438
|
-
console.log(
|
|
441
|
+
console.log("Pin with ID: ".concat(targetPinId, " is now hidden."));
|
|
439
442
|
} else {
|
|
440
|
-
console.warn(
|
|
443
|
+
console.warn("Pin with ID: ".concat(targetPinId, " not found."));
|
|
441
444
|
}
|
|
442
445
|
}
|
|
443
446
|
hidePins() {
|
|
@@ -470,9 +473,9 @@ class MetaAtlasSdk {
|
|
|
470
473
|
if (popupElem) {
|
|
471
474
|
popupElem.style.display = 'flex';
|
|
472
475
|
}
|
|
473
|
-
console.log(
|
|
476
|
+
console.log("Pin with ID: ".concat(targetPinId, " is now visible."));
|
|
474
477
|
} else {
|
|
475
|
-
console.warn(
|
|
478
|
+
console.warn("Pin with ID: ".concat(targetPinId, " not found."));
|
|
476
479
|
}
|
|
477
480
|
}
|
|
478
481
|
showPins() {
|
|
@@ -497,7 +500,7 @@ class MetaAtlasSdk {
|
|
|
497
500
|
} else {
|
|
498
501
|
targetPinIndex = this.popups.findIndex(pin => pin.id === pinId);
|
|
499
502
|
if (targetPinIndex === -1) {
|
|
500
|
-
console.warn(
|
|
503
|
+
console.warn("Pin with ID: ".concat(pinId, " not found."));
|
|
501
504
|
return;
|
|
502
505
|
}
|
|
503
506
|
}
|
|
@@ -761,7 +764,8 @@ class MetaAtlasSdk {
|
|
|
761
764
|
return new Promise(resolve => {
|
|
762
765
|
if (typeof id !== 'string') resolve('User GPS Location');
|
|
763
766
|
ref.getMapObjectById(id, mapObj => {
|
|
764
|
-
|
|
767
|
+
var _mapObj$;
|
|
768
|
+
resolve((_mapObj$ = mapObj[0]) === null || _mapObj$ === void 0 ? void 0 : _mapObj$.name);
|
|
765
769
|
});
|
|
766
770
|
});
|
|
767
771
|
};
|