@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":"index.js","names":["_ngraph","require","_ngraph2","_interopRequireDefault","_helpers","turf","_interopRequireWildcard","_lodash","_interfaces","_mapObjectsHelper","_routingHelpers","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","arguments","length","undefined","vertexName","toString","vertex","getNode","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","WALK_SPEED","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point","point2","distance","units","addEdgeToGraph","edge","node","index","line","getCoords","RouteDimension","Edge","properties","direction","LineDirection","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","toInteger","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","isPortalTaxonomy","console","warn","portalPath","isMovingPortalTaxonomy","getPortalPath","invertStart","prevVertexMapObjId","Set","add","portalDataForSet","filterPortalEdgeDataByList","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","multiPoint","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","cloneDeep","result","routes","findPath","pathFinder","aStar","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","getParentDimension","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","createGraph","geojsonPath","getRouteWithAllPortals","performance","now","getNetworkFeatures","DEFAULT_DIMENSION","concatenatedEdgeFeatures","concat","concatenatedNetworkFeatures","optimized","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","filterPortalEdgeDataByWhere","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","getEdge","node2","getPortalDataForDimension","runRouteIteration","directRoute","isEmpty","routeWithAllPortals","finalRoute","route","_default","exports"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/index.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport { aStar } from 'ngraph.path';\nimport createGraph, { Graph, Node } from 'ngraph.graph';\nimport {\n point,\n multiPoint,\n} from '@turf/helpers';\nimport { Feature, LineString, MultiPoint } from 'geojson';\n// import turfDistance from '@turf/distance';\nimport * as turf from '@turf/turf';\nimport { cloneDeep, isEmpty, toInteger } from 'lodash';\nimport {\n CalculationResult, Edge, LineDirection, RouteDimension, RouteResult, WALK_SPEED, EdgeLine, Portal, PortalEdgeData, UserPosition\n} from './interfaces';\nimport {\n getNetworkFeatures, getEdge,\n getPortalDataForDimension,\n} from './mapObjectsHelper';\nimport { isMovingPortalTaxonomy, isPortalTaxonomy } from './routing-helpers';\nimport {\n DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, getPortalEdgeData, optimized,\n} from './utils';\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst RoutingCore = (function () {\n let wheelChairAccessibleRouteOnly = true;\n let startNode: Edge | undefined;\n let endNode: Edge | undefined;\n let changeZoneCheckEnabled = true;\n let runIntersection = false;\n\n let portalData: {\n edgeData: PortalEdgeData,\n lines: EdgeLine[],\n } = { edgeData: {}, lines: [] };\n\n function addVertex(\n graph: Graph,\n coords: number[],\n mapObjectId: string,\n where: string,\n what: string,\n zone: string,\n updateMapObjectId = false,\n ) {\n const vertexName = `${(coords).toString()},${where}`;\n let vertex = graph.getNode(vertexName);\n if (vertex === undefined) {\n const data = {\n mapObjectId,\n coords,\n where,\n what,\n zone,\n zoneUnionVertex: false,\n };\n vertex = graph.addNode(vertexName, data);\n } else if (updateMapObjectId) {\n vertex.data.mapObjectId = mapObjectId;\n\n // Mark the vertex as common vertex between zones\n if (vertex.data.zone !== zone) vertex.data.zoneUnionVertex = true;\n vertex.data.zone = zone;\n }\n return vertex;\n }\n\n function addLink(graph: Graph<any, any>, vertex1 : Node<any>, vertex2 : Node<any>, data :{\n wheelChairAccesible: number,\n cost: number,\n isPortal: boolean,\n description: string | null,\n }) {\n const { cost, description } = data;\n const timeInSeconds = data.isPortal ? cost / WALK_SPEED : cost;\n if (!wheelChairAccessibleRouteOnly || (wheelChairAccessibleRouteOnly && data.wheelChairAccesible)) { graph.addLink(vertex1.id, vertex2.id, { weight: timeInSeconds, cost, description }); }\n }\n\n function getDistance(coords1: number[], coords2: number[]) {\n const point1 = point(coords1);\n const point2 = point(coords2);\n const distance = turf.distance(point1, point2, { units: 'meters' });\n return distance;\n }\n\n function addEdgeToGraph(graph: Graph, edge: Edge) {\n const node = edge;\n if (node) {\n const vertex = addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n for (let index = 0; index < node.lines.length; index += 1) {\n const line = node.lines[index];\n // add edges for coord pairs\n const coords = turf.getCoords(line);\n for (let i = 0; i < coords.length - 1; i += 1) {\n const vertex1 = addVertex(\n graph,\n coords[i],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n const vertex2 = addVertex(\n graph,\n coords[i + 1],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(coords[i], coords[i + 1]);\n if (line.properties.direction === LineDirection.Forward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (line.properties.direction === LineDirection.Backward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n return vertex;\n }\n\n return undefined;\n }\n\n function addNetworkToGraph(graph: Graph, networkFeatures: Feature[]) {\n for (let index = 0; index < networkFeatures.length; index += 1) {\n const feature = networkFeatures[index];\n if (feature.geometry.type === 'LineString') {\n // get line\n const lineCoords = turf.getCoords(feature as any);\n if (feature.properties) {\n const where = feature.properties.dimension_where;\n const what = RouteDimension.Network; // feature.properties.dimension_what;\n const { zone } = feature.properties;\n // add edges for coord pairs\n for (let i = 0; i < lineCoords.length - 1; i += 1) {\n const vertex1 = addVertex(graph, lineCoords[i], 'vertex', where, what, zone, true);\n const vertex2 = addVertex(\n graph,\n lineCoords[i + 1],\n 'vertex',\n where,\n what,\n zone,\n true,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(lineCoords[i], lineCoords[i + 1]);\n if (feature.properties.direction === LineDirection.Forward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (feature.properties.direction === LineDirection.Backward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n }\n }\n }\n\n function addVertexByEdge(graph: Graph, edge: Edge) {\n const node = edge;\n if (node === undefined) {\n return undefined;\n }\n return addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n }\n\n function addPortalLinksToGraph(graph: Graph, portalEdgeData: PortalEdgeData) {\n for (const mapObjectId1 in portalEdgeData) {\n const portal = portalEdgeData[mapObjectId1];\n\n for (let index = 0; index < portal.links.length; index += 1) {\n const portalLink = portal.links[index];\n let { cost } = portalLink;\n cost = toInteger(cost);\n // if (cost <= 1) {\n // cost = portalWeight;\n // }\n const { direction, wheelchair, description } = portalLink;\n const portal1 = addVertexByEdge(graph, portal);\n const portal2 = addVertexByEdge(graph, portalLink);\n if (portal1 !== undefined && portal2 !== undefined && portal1.id !== portal2.id) {\n if (direction === LineDirection.Forward || direction === LineDirection.TwoWay) {\n addLink(graph, portal1, portal2, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n if (direction === LineDirection.Backward || direction === LineDirection.TwoWay) {\n addLink(graph, portal2, portal1, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n\n addEdgeToGraph(graph, portalLink);\n }\n }\n\n addEdgeToGraph(graph, portal);\n }\n }\n\n function initLineString(vertex: any) {\n return {\n type: 'Feature',\n geometry: { type: 'LineString', coordinates: [vertex.data.coords] },\n properties: {\n dimension_where: vertex.data.where,\n zone: vertex.data.zone,\n cost: 0,\n },\n } as Feature<LineString | MultiPoint, any>;\n }\n\n function pathToFeatures(source: Edge, destination : Edge, vertices: Node<any>[], graph: Graph) {\n if (vertices.length <= 1) {\n return {} as CalculationResult;\n } // if no path found\n\n const startNode = source;\n const endNode = destination;\n\n const segments: RouteResult[] = [];\n let segmentStartVertexData = vertices[0].data;\n const geojsonPaths = [initLineString(vertices[0])];\n\n for (let i = 1; i < vertices.length; i += 1) {\n const curVertex = vertices[i];\n const prevVertex = vertices[i - 1];\n const line = geojsonPaths[geojsonPaths.length - 1];\n\n // if vertex is map object\n if (curVertex.data.mapObjectId !== 'vertex' || curVertex.data.zoneUnionVertex) {\n let segment;\n if (isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what)) {\n if (prevVertex.data.zone !== curVertex.data.zone) {\n console.warn('A portal is triggering a change in zone');\n }\n\n // check if portal path is available to visualize\n let portalPath;\n if (isMovingPortalTaxonomy(prevVertex.data.what)) {\n const getPortalPath = (portalEdgeData: PortalEdgeData, curVertex: Node<any>, prevVertex: Node<any>, invertStart = false) => {\n const prevVertexMapObjId = prevVertex.data.mapObjectId;\n const set = new Set<string>().add(prevVertexMapObjId);\n const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);\n if (portalDataForSet && portalDataForSet.edgeData[prevVertexMapObjId]) {\n const prevVertexPortalData = portalDataForSet.edgeData[prevVertexMapObjId];\n for (let j = 0; j < prevVertexPortalData.links.length; j += 1) {\n const link = prevVertexPortalData.links[j];\n if (link.id === curVertex.data.mapObjectId) {\n if (link.pathFeatures && link.pathFeatures.length > 0) {\n const line = link.pathFeatures[0];\n const start = invertStart === false ? prevVertex.data.coords : curVertex.data.coords;\n const end = invertStart === false ? curVertex.data.coords : prevVertex.data.coords;\n\n const distanceToStart = turf.distance(start, line.geometry.coordinates[0]);\n const distanceToEnd = turf.distance(end, line.geometry.coordinates[0]);\n const coordsToUse = distanceToStart < distanceToEnd ? line.geometry.coordinates : line.geometry.coordinates.slice().reverse();\n return turf.lineString(coordsToUse);\n }\n }\n }\n }\n\n return null;\n };\n\n portalPath = getPortalPath(portalData.edgeData, curVertex, prevVertex, false);\n if (!portalPath) portalPath = getPortalPath(portalData.edgeData, prevVertex, curVertex, true);\n }\n\n // TODO: read description here\n const link = graph.getLink(prevVertex.id, curVertex.id);\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n const description = link ? link.data.description ? link.data.description : undefined : undefined;\n segment = {\n geojson: multiPoint([\n prevVertex.data.coords,\n curVertex.data.coords,\n ], {\n zone: curVertex.data.zone,\n }),\n edges: [prevVertex.data.mapObjectId, curVertex.data.mapObjectId],\n startFloor: prevVertex.data.where,\n endFloor: curVertex.data.where,\n isPortal: true,\n portalPath,\n cost,\n description,\n } as RouteResult;\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n } else {\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (curVertex.data.zoneUnionVertex\n && (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone)) {\n console.log('ignore zoneUnionVertex in segment');\n } else {\n segment = {\n geojson: line,\n edges: [segmentStartVertexData.mapObjectId, curVertex.data.mapObjectId],\n startFloor: segmentStartVertexData.where,\n endFloor: segmentStartVertexData.where,\n isPortal: false,\n portalPath: undefined,\n cost: line.properties.cost,\n };\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n }\n }\n }\n\n // same line\n if (!(isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what))) {\n const link = graph.getLink(prevVertex.id, curVertex.id); // returns a link from 'hello' to 'world'\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n\n line.geometry.coordinates.push(curVertex.data.coords);\n line.properties.cost += cost;\n } else {\n // new line\n if (line.geometry.coordinates.length < 2) {\n geojsonPaths.pop();\n }\n geojsonPaths.push(initLineString(curVertex));\n }\n\n // new line due to change in zone\n if (curVertex.data.zoneUnionVertex) {\n const prevVertex = (i > 0) ? vertices[i - 1] : undefined;\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone) {\n console.log('ignore zoneUnionVertex');\n } else\n // Use zone value of next vertex (when available) as current vertex is a common vertex and can have either of the zone values\n if (nextVertex) {\n const copyOfCurrentVertex = cloneDeep(curVertex);\n copyOfCurrentVertex.data.zone = nextVertex.data.zone;\n geojsonPaths.push(initLineString(copyOfCurrentVertex));\n } else {\n geojsonPaths.push(initLineString(curVertex));\n }\n }\n }\n\n const result: CalculationResult = {\n startNode,\n endNode,\n routes: segments,\n distance: 0,\n };\n\n return result;\n }\n\n function findPath(vertex1: Node<any>, vertex2: Node<any>, graph: Graph) {\n // setup ngraph pathfinder\n const pathFinder = aStar(graph, {\n oriented: true,\n distance(fromNode, toNode, link) {\n return link.data.weight;\n },\n blocked(fromNode, toNode, link) {\n if (changeZoneCheckEnabled) {\n const isZoneCrossing = fromNode?.data.zone !== toNode?.data.zone;\n if (isZoneCrossing) {\n const parentWhereDimensionOfFromNode = getParentDimension(fromNode.data.where);\n const parentWhereDimensionOfStartNode = getParentDimension((startNode as Edge).where);\n const parentWhereDimensionOfToNode = getParentDimension(toNode.data.where);\n if (parentWhereDimensionOfFromNode !== parentWhereDimensionOfStartNode && parentWhereDimensionOfToNode !== parentWhereDimensionOfStartNode) {\n return true;\n }\n }\n }\n return false;\n },\n });\n\n // get shortest path\n const path = pathFinder.find(vertex1.id, vertex2.id).reverse();\n return path;\n }\n\n function setupGraphAndFindPath(source: Edge, destination: Edge, portalEdgeData: PortalEdgeData, networkData: Feature[]) {\n // create ngraph graph\n const graph = createGraph();\n\n // add node & node lines to graph\n const vertex1 = addEdgeToGraph(graph, source);\n const vertex2 = addEdgeToGraph(graph, destination);\n\n if (vertex1 && vertex2) {\n // Add portal links\n addPortalLinksToGraph(graph, portalEdgeData);\n\n // add networks to graph\n addNetworkToGraph(graph, networkData);\n\n const path = findPath(vertex1, vertex2, graph);\n // reconstruct path into geojson features\n const geojsonPath = pathToFeatures(source, destination, path, graph);\n return geojsonPath;\n }\n\n return {} as CalculationResult;\n }\n\n function getRouteWithAllPortals(source: Edge, destination: Edge) {\n let start = performance.now();\n\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalData.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalData.edgeData, concatenatedNetworkFeatures);\n }\n\n function getRouteWithSpecificPortals(source: Edge, destination: Edge, routeWithAllAvailablePortals: CalculationResult) {\n const portalsToUse = new Set<string>();\n for (let index = 0; routeWithAllAvailablePortals.routes && index < routeWithAllAvailablePortals.routes.length; index += 1) {\n const segment = routeWithAllAvailablePortals.routes[index];\n if (segment.isPortal) {\n portalsToUse.add(segment.edges[0]);\n portalsToUse.add(segment.edges[1]);\n }\n }\n\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n // Load portal data\n const portalDataForList = filterPortalEdgeDataByList(portalData.edgeData, portalsToUse);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataForList.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalDataForList.edgeData, concatenatedNetworkFeatures);\n }\n\n function getDirectRoute(source: Edge, destination: Edge) {\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeaturesSourceNode = getNetworkFeatures(getParentDimension(source.where));\n const networkFeaturesDestinationNode = getNetworkFeatures(getParentDimension(destination.where));\n // Load portal data\n const portalDataSourceNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(source.where));\n const portalDataDestinationNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(destination.where));\n\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataSourceNode.lines, portalDataDestinationNode.lines);\n const concatenatedNetworkFeatures = networkFeaturesSourceNode.concat(networkFeaturesDestinationNode);\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeaturesSourceNode.length);\n\n const portalEdgeData = {\n ...portalDataSourceNode.edgeData,\n ...portalDataDestinationNode.edgeData,\n };\n return setupGraphAndFindPath(source, destination, portalEdgeData, concatenatedNetworkFeatures);\n }\n\n // function to get shortest route\n function getRoute(\n mapObjectId1: string | UserPosition,\n mapObjectId2: string,\n wheelChairAccessibleRouteOnlyParam: boolean\n ) {\n wheelChairAccessibleRouteOnly = wheelChairAccessibleRouteOnlyParam;\n // if same start & end\n if (mapObjectId1 === mapObjectId2) {\n return {} as CalculationResult;\n }\n\n if(typeof(mapObjectId1) !== 'string'\n || typeof(mapObjectId2) !== 'string'\n ) runIntersection = true;\n\n const node1 = getEdge(mapObjectId1);\n const node2 = getEdge(mapObjectId2);\n\n startNode = node1;\n endNode = node2;\n\n let start = performance.now();\n portalData = getPortalDataForDimension(DEFAULT_DIMENSION);\n console.log('time portal load with extrapolation: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n if (startNode && endNode) {\n changeZoneCheckEnabled = true;\n const runRouteIteration = () => {\n const directRoute = getDirectRoute(startNode as Edge, endNode as Edge);\n console.log('Direct route', directRoute);\n if (isEmpty(directRoute)) {\n const routeWithAllPortals = getRouteWithAllPortals(startNode as Edge, endNode as Edge);\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, routeWithAllPortals);\n return finalRoute;\n }\n\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, directRoute);\n return finalRoute;\n };\n\n let route = runRouteIteration();\n if (isEmpty(route)) {\n changeZoneCheckEnabled = false;\n route = runRouteIteration();\n }\n\n console.log('time total: ', (performance.now() - start) / 1000);\n return route;\n }\n\n return {} as CalculationResult;\n }\n\n return { getRoute };\n}());\n\nexport default RoutingCore;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ngraph","require","_ngraph2","_interopRequireDefault","_helpers","turf","_interopRequireWildcard","_lodash","_interfaces","_mapObjectsHelper","_routingHelpers","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","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","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","undefined","vertexName","concat","toString","vertex","getNode","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","WALK_SPEED","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point","point2","distance","units","addEdgeToGraph","edge","node","index","line","getCoords","RouteDimension","Edge","properties","direction","LineDirection","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","toInteger","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","isPortalTaxonomy","console","warn","portalPath","isMovingPortalTaxonomy","getPortalPath","invertStart","prevVertexMapObjId","Set","add","portalDataForSet","filterPortalEdgeDataByList","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","multiPoint","edges","startFloor","endFloor","nextVertex","log","pop","copyOfCurrentVertex","cloneDeep","result","routes","findPath","pathFinder","aStar","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","getParentDimension","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","createGraph","geojsonPath","getRouteWithAllPortals","performance","now","getNetworkFeatures","DEFAULT_DIMENSION","concatenatedEdgeFeatures","concatenatedNetworkFeatures","optimized","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","filterPortalEdgeDataByWhere","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","getEdge","node2","getPortalDataForDimension","runRouteIteration","directRoute","isEmpty","routeWithAllPortals","finalRoute","route","_default","exports"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/index.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport { aStar } from 'ngraph.path';\nimport createGraph, { Graph, Node } from 'ngraph.graph';\nimport {\n point,\n multiPoint,\n} from '@turf/helpers';\nimport { Feature, LineString, MultiPoint } from 'geojson';\n// import turfDistance from '@turf/distance';\nimport * as turf from '@turf/turf';\nimport { cloneDeep, isEmpty, toInteger } from 'lodash';\nimport {\n CalculationResult, Edge, LineDirection, RouteDimension, RouteResult, WALK_SPEED, EdgeLine, Portal, PortalEdgeData, UserPosition\n} from './interfaces';\nimport {\n getNetworkFeatures, getEdge,\n getPortalDataForDimension,\n} from './mapObjectsHelper';\nimport { isMovingPortalTaxonomy, isPortalTaxonomy } from './routing-helpers';\nimport {\n DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, getPortalEdgeData, optimized,\n} from './utils';\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst RoutingCore = (function () {\n let wheelChairAccessibleRouteOnly = true;\n let startNode: Edge | undefined;\n let endNode: Edge | undefined;\n let changeZoneCheckEnabled = true;\n let runIntersection = false;\n\n let portalData: {\n edgeData: PortalEdgeData,\n lines: EdgeLine[],\n } = { edgeData: {}, lines: [] };\n\n function addVertex(\n graph: Graph,\n coords: number[],\n mapObjectId: string,\n where: string,\n what: string,\n zone: string,\n updateMapObjectId = false,\n ) {\n const vertexName = `${(coords).toString()},${where}`;\n let vertex = graph.getNode(vertexName);\n if (vertex === undefined) {\n const data = {\n mapObjectId,\n coords,\n where,\n what,\n zone,\n zoneUnionVertex: false,\n };\n vertex = graph.addNode(vertexName, data);\n } else if (updateMapObjectId) {\n vertex.data.mapObjectId = mapObjectId;\n\n // Mark the vertex as common vertex between zones\n if (vertex.data.zone !== zone) vertex.data.zoneUnionVertex = true;\n vertex.data.zone = zone;\n }\n return vertex;\n }\n\n function addLink(graph: Graph<any, any>, vertex1 : Node<any>, vertex2 : Node<any>, data :{\n wheelChairAccesible: number,\n cost: number,\n isPortal: boolean,\n description: string | null,\n }) {\n const { cost, description } = data;\n const timeInSeconds = data.isPortal ? cost / WALK_SPEED : cost;\n if (!wheelChairAccessibleRouteOnly || (wheelChairAccessibleRouteOnly && data.wheelChairAccesible)) { graph.addLink(vertex1.id, vertex2.id, { weight: timeInSeconds, cost, description }); }\n }\n\n function getDistance(coords1: number[], coords2: number[]) {\n const point1 = point(coords1);\n const point2 = point(coords2);\n const distance = turf.distance(point1, point2, { units: 'meters' });\n return distance;\n }\n\n function addEdgeToGraph(graph: Graph, edge: Edge) {\n const node = edge;\n if (node) {\n const vertex = addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n for (let index = 0; index < node.lines.length; index += 1) {\n const line = node.lines[index];\n // add edges for coord pairs\n const coords = turf.getCoords(line);\n for (let i = 0; i < coords.length - 1; i += 1) {\n const vertex1 = addVertex(\n graph,\n coords[i],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n const vertex2 = addVertex(\n graph,\n coords[i + 1],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(coords[i], coords[i + 1]);\n if (line.properties.direction === LineDirection.Forward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (line.properties.direction === LineDirection.Backward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n return vertex;\n }\n\n return undefined;\n }\n\n function addNetworkToGraph(graph: Graph, networkFeatures: Feature[]) {\n for (let index = 0; index < networkFeatures.length; index += 1) {\n const feature = networkFeatures[index];\n if (feature.geometry.type === 'LineString') {\n // get line\n const lineCoords = turf.getCoords(feature as any);\n if (feature.properties) {\n const where = feature.properties.dimension_where;\n const what = RouteDimension.Network; // feature.properties.dimension_what;\n const { zone } = feature.properties;\n // add edges for coord pairs\n for (let i = 0; i < lineCoords.length - 1; i += 1) {\n const vertex1 = addVertex(graph, lineCoords[i], 'vertex', where, what, zone, true);\n const vertex2 = addVertex(\n graph,\n lineCoords[i + 1],\n 'vertex',\n where,\n what,\n zone,\n true,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(lineCoords[i], lineCoords[i + 1]);\n if (feature.properties.direction === LineDirection.Forward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (feature.properties.direction === LineDirection.Backward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n }\n }\n }\n\n function addVertexByEdge(graph: Graph, edge: Edge) {\n const node = edge;\n if (node === undefined) {\n return undefined;\n }\n return addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n }\n\n function addPortalLinksToGraph(graph: Graph, portalEdgeData: PortalEdgeData) {\n for (const mapObjectId1 in portalEdgeData) {\n const portal = portalEdgeData[mapObjectId1];\n\n for (let index = 0; index < portal.links.length; index += 1) {\n const portalLink = portal.links[index];\n let { cost } = portalLink;\n cost = toInteger(cost);\n // if (cost <= 1) {\n // cost = portalWeight;\n // }\n const { direction, wheelchair, description } = portalLink;\n const portal1 = addVertexByEdge(graph, portal);\n const portal2 = addVertexByEdge(graph, portalLink);\n if (portal1 !== undefined && portal2 !== undefined && portal1.id !== portal2.id) {\n if (direction === LineDirection.Forward || direction === LineDirection.TwoWay) {\n addLink(graph, portal1, portal2, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n if (direction === LineDirection.Backward || direction === LineDirection.TwoWay) {\n addLink(graph, portal2, portal1, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n\n addEdgeToGraph(graph, portalLink);\n }\n }\n\n addEdgeToGraph(graph, portal);\n }\n }\n\n function initLineString(vertex: any) {\n return {\n type: 'Feature',\n geometry: { type: 'LineString', coordinates: [vertex.data.coords] },\n properties: {\n dimension_where: vertex.data.where,\n zone: vertex.data.zone,\n cost: 0,\n },\n } as Feature<LineString | MultiPoint, any>;\n }\n\n function pathToFeatures(source: Edge, destination : Edge, vertices: Node<any>[], graph: Graph) {\n if (vertices.length <= 1) {\n return {} as CalculationResult;\n } // if no path found\n\n const startNode = source;\n const endNode = destination;\n\n const segments: RouteResult[] = [];\n let segmentStartVertexData = vertices[0].data;\n const geojsonPaths = [initLineString(vertices[0])];\n\n for (let i = 1; i < vertices.length; i += 1) {\n const curVertex = vertices[i];\n const prevVertex = vertices[i - 1];\n const line = geojsonPaths[geojsonPaths.length - 1];\n\n // if vertex is map object\n if (curVertex.data.mapObjectId !== 'vertex' || curVertex.data.zoneUnionVertex) {\n let segment;\n if (isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what)) {\n if (prevVertex.data.zone !== curVertex.data.zone) {\n console.warn('A portal is triggering a change in zone');\n }\n\n // check if portal path is available to visualize\n let portalPath;\n if (isMovingPortalTaxonomy(prevVertex.data.what)) {\n const getPortalPath = (portalEdgeData: PortalEdgeData, curVertex: Node<any>, prevVertex: Node<any>, invertStart = false) => {\n const prevVertexMapObjId = prevVertex.data.mapObjectId;\n const set = new Set<string>().add(prevVertexMapObjId);\n const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);\n if (portalDataForSet && portalDataForSet.edgeData[prevVertexMapObjId]) {\n const prevVertexPortalData = portalDataForSet.edgeData[prevVertexMapObjId];\n for (let j = 0; j < prevVertexPortalData.links.length; j += 1) {\n const link = prevVertexPortalData.links[j];\n if (link.id === curVertex.data.mapObjectId) {\n if (link.pathFeatures && link.pathFeatures.length > 0) {\n const line = link.pathFeatures[0];\n const start = invertStart === false ? prevVertex.data.coords : curVertex.data.coords;\n const end = invertStart === false ? curVertex.data.coords : prevVertex.data.coords;\n\n const distanceToStart = turf.distance(start, line.geometry.coordinates[0]);\n const distanceToEnd = turf.distance(end, line.geometry.coordinates[0]);\n const coordsToUse = distanceToStart < distanceToEnd ? line.geometry.coordinates : line.geometry.coordinates.slice().reverse();\n return turf.lineString(coordsToUse);\n }\n }\n }\n }\n\n return null;\n };\n\n portalPath = getPortalPath(portalData.edgeData, curVertex, prevVertex, false);\n if (!portalPath) portalPath = getPortalPath(portalData.edgeData, prevVertex, curVertex, true);\n }\n\n // TODO: read description here\n const link = graph.getLink(prevVertex.id, curVertex.id);\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n const description = link ? link.data.description ? link.data.description : undefined : undefined;\n segment = {\n geojson: multiPoint([\n prevVertex.data.coords,\n curVertex.data.coords,\n ], {\n zone: curVertex.data.zone,\n }),\n edges: [prevVertex.data.mapObjectId, curVertex.data.mapObjectId],\n startFloor: prevVertex.data.where,\n endFloor: curVertex.data.where,\n isPortal: true,\n portalPath,\n cost,\n description,\n } as RouteResult;\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n } else {\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (curVertex.data.zoneUnionVertex\n && (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone)) {\n console.log('ignore zoneUnionVertex in segment');\n } else {\n segment = {\n geojson: line,\n edges: [segmentStartVertexData.mapObjectId, curVertex.data.mapObjectId],\n startFloor: segmentStartVertexData.where,\n endFloor: segmentStartVertexData.where,\n isPortal: false,\n portalPath: undefined,\n cost: line.properties.cost,\n };\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n }\n }\n }\n\n // same line\n if (!(isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what))) {\n const link = graph.getLink(prevVertex.id, curVertex.id); // returns a link from 'hello' to 'world'\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n\n line.geometry.coordinates.push(curVertex.data.coords);\n line.properties.cost += cost;\n } else {\n // new line\n if (line.geometry.coordinates.length < 2) {\n geojsonPaths.pop();\n }\n geojsonPaths.push(initLineString(curVertex));\n }\n\n // new line due to change in zone\n if (curVertex.data.zoneUnionVertex) {\n const prevVertex = (i > 0) ? vertices[i - 1] : undefined;\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone) {\n console.log('ignore zoneUnionVertex');\n } else\n // Use zone value of next vertex (when available) as current vertex is a common vertex and can have either of the zone values\n if (nextVertex) {\n const copyOfCurrentVertex = cloneDeep(curVertex);\n copyOfCurrentVertex.data.zone = nextVertex.data.zone;\n geojsonPaths.push(initLineString(copyOfCurrentVertex));\n } else {\n geojsonPaths.push(initLineString(curVertex));\n }\n }\n }\n\n const result: CalculationResult = {\n startNode,\n endNode,\n routes: segments,\n distance: 0,\n };\n\n return result;\n }\n\n function findPath(vertex1: Node<any>, vertex2: Node<any>, graph: Graph) {\n // setup ngraph pathfinder\n const pathFinder = aStar(graph, {\n oriented: true,\n distance(fromNode, toNode, link) {\n return link.data.weight;\n },\n blocked(fromNode, toNode, link) {\n if (changeZoneCheckEnabled) {\n const isZoneCrossing = fromNode?.data.zone !== toNode?.data.zone;\n if (isZoneCrossing) {\n const parentWhereDimensionOfFromNode = getParentDimension(fromNode.data.where);\n const parentWhereDimensionOfStartNode = getParentDimension((startNode as Edge).where);\n const parentWhereDimensionOfToNode = getParentDimension(toNode.data.where);\n if (parentWhereDimensionOfFromNode !== parentWhereDimensionOfStartNode && parentWhereDimensionOfToNode !== parentWhereDimensionOfStartNode) {\n return true;\n }\n }\n }\n return false;\n },\n });\n\n // get shortest path\n const path = pathFinder.find(vertex1.id, vertex2.id).reverse();\n return path;\n }\n\n function setupGraphAndFindPath(source: Edge, destination: Edge, portalEdgeData: PortalEdgeData, networkData: Feature[]) {\n // create ngraph graph\n const graph = createGraph();\n\n // add node & node lines to graph\n const vertex1 = addEdgeToGraph(graph, source);\n const vertex2 = addEdgeToGraph(graph, destination);\n\n if (vertex1 && vertex2) {\n // Add portal links\n addPortalLinksToGraph(graph, portalEdgeData);\n\n // add networks to graph\n addNetworkToGraph(graph, networkData);\n\n const path = findPath(vertex1, vertex2, graph);\n // reconstruct path into geojson features\n const geojsonPath = pathToFeatures(source, destination, path, graph);\n return geojsonPath;\n }\n\n return {} as CalculationResult;\n }\n\n function getRouteWithAllPortals(source: Edge, destination: Edge) {\n let start = performance.now();\n\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalData.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalData.edgeData, concatenatedNetworkFeatures);\n }\n\n function getRouteWithSpecificPortals(source: Edge, destination: Edge, routeWithAllAvailablePortals: CalculationResult) {\n const portalsToUse = new Set<string>();\n for (let index = 0; routeWithAllAvailablePortals.routes && index < routeWithAllAvailablePortals.routes.length; index += 1) {\n const segment = routeWithAllAvailablePortals.routes[index];\n if (segment.isPortal) {\n portalsToUse.add(segment.edges[0]);\n portalsToUse.add(segment.edges[1]);\n }\n }\n\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n // Load portal data\n const portalDataForList = filterPortalEdgeDataByList(portalData.edgeData, portalsToUse);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataForList.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalDataForList.edgeData, concatenatedNetworkFeatures);\n }\n\n function getDirectRoute(source: Edge, destination: Edge) {\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeaturesSourceNode = getNetworkFeatures(getParentDimension(source.where));\n const networkFeaturesDestinationNode = getNetworkFeatures(getParentDimension(destination.where));\n // Load portal data\n const portalDataSourceNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(source.where));\n const portalDataDestinationNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(destination.where));\n\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataSourceNode.lines, portalDataDestinationNode.lines);\n const concatenatedNetworkFeatures = networkFeaturesSourceNode.concat(networkFeaturesDestinationNode);\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeaturesSourceNode.length);\n\n const portalEdgeData = {\n ...portalDataSourceNode.edgeData,\n ...portalDataDestinationNode.edgeData,\n };\n return setupGraphAndFindPath(source, destination, portalEdgeData, concatenatedNetworkFeatures);\n }\n\n // function to get shortest route\n function getRoute(\n mapObjectId1: string | UserPosition,\n mapObjectId2: string,\n wheelChairAccessibleRouteOnlyParam: boolean\n ) {\n wheelChairAccessibleRouteOnly = wheelChairAccessibleRouteOnlyParam;\n // if same start & end\n if (mapObjectId1 === mapObjectId2) {\n return {} as CalculationResult;\n }\n\n if(typeof(mapObjectId1) !== 'string'\n || typeof(mapObjectId2) !== 'string'\n ) runIntersection = true;\n\n const node1 = getEdge(mapObjectId1);\n const node2 = getEdge(mapObjectId2);\n\n startNode = node1;\n endNode = node2;\n\n let start = performance.now();\n portalData = getPortalDataForDimension(DEFAULT_DIMENSION);\n console.log('time portal load with extrapolation: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n if (startNode && endNode) {\n changeZoneCheckEnabled = true;\n const runRouteIteration = () => {\n const directRoute = getDirectRoute(startNode as Edge, endNode as Edge);\n console.log('Direct route', directRoute);\n if (isEmpty(directRoute)) {\n const routeWithAllPortals = getRouteWithAllPortals(startNode as Edge, endNode as Edge);\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, routeWithAllPortals);\n return finalRoute;\n }\n\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, directRoute);\n return finalRoute;\n };\n\n let route = runRouteIteration();\n if (isEmpty(route)) {\n changeZoneCheckEnabled = false;\n route = runRouteIteration();\n }\n\n console.log('time total: ', (performance.now() - start) / 1000);\n return route;\n }\n\n return {} as CalculationResult;\n }\n\n return { getRoute };\n}());\n\nexport default RoutingCore;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -24,6 +24,11 @@ var _interfaces = require("./interfaces.js");
|
|
|
24
24
|
var _index = _interopRequireDefault(require("./index.js"));
|
|
25
25
|
var _mapObjectsHelper = require("./mapObjectsHelper.js");
|
|
26
26
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
|
+
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; }
|
|
28
|
+
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; }
|
|
29
|
+
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; }
|
|
30
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
31
|
+
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); }
|
|
27
32
|
let ManeuverType = exports.ManeuverType = /*#__PURE__*/function (ManeuverType) {
|
|
28
33
|
ManeuverType["RouteOverview"] = "Route Overview";
|
|
29
34
|
ManeuverType["SectionOverview"] = "Section Overview";
|
|
@@ -132,18 +137,15 @@ function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zo
|
|
|
132
137
|
zone
|
|
133
138
|
};
|
|
134
139
|
// const curved = smooth(coordinates, {iteration: 1});
|
|
135
|
-
const line = (0, _helpers.lineString)(coordinates, {
|
|
136
|
-
...properties,
|
|
140
|
+
const line = (0, _helpers.lineString)(coordinates, _objectSpread(_objectSpread({}, properties), {}, {
|
|
137
141
|
featureBelongsToLineString: true
|
|
138
|
-
});
|
|
139
|
-
const startPoint = (0, _helpers.point)(coordinates[0], {
|
|
140
|
-
...properties,
|
|
142
|
+
}));
|
|
143
|
+
const startPoint = (0, _helpers.point)(coordinates[0], _objectSpread(_objectSpread({}, properties), {}, {
|
|
141
144
|
featureBelongsToLineString: false
|
|
142
|
-
});
|
|
143
|
-
const endPoint = (0, _helpers.point)(coordinates[coordinates.length - 1], {
|
|
144
|
-
...properties,
|
|
145
|
+
}));
|
|
146
|
+
const endPoint = (0, _helpers.point)(coordinates[coordinates.length - 1], _objectSpread(_objectSpread({}, properties), {}, {
|
|
145
147
|
featureBelongsToLineString: false
|
|
146
|
-
});
|
|
148
|
+
}));
|
|
147
149
|
const features = [];
|
|
148
150
|
features.push(startPoint, line, endPoint);
|
|
149
151
|
updateFeatureHighlightState(features, isHighlighted);
|
|
@@ -223,11 +225,10 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
223
225
|
|
|
224
226
|
// Only add the starting static node for the very first node of route
|
|
225
227
|
if (optimizedPath.length === 0) {
|
|
226
|
-
const firstSegment = {
|
|
227
|
-
...createDefaultSegment(pathSegment),
|
|
228
|
+
const firstSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
228
229
|
maneuverType: ManeuverType.Static,
|
|
229
230
|
coordinates: [path[0]]
|
|
230
|
-
};
|
|
231
|
+
});
|
|
231
232
|
optimizedPath.push(firstSegment);
|
|
232
233
|
}
|
|
233
234
|
if (segmentIndex > 0 && optimizedPath.length > 0) {
|
|
@@ -235,12 +236,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
235
236
|
const prevZone = prevPathSegment.geojson.properties.zone;
|
|
236
237
|
if (currentZone !== prevZone) {
|
|
237
238
|
const prevPath = prevPathSegment.geojson.geometry.coordinates;
|
|
238
|
-
const pathPoint = {
|
|
239
|
-
...createDefaultSegment(prevPathSegment),
|
|
239
|
+
const pathPoint = _objectSpread(_objectSpread({}, createDefaultSegment(prevPathSegment)), {}, {
|
|
240
240
|
maneuverType: ManeuverType.ChangeZone,
|
|
241
241
|
zone: currentZone,
|
|
242
242
|
coordinates: [prevPath[prevPath.length - 1]]
|
|
243
|
-
};
|
|
243
|
+
});
|
|
244
244
|
optimizedPath.push(pathPoint);
|
|
245
245
|
lastManeuverType = ManeuverType.ChangeZone;
|
|
246
246
|
}
|
|
@@ -252,12 +252,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
252
252
|
const endPoint = path[index + 2];
|
|
253
253
|
|
|
254
254
|
// Keep updating endSegment on each iteration
|
|
255
|
-
endSegment = {
|
|
256
|
-
...createDefaultSegment(pathSegment),
|
|
255
|
+
endSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
257
256
|
maneuverType: ManeuverType.Static,
|
|
258
257
|
coordinates: [endPoint],
|
|
259
258
|
zone: currentZone
|
|
260
|
-
};
|
|
259
|
+
});
|
|
261
260
|
|
|
262
261
|
// const line = lineString([startPoint, midPoint]);
|
|
263
262
|
// const segmentDistance = length(line, { units: DISTANCE_UNIT });
|
|
@@ -298,11 +297,10 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
298
297
|
// }
|
|
299
298
|
// }
|
|
300
299
|
|
|
301
|
-
const pathPoint = {
|
|
302
|
-
...createDefaultSegment(pathSegment),
|
|
300
|
+
const pathPoint = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
303
301
|
maneuverType: currentManeuverType,
|
|
304
302
|
zone: currentZone
|
|
305
|
-
};
|
|
303
|
+
});
|
|
306
304
|
if (lastManeuverType === ManeuverType.ContinueStraight) {
|
|
307
305
|
// If last iteration of loop then use the end point as segment end else use mid point
|
|
308
306
|
// Use index + 3 because last two points are skipped by loop
|
|
@@ -323,24 +321,22 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
323
321
|
if (currentManeuverType === ManeuverType.ContinueStraight) {
|
|
324
322
|
optimizedPath[optimizedPath.length - 1].coordinates.push(endPoint);
|
|
325
323
|
} else {
|
|
326
|
-
optimizedPath.push({
|
|
327
|
-
...createDefaultSegment(pathSegment),
|
|
324
|
+
optimizedPath.push(_objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
328
325
|
maneuverType: ManeuverType.ContinueStraight,
|
|
329
326
|
coordinates: [midPoint, endPoint],
|
|
330
327
|
zone: currentZone
|
|
331
|
-
});
|
|
328
|
+
}));
|
|
332
329
|
}
|
|
333
330
|
}
|
|
334
331
|
}
|
|
335
332
|
lastManeuverType = currentManeuverType;
|
|
336
333
|
}
|
|
337
334
|
} else {
|
|
338
|
-
const pathPoint = {
|
|
339
|
-
...createDefaultSegment(pathSegment),
|
|
335
|
+
const pathPoint = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
340
336
|
maneuverType: ManeuverType.ContinueStraight,
|
|
341
337
|
coordinates: path,
|
|
342
338
|
zone: currentZone
|
|
343
|
-
};
|
|
339
|
+
});
|
|
344
340
|
optimizedPath.push(pathPoint);
|
|
345
341
|
}
|
|
346
342
|
const removeExtraChangeZoneSegment = () => {
|
|
@@ -370,12 +366,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
370
366
|
});
|
|
371
367
|
// Only add if length greater then min limit
|
|
372
368
|
if (lengthOfLineBeforeImmigration >= 10) {
|
|
373
|
-
const segmentBeforeImmigration = {
|
|
374
|
-
...createDefaultSegment(pathSegment),
|
|
369
|
+
const segmentBeforeImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
375
370
|
maneuverType: ManeuverType.ContinueStraight,
|
|
376
371
|
zone: currentZone,
|
|
377
372
|
coordinates: (0, _turf.getCoords)(lineBeforeImmigration)
|
|
378
|
-
};
|
|
373
|
+
});
|
|
379
374
|
optimizedPath.push(segmentBeforeImmigration);
|
|
380
375
|
} else if (optimizedPath.length > 0) {
|
|
381
376
|
lastSegmentAdded = optimizedPath[optimizedPath.length - 1];
|
|
@@ -392,12 +387,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
392
387
|
}
|
|
393
388
|
}
|
|
394
389
|
const immigrationLine = (0, _turf.lineSlice)((0, _turf.getCoord)(intersects.features[0]), (0, _turf.getCoord)(intersects.features[1]), line);
|
|
395
|
-
const immigrationSegment = {
|
|
396
|
-
...createDefaultSegment(pathSegment),
|
|
390
|
+
const immigrationSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
397
391
|
maneuverType: ManeuverType.PassThroughImmigration,
|
|
398
392
|
zone: currentZone,
|
|
399
393
|
coordinates: (0, _turf.getCoords)(immigrationLine)
|
|
400
|
-
};
|
|
394
|
+
});
|
|
401
395
|
// The lineBeforeImmigration might not have been added due to length limit
|
|
402
396
|
// And if lineBeforeImmigration was supposed to be the the first segment then prepend this segment with coordinates of lineBeforeImmigration
|
|
403
397
|
if (optimizedPath.length === 0) {
|
|
@@ -409,12 +403,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
409
403
|
optimizedPath.push(immigrationSegment);
|
|
410
404
|
const lineCoords = (0, _turf.getCoords)(line);
|
|
411
405
|
const lineAfterImmigration = (0, _turf.lineSlice)((0, _turf.getCoord)(intersects.features[1]), lineCoords[lineCoords.length - 1], line);
|
|
412
|
-
const segmentAfterImmigration = {
|
|
413
|
-
...createDefaultSegment(pathSegment),
|
|
406
|
+
const segmentAfterImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
414
407
|
maneuverType: ManeuverType.ContinueStraight,
|
|
415
408
|
zone: currentZone,
|
|
416
409
|
coordinates: (0, _turf.getCoords)(lineAfterImmigration)
|
|
417
|
-
};
|
|
410
|
+
});
|
|
418
411
|
optimizedPath.push(segmentAfterImmigration);
|
|
419
412
|
// line = segmentAfterImmigration;
|
|
420
413
|
} else if (intersects.features.length > 0) {
|
|
@@ -426,12 +419,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
426
419
|
// One intersection point and start point is within polygon
|
|
427
420
|
// Means line start inside and exits the polygon
|
|
428
421
|
const immigrationLine = (0, _turf.lineSlice)((0, _turf.getCoords)(line)[0], (0, _turf.getCoord)(intersects.features[0]), line);
|
|
429
|
-
const immigrationSegment = {
|
|
430
|
-
...createDefaultSegment(pathSegment),
|
|
422
|
+
const immigrationSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
431
423
|
maneuverType: ManeuverType.PassThroughImmigration,
|
|
432
424
|
zone: currentZone,
|
|
433
425
|
coordinates: (0, _turf.getCoords)(immigrationLine)
|
|
434
|
-
};
|
|
426
|
+
});
|
|
435
427
|
lastSegmentAdded = optimizedPath.length > 0 ? optimizedPath[optimizedPath.length - 1] : undefined;
|
|
436
428
|
if (lastSegmentAdded && lastSegmentAdded.maneuverType === ManeuverType.ChangeZone) {
|
|
437
429
|
// Remove change zone segment
|
|
@@ -453,12 +445,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
453
445
|
optimizedPath.push(immigrationSegment);
|
|
454
446
|
const lineCoords = (0, _turf.getCoords)(line);
|
|
455
447
|
const lineAfterImmigration = (0, _turf.lineSlice)((0, _turf.getCoord)(intersects.features[0]), lineCoords[lineCoords.length - 1], line);
|
|
456
|
-
const segmentAfterImmigration = {
|
|
457
|
-
...createDefaultSegment(pathSegment),
|
|
448
|
+
const segmentAfterImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
458
449
|
maneuverType: ManeuverType.ContinueStraight,
|
|
459
450
|
zone: currentZone,
|
|
460
451
|
coordinates: (0, _turf.getCoords)(lineAfterImmigration)
|
|
461
|
-
};
|
|
452
|
+
});
|
|
462
453
|
optimizedPath.push(segmentAfterImmigration);
|
|
463
454
|
} else {
|
|
464
455
|
// line starts outside immigration and ends inside immigration
|
|
@@ -468,12 +459,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
468
459
|
lastSegmentAdded.coordinates = (0, _turf.getCoords)(previousLine);
|
|
469
460
|
const lineCoords = (0, _turf.getCoords)(line);
|
|
470
461
|
const lineAfterImmigration = (0, _turf.lineSlice)((0, _turf.getCoord)(intersects.features[0]), lineCoords[lineCoords.length - 1], line);
|
|
471
|
-
const segmentAfterImmigration = {
|
|
472
|
-
...createDefaultSegment(pathSegment),
|
|
462
|
+
const segmentAfterImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
473
463
|
maneuverType: ManeuverType.PassThroughImmigration,
|
|
474
464
|
zone: currentZone,
|
|
475
465
|
coordinates: (0, _turf.getCoords)(lineAfterImmigration)
|
|
476
|
-
};
|
|
466
|
+
});
|
|
477
467
|
optimizedPath.push(segmentAfterImmigration);
|
|
478
468
|
// line = segmentAfterImmigration;
|
|
479
469
|
}
|
|
@@ -483,18 +473,16 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
483
473
|
}
|
|
484
474
|
} else {
|
|
485
475
|
// Keep updating endSegment on each iteration
|
|
486
|
-
endSegment = {
|
|
487
|
-
...createDefaultSegment(pathSegment),
|
|
476
|
+
endSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
488
477
|
maneuverType: ManeuverType.Static,
|
|
489
478
|
coordinates: [pathSegment.geojson.geometry.coordinates[1]],
|
|
490
479
|
zone: currentZone,
|
|
491
480
|
isPortal: false
|
|
492
|
-
};
|
|
493
|
-
const enterPortalSegment = {
|
|
494
|
-
...createDefaultSegment(pathSegment),
|
|
481
|
+
});
|
|
482
|
+
const enterPortalSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
495
483
|
maneuverType: ManeuverType.EnterPortal,
|
|
496
484
|
coordinates: [pathSegment.geojson.geometry.coordinates[0]]
|
|
497
|
-
};
|
|
485
|
+
});
|
|
498
486
|
// // Only add this EnterPortal segment if previously same what dimension portal is not being continued
|
|
499
487
|
// // This is done to ensure Take Lift at A, Exit Lift at B, Take lift at B, Exit Lift at C is generated only as Take lift at A, Exit lift at C
|
|
500
488
|
// let lastSegmentAdded = (optimizedPath.length > 0) ? optimizedPath[optimizedPath.length - 1] : undefined;
|
|
@@ -506,11 +494,10 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
506
494
|
// }
|
|
507
495
|
|
|
508
496
|
optimizedPath.push(enterPortalSegment);
|
|
509
|
-
const exitPortalSegment = {
|
|
510
|
-
...createDefaultSegment(pathSegment),
|
|
497
|
+
const exitPortalSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
511
498
|
maneuverType: ManeuverType.ExitPortal,
|
|
512
499
|
coordinates: [pathSegment.geojson.geometry.coordinates[1]]
|
|
513
|
-
};
|
|
500
|
+
});
|
|
514
501
|
// // This logic is tied to the above similar logic for EnterPortal
|
|
515
502
|
// // Only add this ExitPortal segment if previously same what dimension portal is not being continued
|
|
516
503
|
// // This is done to ensure Take Lift at A, Exit Lift at B, Take lift at B, Exit Lift at C is generated only as Take lift at A, Exit lift at C
|
|
@@ -532,12 +519,11 @@ async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibl
|
|
|
532
519
|
if (lastSegmentAdded && lastSegmentAdded.maneuverType === ManeuverType.ExitPortal) {
|
|
533
520
|
optimizedPath.pop();
|
|
534
521
|
if (pathSegment.portalPath) {
|
|
535
|
-
const travelPortalSegment = {
|
|
536
|
-
...createDefaultSegment(pathSegment),
|
|
522
|
+
const travelPortalSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
|
|
537
523
|
maneuverType: ManeuverType.TravelPortal,
|
|
538
524
|
coordinates: pathSegment.portalPath.geometry.coordinates,
|
|
539
525
|
zone: currentZone
|
|
540
|
-
};
|
|
526
|
+
});
|
|
541
527
|
optimizedPath.push(travelPortalSegment);
|
|
542
528
|
}
|
|
543
529
|
optimizedPath.push(exitPortalSegment);
|
|
@@ -701,8 +687,9 @@ function getFeaturesForPatch(route, patchNumber, overviewSegmentInfo) {
|
|
|
701
687
|
const nonHighlightedOverviewFeatures = [];
|
|
702
688
|
const highlightedOverviewFeatures = [];
|
|
703
689
|
for (let j = 0; j < routeSegment.features.length; j++) {
|
|
690
|
+
var _feature$properties;
|
|
704
691
|
const feature = routeSegment.features[j];
|
|
705
|
-
if (feature.properties
|
|
692
|
+
if (((_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.patchNumber) !== undefined && feature.properties.patchNumber === overviewSegmentInfo.patchNumberForOverviewFeatures) {
|
|
706
693
|
if (feature.properties.isNonHighlightedOverview !== undefined) {
|
|
707
694
|
if (feature.properties.isNonHighlightedOverview === '1') {
|
|
708
695
|
nonHighlightedOverviewFeatures.push(feature);
|
|
@@ -788,7 +775,7 @@ function getTerminalAndLevelName(whereDimension) {
|
|
|
788
775
|
terminalName = 'Level';
|
|
789
776
|
break;
|
|
790
777
|
}
|
|
791
|
-
const terminal = terminalName === 'Terminal' ?
|
|
778
|
+
const terminal = terminalName === 'Terminal' ? "".concat(terminalName, " ").concat(match[1][1]) : "".concat(terminalName);
|
|
792
779
|
const levelIdentifier = match[2][0];
|
|
793
780
|
let levelName;
|
|
794
781
|
switch (levelIdentifier) {
|
|
@@ -802,7 +789,7 @@ function getTerminalAndLevelName(whereDimension) {
|
|
|
802
789
|
levelName = 'Level';
|
|
803
790
|
break;
|
|
804
791
|
}
|
|
805
|
-
const level =
|
|
792
|
+
const level = "".concat(levelName, " ").concat(match[2].substring(1));
|
|
806
793
|
return {
|
|
807
794
|
Terminal: terminal,
|
|
808
795
|
Level: level
|
|
@@ -840,7 +827,7 @@ function convertSecondsToMinutes(timeInSeconds) {
|
|
|
840
827
|
}
|
|
841
828
|
function formatTime(value) {
|
|
842
829
|
if (value < 60) return '<1 minute';
|
|
843
|
-
return
|
|
830
|
+
return "~".concat(convertSecondsToMinutes(value), " ").concat(convertSecondsToMinutes(value) > 1 ? 'minutes' : 'minute');
|
|
844
831
|
}
|
|
845
832
|
function generateInstructions(route) {
|
|
846
833
|
const isFirstSegment = index => {
|
|
@@ -870,7 +857,7 @@ function generateInstructions(route) {
|
|
|
870
857
|
}
|
|
871
858
|
rotueSegment.instructions.push(instruction);
|
|
872
859
|
} else if (rotueSegment.maneuverType === ManeuverType.ContinueStraight || rotueSegment.maneuverType === ManeuverType.PassThroughImmigration) {
|
|
873
|
-
const postfix = rotueSegment.maneuverType === ManeuverType.ContinueStraight ?
|
|
860
|
+
const postfix = rotueSegment.maneuverType === ManeuverType.ContinueStraight ? "Walk for ".concat(Math.ceil(rotueSegment.distance), " ").concat(route.distanceUnit) : getImmigrationInstruction(rotueSegment);
|
|
874
861
|
|
|
875
862
|
// 0th index if overview segment was not included, else 1st index
|
|
876
863
|
// if (index === 0
|
|
@@ -926,15 +913,15 @@ function generateInstructions(route) {
|
|
|
926
913
|
// }
|
|
927
914
|
} else if (rotueSegment.maneuverType === ManeuverType.Static) {
|
|
928
915
|
if (isFirstSegment(index)) {
|
|
929
|
-
rotueSegment.instructions.push(
|
|
916
|
+
rotueSegment.instructions.push("Start at ".concat(rotueSegment.startEdge.name));
|
|
930
917
|
}
|
|
931
918
|
if (index === route.segments.length - 1) {
|
|
932
|
-
rotueSegment.instructions.push(
|
|
919
|
+
rotueSegment.instructions.push("Arrive at ".concat(rotueSegment.endEdge.name));
|
|
933
920
|
}
|
|
934
921
|
} else if (rotueSegment.maneuverType === ManeuverType.EnterPortal) {
|
|
935
|
-
let instruction =
|
|
922
|
+
let instruction = "Enter ".concat(rotueSegment.startEdge.name, " at ").concat(rotueSegment.startEdge.whereDimension.split('.').slice(-2).join(' ').toUpperCase());
|
|
936
923
|
if (isNonMovingPortalTaxonomy(rotueSegment.startEdge.whatDimension)) {
|
|
937
|
-
instruction =
|
|
924
|
+
instruction = "Continue to ".concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
|
|
938
925
|
rotueSegment.instructions.push(instruction);
|
|
939
926
|
} else if (isMovingPortalTaxonomy(rotueSegment.startEdge.whatDimension)) {
|
|
940
927
|
const nextRouteSegment = index + 1 <= route.segments.length - 1 ? route.segments[index + 1] : undefined;
|
|
@@ -943,12 +930,12 @@ function generateInstructions(route) {
|
|
|
943
930
|
rotueSegment.instructions.push(instruction);
|
|
944
931
|
index += 1;
|
|
945
932
|
const name = getPortalName(nextRouteSegment.startEdge.whatDimension);
|
|
946
|
-
instruction =
|
|
933
|
+
instruction = "Take ".concat(name, " to ").concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
|
|
947
934
|
nextRouteSegment.instructions.push(instruction);
|
|
948
935
|
if (rotueSegment.description) nextRouteSegment.instructions.push(rotueSegment.description);
|
|
949
936
|
} else {
|
|
950
937
|
const name = getPortalName(rotueSegment.startEdge.whatDimension);
|
|
951
|
-
instruction =
|
|
938
|
+
instruction = "Take ".concat(name, " to ").concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
|
|
952
939
|
rotueSegment.instructions.push(instruction);
|
|
953
940
|
}
|
|
954
941
|
}
|