@wemap/osm 11.0.0-alpha.0 → 11.0.0-alpha.12
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/index.ts +10 -1
- package/package.json +11 -5
- package/src/OsmWay.ts +4 -0
- package/src/graph/OsmGraphEdge.ts +5 -0
- package/src/graph/OsmGraphItinerary.ts +13 -0
- package/src/graph/OsmGraphNode.ts +5 -0
- package/src/graph/OsmGraphProjection.ts +5 -0
- package/src/graph/OsmGraphRouter.ts +5 -0
- package/src/graph/OsmGraphRouterOptions.ts +5 -0
- package/src/graph/OsmMapMatching.ts +5 -0
- package/src/graph/OsmNetwork.ts +9 -0
- package/src/{OsmNetworkUtils.spec.ts → graph/OsmNetworkUtils.spec.ts} +6 -11
- package/src/{OsmNetworkUtils.ts → graph/OsmNetworkUtils.ts} +28 -24
- package/dist/index.js +0 -2138
- package/dist/index.js.map +0 -1
package/index.ts
CHANGED
|
@@ -3,4 +3,13 @@ export { default as OsmModel } from './src/OsmModel.js';
|
|
|
3
3
|
export { default as OsmNode } from './src/OsmNode.js';
|
|
4
4
|
export { default as OsmParser } from './src/OsmParser.js';
|
|
5
5
|
export { default as OsmWay } from './src/OsmWay.js';
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
export { default as OsmGraphNode } from './src/graph/OsmGraphNode.js';
|
|
8
|
+
export { default as OsmGraphEdge } from './src/graph/OsmGraphEdge.js';
|
|
9
|
+
export { default as OsmGraphItinerary } from './src/graph/OsmGraphItinerary.js';
|
|
10
|
+
export { default as OsmNetwork } from './src/graph/OsmNetwork.js';
|
|
11
|
+
export { default as OsmGraphProjection } from './src/graph/OsmGraphProjection.js';
|
|
12
|
+
export { default as OsmGraphRouter } from './src/graph/OsmGraphRouter.js';
|
|
13
|
+
export { default as OsmGraphRouterOptions } from './src/graph/OsmGraphRouterOptions.js';
|
|
14
|
+
export { default as OsmMapMatching } from './src/graph/OsmMapMatching.js';
|
|
15
|
+
export * as OsmNetworkUtils from './src/graph/OsmNetworkUtils.js';
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"Thibaud Michel <thibaud@getwemap.com>"
|
|
5
5
|
],
|
|
6
6
|
"description": "Wemap OSM utils package",
|
|
7
|
-
"
|
|
7
|
+
"main": "dist/index.js",
|
|
8
8
|
"types": "index.ts",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"directory": "packages/osm"
|
|
13
13
|
},
|
|
14
14
|
"name": "@wemap/osm",
|
|
15
|
-
"version": "11.0.0-alpha.
|
|
15
|
+
"version": "11.0.0-alpha.12",
|
|
16
16
|
"bugs": {
|
|
17
17
|
"url": "https://github.com/wemap/wemap-modules-js/issues"
|
|
18
18
|
},
|
|
@@ -29,9 +29,15 @@
|
|
|
29
29
|
],
|
|
30
30
|
"license": "ISC",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@wemap/geo": "^11.0.0-alpha.
|
|
33
|
-
"@wemap/logger": "^11.0.0-alpha.
|
|
32
|
+
"@wemap/geo": "^11.0.0-alpha.12",
|
|
33
|
+
"@wemap/logger": "^11.0.0-alpha.4",
|
|
34
34
|
"saxes": "^5.0.1"
|
|
35
35
|
},
|
|
36
|
-
"
|
|
36
|
+
"exports": {
|
|
37
|
+
".": {
|
|
38
|
+
"import": "./dist/index.mjs",
|
|
39
|
+
"require": "./dist/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"gitHead": "42a1aece349e6db3151938ebc9b3d85daf9bb90d"
|
|
37
43
|
}
|
package/src/OsmWay.ts
CHANGED
|
@@ -28,6 +28,10 @@ class OsmWay extends OsmElement {
|
|
|
28
28
|
return !this.areStairs && this.isConveying;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
get isElevator() {
|
|
32
|
+
return this.tags.highway === 'elevator';
|
|
33
|
+
}
|
|
34
|
+
|
|
31
35
|
get isArea() {
|
|
32
36
|
// That is not the real definition for OSM
|
|
33
37
|
return this.nodes[0] === this.nodes[this.nodes.length - 1];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Coordinates, GraphItinerary, GraphNode } from '@wemap/geo';
|
|
2
|
+
|
|
3
|
+
import { N, E } from './OsmNetworkUtils.js';
|
|
4
|
+
|
|
5
|
+
export default class OsmGraphItinerary extends GraphItinerary<N, E>{
|
|
6
|
+
|
|
7
|
+
static fromNetworkNodes<A = N, B = E>(
|
|
8
|
+
start: Coordinates, end: Coordinates,
|
|
9
|
+
networkNodes: GraphNode<A, B>[], edgesWeights: number[]
|
|
10
|
+
) {
|
|
11
|
+
return super.fromNetworkNodes(start, end, networkNodes, edgesWeights) as GraphItinerary<A, B>;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Coordinates, Network } from '@wemap/geo';
|
|
2
|
+
|
|
3
|
+
import { N, E } from './OsmNetworkUtils.js';
|
|
4
|
+
|
|
5
|
+
export default class OsmNetwork extends Network<N, E>{
|
|
6
|
+
static fromCoordinates<A = N, B = E>(segments: Coordinates[][]) {
|
|
7
|
+
return super.fromCoordinates<N, E>(segments) as Network<A, B>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -1,25 +1,20 @@
|
|
|
1
|
-
/* eslint-disable max-statements */
|
|
2
1
|
import chai from 'chai';
|
|
3
2
|
import fs from 'fs';
|
|
4
3
|
import path from 'path';
|
|
5
4
|
import { fileURLToPath } from 'url';
|
|
6
5
|
|
|
7
|
-
import {
|
|
8
|
-
import { verifyCoherence as verifyCoherenceImport } from '@wemap/geo/tests/CommonTest.js';
|
|
6
|
+
import { verifyCoherence } from '../../../geo/tests/CommonTest.js';
|
|
9
7
|
|
|
10
|
-
import OsmModel from '
|
|
11
|
-
import OsmParser from '
|
|
8
|
+
import OsmModel from '../OsmModel.js';
|
|
9
|
+
import OsmParser from '../OsmParser.js';
|
|
10
|
+
import OsmNetwork from './OsmNetwork.js';
|
|
12
11
|
import { createNetworkFromOsmModel, getNodeByName, getEdgeByName } from './OsmNetworkUtils.js';
|
|
13
|
-
import OsmElement from './OsmElement.js';
|
|
14
12
|
|
|
15
13
|
const { expect } = chai;
|
|
16
14
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
15
|
|
|
18
|
-
// TODO: No idea on how to avoid this problem
|
|
19
|
-
const verifyCoherence = verifyCoherenceImport as any as (<T>(network: Network<T>) => void);
|
|
20
|
-
|
|
21
16
|
const loadFile = (fileName: string) => {
|
|
22
|
-
const filePath = path.resolve(__dirname, '
|
|
17
|
+
const filePath = path.resolve(__dirname, '../../assets/' + fileName);
|
|
23
18
|
return fs.readFileSync(filePath, 'utf8');
|
|
24
19
|
};
|
|
25
20
|
|
|
@@ -27,7 +22,7 @@ describe('OsmNetwork - simple', () => {
|
|
|
27
22
|
|
|
28
23
|
let osmModel: OsmModel;
|
|
29
24
|
|
|
30
|
-
let network:
|
|
25
|
+
let network: OsmNetwork;
|
|
31
26
|
const osmXmlString = loadFile('network-simple.osm');
|
|
32
27
|
|
|
33
28
|
it('Network creation', () => {
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { Level
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { Level } from '@wemap/geo';
|
|
2
|
+
import OsmGraphNode from './OsmGraphNode';
|
|
3
|
+
import OsmGraphEdge from './OsmGraphEdge';
|
|
4
|
+
import OsmModel from '../OsmModel';
|
|
5
|
+
import OsmNode from '../OsmNode';
|
|
6
|
+
import OsmWay from '../OsmWay';
|
|
7
|
+
import OsmNetwork from './OsmNetwork';
|
|
6
8
|
|
|
9
|
+
export type N = OsmNode;
|
|
10
|
+
export type E = OsmNode | OsmWay;
|
|
7
11
|
|
|
8
|
-
export const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk'];
|
|
12
|
+
export const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk', 'elevator'];
|
|
9
13
|
|
|
10
14
|
export const DEFAULT_WAY_SELECTOR = (way: OsmWay) => {
|
|
11
15
|
return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)
|
|
@@ -14,15 +18,15 @@ export const DEFAULT_WAY_SELECTOR = (way: OsmWay) => {
|
|
|
14
18
|
|| way.tags.railway === 'platform';
|
|
15
19
|
};
|
|
16
20
|
|
|
17
|
-
export function getNodeByName(network:
|
|
21
|
+
export function getNodeByName(network: OsmNetwork, name: string) {
|
|
18
22
|
return network.nodes.find(({ builtFrom }) => builtFrom?.tags.name === name);
|
|
19
23
|
}
|
|
20
24
|
|
|
21
|
-
export function getEdgeByName(network:
|
|
25
|
+
export function getEdgeByName(network: OsmNetwork, name: string) {
|
|
22
26
|
return network.edges.find(({ builtFrom }) => builtFrom?.tags.name === name);
|
|
23
27
|
}
|
|
24
28
|
|
|
25
|
-
function manageOneWay(edge:
|
|
29
|
+
function manageOneWay(edge: OsmGraphEdge, way: OsmWay) {
|
|
26
30
|
|
|
27
31
|
const { highway, oneway, conveying } = way.tags;
|
|
28
32
|
|
|
@@ -38,16 +42,16 @@ function manageOneWay(edge: GraphEdge<OsmElement>, way: OsmWay) {
|
|
|
38
42
|
|
|
39
43
|
|
|
40
44
|
function createNodesAndEdgesFromElevator(
|
|
41
|
-
nodes:
|
|
42
|
-
edges:
|
|
43
|
-
elevatorNode:
|
|
45
|
+
nodes: OsmGraphNode[],
|
|
46
|
+
edges: OsmGraphEdge[],
|
|
47
|
+
elevatorNode: OsmGraphNode
|
|
44
48
|
) {
|
|
45
49
|
|
|
46
|
-
const createdNodes:
|
|
47
|
-
const getOrCreateLevelNode = (level: number | null, builtFrom:
|
|
50
|
+
const createdNodes: OsmGraphNode[] = [];
|
|
51
|
+
const getOrCreateLevelNode = (level: number | null, builtFrom: N | null) => {
|
|
48
52
|
let levelNode = createdNodes.find(({ coords }) => Level.equals(level, coords.level));
|
|
49
53
|
if (!levelNode) {
|
|
50
|
-
levelNode = new
|
|
54
|
+
levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);
|
|
51
55
|
levelNode.coords.level = level;
|
|
52
56
|
createdNodes.push(levelNode);
|
|
53
57
|
nodes.push(levelNode);
|
|
@@ -85,7 +89,7 @@ function createNodesAndEdgesFromElevator(
|
|
|
85
89
|
const minLevel = Math.min(createdNode1.coords.level as number, createdNode2.coords.level as number);
|
|
86
90
|
const maxLevel = Math.max(createdNode1.coords.level as number, createdNode2.coords.level as number);
|
|
87
91
|
|
|
88
|
-
const newEdge = new
|
|
92
|
+
const newEdge = new OsmGraphEdge(
|
|
89
93
|
createdNode1,
|
|
90
94
|
createdNode2,
|
|
91
95
|
[minLevel, maxLevel],
|
|
@@ -107,16 +111,16 @@ export function createNetworkFromOsmModel(
|
|
|
107
111
|
waySelectionFilter = DEFAULT_WAY_SELECTOR
|
|
108
112
|
) {
|
|
109
113
|
|
|
110
|
-
const nodes:
|
|
111
|
-
const edges:
|
|
114
|
+
const nodes: OsmGraphNode[] = [];
|
|
115
|
+
const edges: OsmGraphEdge[] = [];
|
|
112
116
|
|
|
113
|
-
const nodesCreated: { [key: number]:
|
|
114
|
-
const elevatorNodes:
|
|
117
|
+
const nodesCreated: { [key: number]: OsmGraphNode } = {};
|
|
118
|
+
const elevatorNodes: OsmGraphNode[] = [];
|
|
115
119
|
|
|
116
120
|
const getOrCreateNode = (osmNode: OsmNode) => {
|
|
117
121
|
let node = nodesCreated[osmNode.id];
|
|
118
122
|
if (!node) {
|
|
119
|
-
node = new
|
|
123
|
+
node = new OsmGraphNode(osmNode.coords, osmNode);
|
|
120
124
|
nodesCreated[osmNode.id] = node;
|
|
121
125
|
nodes.push(node);
|
|
122
126
|
|
|
@@ -136,7 +140,7 @@ export function createNetworkFromOsmModel(
|
|
|
136
140
|
for (let i = 1; i < way.nodes.length; i++) {
|
|
137
141
|
const secondNode = getOrCreateNode(way.nodes[i]);
|
|
138
142
|
|
|
139
|
-
const edge = new
|
|
143
|
+
const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);
|
|
140
144
|
manageOneWay(edge, way);
|
|
141
145
|
edges.push(edge);
|
|
142
146
|
firstNode = secondNode;
|
|
@@ -149,9 +153,9 @@ export function createNetworkFromOsmModel(
|
|
|
149
153
|
createNodesAndEdgesFromElevator(nodes, edges, node);
|
|
150
154
|
});
|
|
151
155
|
|
|
152
|
-
const networkModel = new
|
|
156
|
+
const networkModel = new OsmNetwork(nodes, edges);
|
|
153
157
|
|
|
154
|
-
|
|
158
|
+
OsmGraphNode.generateNodesLevels(networkModel.nodes);
|
|
155
159
|
|
|
156
160
|
return networkModel;
|
|
157
161
|
}
|