@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 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
- export * as OsmNetworkUtils from './src/OsmNetworkUtils.js';
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
- "module": "dist/index.js",
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.0",
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.0",
33
- "@wemap/logger": "^11.0.0-alpha.0",
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
- "gitHead": "516aaa5323ac9c469cbc75b484b8cae14d1d8d12"
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,5 @@
1
+ import { GraphEdge } from "@wemap/geo";
2
+ import OsmNode from "../OsmNode";
3
+ import OsmWay from "../OsmWay";
4
+
5
+ export default class OsmGraphNode extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }
@@ -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,5 @@
1
+ import { GraphNode } from "@wemap/geo";
2
+ import OsmNode from "../OsmNode";
3
+ import OsmWay from "../OsmWay";
4
+
5
+ export default class OsmGraphNode extends GraphNode<OsmNode, OsmNode | OsmWay>{ }
@@ -0,0 +1,5 @@
1
+ import { GraphProjection } from '@wemap/geo';
2
+
3
+ import { N, E } from './OsmNetworkUtils.js';
4
+
5
+ export default class OsmGraphProjection extends GraphProjection<N, E>{ }
@@ -0,0 +1,5 @@
1
+ import { GraphRouter } from '@wemap/geo';
2
+
3
+ import { N, E } from './OsmNetworkUtils.js';
4
+
5
+ export default class OsmGraphRouter extends GraphRouter<N, E>{ }
@@ -0,0 +1,5 @@
1
+ import { GraphRouterOptions } from '@wemap/geo';
2
+
3
+ import { N, E } from './OsmNetworkUtils.js';
4
+
5
+ export default class OsmGraphRouterOptions extends GraphRouterOptions<N, E>{ }
@@ -0,0 +1,5 @@
1
+ import { MapMatching } from '@wemap/geo';
2
+
3
+ import { N, E } from './OsmNetworkUtils.js';
4
+
5
+ export default class OsmMapMatching extends MapMatching<N, E>{ }
@@ -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 { Network } from '@wemap/geo';
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 './OsmModel.js';
11
- import OsmParser from './OsmParser.js';
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, '../assets/' + fileName);
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: Network<OsmElement>;
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, GraphEdge, GraphNode, Network } from '@wemap/geo';
2
- import OsmElement from './OsmElement';
3
- import OsmModel from './OsmModel';
4
- import OsmNode from './OsmNode';
5
- import OsmWay from './OsmWay';
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: Network<OsmElement>, name: string) {
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: Network<OsmElement>, name: string) {
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: GraphEdge<OsmElement>, way: OsmWay) {
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: GraphNode<OsmElement>[],
42
- edges: GraphEdge<OsmElement>[],
43
- elevatorNode: GraphNode<OsmElement>
45
+ nodes: OsmGraphNode[],
46
+ edges: OsmGraphEdge[],
47
+ elevatorNode: OsmGraphNode
44
48
  ) {
45
49
 
46
- const createdNodes: GraphNode<OsmElement>[] = [];
47
- const getOrCreateLevelNode = (level: number | null, builtFrom: OsmElement | null) => {
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 GraphNode(elevatorNode.coords.clone(), builtFrom);
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 GraphEdge(
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: GraphNode<OsmElement>[] = [];
111
- const edges: GraphEdge<OsmElement>[] = [];
114
+ const nodes: OsmGraphNode[] = [];
115
+ const edges: OsmGraphEdge[] = [];
112
116
 
113
- const nodesCreated: { [key: number]: GraphNode<OsmElement> } = {};
114
- const elevatorNodes: GraphNode<OsmElement>[] = [];
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 GraphNode(osmNode.coords, osmNode);
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 GraphEdge<OsmElement>(firstNode, secondNode, way.level, way);
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 Network(nodes, edges);
156
+ const networkModel = new OsmNetwork(nodes, edges);
153
157
 
154
- GraphNode.generateNodesLevels(networkModel.nodes);
158
+ OsmGraphNode.generateNodesLevels(networkModel.nodes);
155
159
 
156
160
  return networkModel;
157
161
  }