@twinmatrix/spatialverse-sdk-web 0.0.2 → 0.0.3
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/index.js +9 -9
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +213 -294
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +43 -45
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +241 -271
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +167 -215
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js +28 -30
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +876 -1188
- 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 +173 -163
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/interfaces.js +6 -6
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/interfaces.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js +6 -6
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routeLayers.js +3 -3
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routeLayers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +546 -620
- 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 +155 -160
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/customStyles.js +2 -2
- package/lib/cjs/meta-atlas-sdk/customStyles.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/customerLayer.js +15 -29
- package/lib/cjs/meta-atlas-sdk/customerLayer.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/customerLayerVariant.js +5 -5
- package/lib/cjs/meta-atlas-sdk/customerLayerVariant.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +832 -1060
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js +33 -50
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +18 -36
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/mapobjects-store.js +6 -6
- package/lib/cjs/meta-atlas-sdk/utils/mapobjects-store.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/routing-store.js +6 -6
- package/lib/cjs/meta-atlas-sdk/utils/routing-store.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +428 -556
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/cjs/react/MetaAtlasMap.js +127 -0
- package/lib/cjs/react/MetaAtlasMap.js.map +1 -0
- package/lib/cjs/react/hooks/useDrawing/index.js +17 -18
- package/lib/cjs/react/hooks/useDrawing/index.js.map +1 -1
- package/lib/cjs/react/hooks/useFocus/index.js +48 -55
- package/lib/cjs/react/hooks/useFocus/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMapEvents/index.js +40 -50
- package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMapOverlays/index.js +20 -21
- package/lib/cjs/react/hooks/useMapOverlays/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMetaAtlas/index.js +77 -95
- package/lib/cjs/react/hooks/useMetaAtlas/index.js.map +1 -1
- package/lib/cjs/react/hooks/useMetaAtlas.js +78 -96
- package/lib/cjs/react/hooks/useMetaAtlas.js.map +1 -1
- package/lib/cjs/react/hooks/useRouting/index.js +21 -20
- package/lib/cjs/react/hooks/useRouting/index.js.map +1 -1
- package/lib/cjs/react/hooks/useSearch/index.js +35 -34
- package/lib/cjs/react/hooks/useSearch/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/index.js +30 -29
- package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/utils.js +2 -2
- package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
- package/lib/cjs/react/index.js +31 -31
- package/lib/cjs/react/index.js.map +1 -1
- package/lib/cjs/react/stores/useMapDataStore.js +53 -64
- package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
- package/lib/cjs/react/stores/useMetaAtlasStore.js +27 -40
- package/lib/cjs/react/stores/useMetaAtlasStore.js.map +1 -1
- package/lib/esm/index.js +3 -7
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +10 -9
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +2 -2
- 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/fetchMapObjectsData.js +4 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +22 -14
- 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 +8 -8
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js +3 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +18 -11
- 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 +4 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/customerLayer.js +4 -1
- package/lib/esm/meta-atlas-sdk/customerLayer.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +80 -61
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js +3 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +19 -15
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/esm/react/MetaAtlasMap.js +120 -0
- package/lib/esm/react/MetaAtlasMap.js.map +1 -0
- package/lib/esm/react/hooks/useDrawing/index.js +2 -2
- package/lib/esm/react/hooks/useDrawing/index.js.map +1 -1
- package/lib/esm/react/hooks/useFocus/index.js +4 -3
- package/lib/esm/react/hooks/useFocus/index.js.map +1 -1
- package/lib/esm/react/hooks/useMapEvents/index.js +3 -3
- package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/esm/react/hooks/useMapOverlays/index.js +2 -2
- package/lib/esm/react/hooks/useMapOverlays/index.js.map +1 -1
- package/lib/esm/react/hooks/useMetaAtlas/index.js +162 -60
- package/lib/esm/react/hooks/useMetaAtlas/index.js.map +1 -1
- package/lib/esm/react/hooks/useMetaAtlas.js +162 -60
- package/lib/esm/react/hooks/useMetaAtlas.js.map +1 -1
- package/lib/esm/react/hooks/useRouting/index.js +2 -2
- package/lib/esm/react/hooks/useRouting/index.js.map +1 -1
- package/lib/esm/react/hooks/useSearch/index.js +2 -2
- package/lib/esm/react/hooks/useSearch/index.js.map +1 -1
- package/lib/esm/react/hooks/useStampRally/index.js +8 -7
- package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/esm/react/index.js +11 -15
- package/lib/esm/react/index.js.map +1 -1
- package/package.json +9 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["aStar","createGraph","point","multiPoint","turf","cloneDeep","isEmpty","toInteger","LineDirection","RouteDimension","WALK_SPEED","getNetworkFeatures","getEdge","getPortalDataForDimension","isMovingPortalTaxonomy","isPortalTaxonomy","DEFAULT_DIMENSION","filterPortalEdgeDataByList","filterPortalEdgeDataByWhere","getParentDimension","optimized","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","vertexName","toString","vertex","getNode","undefined","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point2","distance","units","addEdgeToGraph","edge","node","index","length","line","getCoords","i","Edge","properties","direction","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","console","warn","portalPath","getPortalPath","invertStart","prevVertexMapObjId","set","Set","add","portalDataForSet","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","result","routes","findPath","pathFinder","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","geojsonPath","getRouteWithAllPortals","performance","now","concatenatedEdgeFeatures","concat","concatenatedNetworkFeatures","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","node2","runRouteIteration","directRoute","routeWithAllPortals","finalRoute","route"],"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":["aStar","createGraph","point","multiPoint","turf","cloneDeep","isEmpty","toInteger","LineDirection","RouteDimension","WALK_SPEED","getNetworkFeatures","getEdge","getPortalDataForDimension","isMovingPortalTaxonomy","isPortalTaxonomy","DEFAULT_DIMENSION","filterPortalEdgeDataByList","filterPortalEdgeDataByWhere","getParentDimension","optimized","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","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point2","distance","units","addEdgeToGraph","edge","node","index","line","getCoords","i","Edge","properties","direction","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","console","warn","portalPath","getPortalPath","invertStart","prevVertexMapObjId","set","Set","add","portalDataForSet","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","result","routes","findPath","pathFinder","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","geojsonPath","getRouteWithAllPortals","performance","now","concatenatedEdgeFeatures","concat","concatenatedNetworkFeatures","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","node2","runRouteIteration","directRoute","routeWithAllPortals","finalRoute","route"],"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,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable camelcase */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData } from "../fetchMapObjectsData.js";
|
|
3
|
+
export function getNetworkFeatures(whereDimension) {
|
|
4
|
+
let includeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
5
5
|
return getRouteNetworkData(whereDimension, includeChildren);
|
|
6
6
|
}
|
|
7
7
|
export function getEdge(mapObjectId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapObjectsHelper.js","names":["getEdgeData","getPortalDataForIds","getImmigrationDataForTaxonomy1","getPortalLinks","getRouteNetworkData","getNetworkFeatures","whereDimension","includeChildren","getEdge","mapObjectId","edge","getPortalDataForDimension","portalData","getPortalDataForMapObjects","mapObjectIds","Array","from","getImmigrationPolygonFeaturesForWhereTaxonomy","taxonomy1Path"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport {\n Edge,\n UserPosition,\n} from './interfaces';\nimport {\n getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData,\n} from '../fetchMapObjectsData';\n\nexport function getNetworkFeatures(whereDimension: string, includeChildren = true) {\n return getRouteNetworkData(whereDimension, includeChildren);\n}\n\nexport function getEdge(mapObjectId: string | UserPosition) : Edge | undefined {\n const edge = getEdgeData(mapObjectId);\n return edge;\n}\n\nexport function getPortalDataForDimension(whereDimension: string) {\n const portalData = getPortalLinks(whereDimension);\n return portalData;\n}\n\nexport function getPortalDataForMapObjects(mapObjectIds: Set<string>) {\n const portalData = getPortalDataForIds(Array.from(mapObjectIds));\n return portalData;\n}\n\nexport function getImmigrationPolygonFeaturesForWhereTaxonomy(whereDimension: string) {\n const taxonomy1Path = whereDimension;\n return getImmigrationDataForTaxonomy1(taxonomy1Path);\n}\n"],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mapObjectsHelper.js","names":["getEdgeData","getPortalDataForIds","getImmigrationDataForTaxonomy1","getPortalLinks","getRouteNetworkData","getNetworkFeatures","whereDimension","includeChildren","arguments","length","undefined","getEdge","mapObjectId","edge","getPortalDataForDimension","portalData","getPortalDataForMapObjects","mapObjectIds","Array","from","getImmigrationPolygonFeaturesForWhereTaxonomy","taxonomy1Path"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport {\n Edge,\n UserPosition,\n} from './interfaces';\nimport {\n getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData,\n} from '../fetchMapObjectsData';\n\nexport function getNetworkFeatures(whereDimension: string, includeChildren = true) {\n return getRouteNetworkData(whereDimension, includeChildren);\n}\n\nexport function getEdge(mapObjectId: string | UserPosition) : Edge | undefined {\n const edge = getEdgeData(mapObjectId);\n return edge;\n}\n\nexport function getPortalDataForDimension(whereDimension: string) {\n const portalData = getPortalLinks(whereDimension);\n return portalData;\n}\n\nexport function getPortalDataForMapObjects(mapObjectIds: Set<string>) {\n const portalData = getPortalDataForIds(Array.from(mapObjectIds));\n return portalData;\n}\n\nexport function getImmigrationPolygonFeaturesForWhereTaxonomy(whereDimension: string) {\n const taxonomy1Path = whereDimension;\n return getImmigrationDataForTaxonomy1(taxonomy1Path);\n}\n"],"mappings":"AAAA;AAAA,SAMEA,WAAW,EAAEC,mBAAmB,EAAEC,8BAA8B,EAAEC,cAAc,EAAEC,mBAAmB;AAGvG,OAAO,SAASC,kBAAkBA,CAACC,cAAsB,EAA0B;EAAA,IAAxBC,eAAe,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAC/E,OAAOJ,mBAAmB,CAACE,cAAc,EAAEC,eAAe,CAAC;AAC7D;AAEA,OAAO,SAASI,OAAOA,CAACC,WAAkC,EAAqB;EAC7E,MAAMC,IAAI,GAAGb,WAAW,CAACY,WAAW,CAAC;EACrC,OAAOC,IAAI;AACb;AAEA,OAAO,SAASC,yBAAyBA,CAACR,cAAsB,EAAE;EAChE,MAAMS,UAAU,GAAGZ,cAAc,CAACG,cAAc,CAAC;EACjD,OAAOS,UAAU;AACnB;AAEA,OAAO,SAASC,0BAA0BA,CAACC,YAAyB,EAAE;EACpE,MAAMF,UAAU,GAAGd,mBAAmB,CAACiB,KAAK,CAACC,IAAI,CAACF,YAAY,CAAC,CAAC;EAChE,OAAOF,UAAU;AACnB;AAEA,OAAO,SAASK,6CAA6CA,CAACd,cAAsB,EAAE;EACpF,MAAMe,aAAa,GAAGf,cAAc;EACpC,OAAOJ,8BAA8B,CAACmB,aAAa,CAAC;AACtD","ignoreList":[]}
|
|
@@ -2,9 +2,9 @@ import { point, lineString } from '@turf/helpers';
|
|
|
2
2
|
import length from '@turf/length';
|
|
3
3
|
import { booleanDisjoint, booleanPointInPolygon, getCoord, getCoords, lineIntersect, lineSlice } from '@turf/turf';
|
|
4
4
|
import { cloneDeep } from 'lodash';
|
|
5
|
-
import { DISTANCE_UNIT, WALK_SPEED, Zone } from
|
|
6
|
-
import RoutingCore from
|
|
7
|
-
import { getImmigrationPolygonFeaturesForWhereTaxonomy, getEdge } from
|
|
5
|
+
import { DISTANCE_UNIT, WALK_SPEED, Zone } from "./interfaces.js";
|
|
6
|
+
import RoutingCore from "./index.js";
|
|
7
|
+
import { getImmigrationPolygonFeaturesForWhereTaxonomy, getEdge } from "./mapObjectsHelper.js";
|
|
8
8
|
export let ManeuverType = /*#__PURE__*/function (ManeuverType) {
|
|
9
9
|
ManeuverType["RouteOverview"] = "Route Overview";
|
|
10
10
|
ManeuverType["SectionOverview"] = "Section Overview";
|
|
@@ -66,7 +66,8 @@ function updateFeatureHighlightState(features, isHighlighted) {
|
|
|
66
66
|
}
|
|
67
67
|
return features;
|
|
68
68
|
}
|
|
69
|
-
export function highlightRouteSegment(pathFeatures, segmentToHighlight
|
|
69
|
+
export function highlightRouteSegment(pathFeatures, segmentToHighlight) {
|
|
70
|
+
let highlightNodeOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
70
71
|
for (let index = 0; index < pathFeatures.length; index += 1) {
|
|
71
72
|
const segment = pathFeatures[index];
|
|
72
73
|
if (segment.properties.segmentNumber === segmentToHighlight) {
|
|
@@ -83,7 +84,8 @@ export function highlightRouteSegment(pathFeatures, segmentToHighlight, highligh
|
|
|
83
84
|
}
|
|
84
85
|
return pathFeatures;
|
|
85
86
|
}
|
|
86
|
-
function getRouteNode(coordinates, segmentNumber, isHighlighted, patchNumber
|
|
87
|
+
function getRouteNode(coordinates, segmentNumber, isHighlighted, patchNumber) {
|
|
88
|
+
let whereDimension = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
|
|
87
89
|
if (coordinates.length === 0) {
|
|
88
90
|
return [];
|
|
89
91
|
}
|
|
@@ -98,7 +100,8 @@ function getRouteNode(coordinates, segmentNumber, isHighlighted, patchNumber, wh
|
|
|
98
100
|
updateFeatureHighlightState(features, isHighlighted);
|
|
99
101
|
return features;
|
|
100
102
|
}
|
|
101
|
-
function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zone
|
|
103
|
+
function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zone) {
|
|
104
|
+
let whereDimension = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';
|
|
102
105
|
if (coordinates.length === 0) {
|
|
103
106
|
return [];
|
|
104
107
|
}
|
|
@@ -127,7 +130,8 @@ function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zo
|
|
|
127
130
|
updateFeatureHighlightState(features, isHighlighted);
|
|
128
131
|
return features;
|
|
129
132
|
}
|
|
130
|
-
export function getLineStringFeaturesOfRouteSegment(routeSegment
|
|
133
|
+
export function getLineStringFeaturesOfRouteSegment(routeSegment) {
|
|
134
|
+
let whereDimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
131
135
|
const lineFeatures = [];
|
|
132
136
|
for (let index = 0; index < routeSegment.features.length; index += 1) {
|
|
133
137
|
const feature = routeSegment.features[index];
|
|
@@ -143,7 +147,8 @@ export function getLineStringFeaturesOfRouteSegment(routeSegment, whereDimension
|
|
|
143
147
|
}
|
|
144
148
|
return lineFeatures;
|
|
145
149
|
}
|
|
146
|
-
export function generateOverviewSegment(route
|
|
150
|
+
export function generateOverviewSegment(route) {
|
|
151
|
+
let indexOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
147
152
|
const overviewSegment = cloneDeep(route.segments[1]);
|
|
148
153
|
const initialWhereDimension = route.segments.length > 1 ? route.segments[1].startEdge.whereDimension : '';
|
|
149
154
|
overviewSegment.coordinates = [];
|
|
@@ -179,8 +184,9 @@ export function generateOverviewSegment(route, indexOffset = 0) {
|
|
|
179
184
|
overviewSegment.distance = route.walkingDistance + route.transportDistance;
|
|
180
185
|
return overviewSegment;
|
|
181
186
|
}
|
|
182
|
-
export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly
|
|
183
|
-
|
|
187
|
+
export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly) {
|
|
188
|
+
let shouldAddOverviewSegment = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
189
|
+
let indexOffset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
|
|
184
190
|
const path = RoutingCore.getRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly);
|
|
185
191
|
const pathSegments = path.routes;
|
|
186
192
|
|
|
@@ -655,7 +661,8 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
|
|
|
655
661
|
}
|
|
656
662
|
return route;
|
|
657
663
|
}
|
|
658
|
-
export function getPatch(route
|
|
664
|
+
export function getPatch(route) {
|
|
665
|
+
let patchNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
659
666
|
let routefeatures = [];
|
|
660
667
|
for (let index = 0; index < route.segments.length; index += 1) {
|
|
661
668
|
const routeSegment = route.segments[index];
|