@twinmatrix/spatialverse-sdk-web 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
  2. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  3. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js +293 -0
  4. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js.map +1 -0
  5. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js +35 -0
  6. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js.map +1 -0
  7. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js +33 -0
  8. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js.map +1 -0
  9. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js +307 -0
  10. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js.map +1 -0
  11. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
  12. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  13. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +202 -198
  14. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  15. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  16. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  17. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/focustree.json +121 -0
  18. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
  19. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  20. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -13
  21. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  22. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
  23. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  24. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
  25. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  26. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/whatTaxonomies.json +170 -0
  27. package/lib/cjs/meta-atlas-sdk/combined_style.json +2313 -0
  28. package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js +166 -0
  29. package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js.map +1 -0
  30. package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js +229 -0
  31. package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js.map +1 -0
  32. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +73 -69
  33. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  34. package/lib/cjs/meta-atlas-sdk/utils/helpers.js +1 -1
  35. package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
  36. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +6 -1
  37. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  38. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -103
  39. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  40. package/lib/cjs/react/MetaAtlasMap.js +4 -4
  41. package/lib/cjs/react/MetaAtlasMap.js.map +1 -1
  42. package/lib/cjs/react/hooks/useMapEvents/index.js +6 -3
  43. package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
  44. package/lib/cjs/react/hooks/useStampRally/index.js +7 -5
  45. package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
  46. package/lib/cjs/react/hooks/useStampRally/utils.js +1 -1
  47. package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
  48. package/lib/cjs/react/stores/useMapDataStore.js +17 -21
  49. package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
  50. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
  51. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  52. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js +286 -0
  53. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js.map +1 -0
  54. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js +27 -0
  55. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js.map +1 -0
  56. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js +27 -0
  57. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js.map +1 -0
  58. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js +305 -0
  59. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js.map +1 -0
  60. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
  61. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  62. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +202 -198
  63. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  64. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  65. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  66. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/focustree.json +121 -0
  67. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
  68. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  69. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -8
  70. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  71. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
  72. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  73. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
  74. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  75. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/whatTaxonomies.json +170 -0
  76. package/lib/esm/meta-atlas-sdk/combined_style.json +2313 -0
  77. package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js +158 -0
  78. package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js.map +1 -0
  79. package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js +221 -0
  80. package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js.map +1 -0
  81. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +73 -68
  82. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  83. package/lib/esm/meta-atlas-sdk/utils/helpers.js +1 -1
  84. package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
  85. package/lib/esm/meta-atlas-sdk/utils/local-storage.js +6 -1
  86. package/lib/esm/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  87. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -101
  88. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  89. package/lib/esm/react/MetaAtlasMap.js +4 -4
  90. package/lib/esm/react/MetaAtlasMap.js.map +1 -1
  91. package/lib/esm/react/hooks/useMapEvents/index.js +6 -3
  92. package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
  93. package/lib/esm/react/hooks/useStampRally/index.js +7 -5
  94. package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
  95. package/lib/esm/react/hooks/useStampRally/utils.js +1 -1
  96. package/lib/esm/react/hooks/useStampRally/utils.js.map +1 -1
  97. package/lib/esm/react/stores/useMapDataStore.js +17 -21
  98. package/lib/esm/react/stores/useMapDataStore.js.map +1 -1
  99. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts +30 -0
  100. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts.map +1 -0
  101. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts +5 -0
  102. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts.map +1 -0
  103. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts +21 -0
  104. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts.map +1 -0
  105. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts +27 -0
  106. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts.map +1 -0
  107. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts +18 -0
  108. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts.map +1 -0
  109. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts +37 -0
  110. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts.map +1 -0
  111. 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?.patchNumber !== undefined && feature.properties.patchNumber === overviewSegmentInfo.patchNumberForOverviewFeatures) {
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' ? `${terminalName} ${match[1][1]}` : `${terminalName}`;
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 = `${levelName} ${match[2].substring(1)}`;
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 `~${convertSecondsToMinutes(value)} ${convertSecondsToMinutes(value) > 1 ? 'minutes' : 'minute'}`;
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 ? `Walk for ${Math.ceil(rotueSegment.distance)} ${route.distanceUnit}` : getImmigrationInstruction(rotueSegment);
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(`Start at ${rotueSegment.startEdge.name}`);
916
+ rotueSegment.instructions.push("Start at ".concat(rotueSegment.startEdge.name));
930
917
  }
931
918
  if (index === route.segments.length - 1) {
932
- rotueSegment.instructions.push(`Arrive at ${rotueSegment.endEdge.name}`);
919
+ rotueSegment.instructions.push("Arrive at ".concat(rotueSegment.endEdge.name));
933
920
  }
934
921
  } else if (rotueSegment.maneuverType === ManeuverType.EnterPortal) {
935
- let instruction = `Enter ${rotueSegment.startEdge.name} at ${rotueSegment.startEdge.whereDimension.split('.').slice(-2).join(' ').toUpperCase()}`;
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 = `Continue to ${getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension)}`;
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 = `Take ${name} to ${getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension)}`;
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 = `Take ${name} to ${getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension)}`;
938
+ instruction = "Take ".concat(name, " to ").concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
952
939
  rotueSegment.instructions.push(instruction);
953
940
  }
954
941
  }