@wemap/routers 11.3.0 → 11.3.2
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/dist/index.js +58 -95
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +58 -95
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/wemap-osm/OsmGraph.ts +61 -120
- package/src/wemap-osm/OsmRouter.ts +2 -2
- package/src/wemap-osm/OsmRouterOptions.ts +2 -2
- package/src/wemap-osm/OsmRouter.elevators.spec.ts +0 -105
package/dist/index.mjs
CHANGED
|
@@ -582,91 +582,53 @@ const _OsmGraph = class extends GeoGraph {
|
|
|
582
582
|
return super.getEdgeByName(name);
|
|
583
583
|
}
|
|
584
584
|
static fromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SELECTOR) {
|
|
585
|
-
const
|
|
585
|
+
const nodes = [];
|
|
586
586
|
const edges = [];
|
|
587
|
-
const
|
|
588
|
-
const
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
)
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
}
|
|
598
|
-
let levelsToGenerate = [null];
|
|
599
|
-
if ("level" in osmNode.tags) {
|
|
600
|
-
levelsToGenerate = [osmNode.coords.level];
|
|
601
|
-
if ("repeat_on" in osmNode.tags) {
|
|
602
|
-
levelsToGenerate.push(...osmNode.tags.repeat_on.split(";").map(Level.fromString));
|
|
587
|
+
const nodesCreated = {};
|
|
588
|
+
const elevatorNodes = [];
|
|
589
|
+
const getOrCreateNode = (osmNode) => {
|
|
590
|
+
let node = nodesCreated[osmNode.id];
|
|
591
|
+
if (!node) {
|
|
592
|
+
node = new GeoGraphVertex(osmNode.coords, { data: osmNode, name: osmNode.tags.name });
|
|
593
|
+
nodesCreated[osmNode.id] = node;
|
|
594
|
+
nodes.push(node);
|
|
595
|
+
if (osmNode.tags.highway === "elevator") {
|
|
596
|
+
elevatorNodes.push(node);
|
|
603
597
|
}
|
|
604
|
-
} else if (forceLevel !== null) {
|
|
605
|
-
levelsToGenerate = [forceLevel];
|
|
606
598
|
}
|
|
607
|
-
|
|
608
|
-
const newVertex = new GeoGraphVertex(osmNode.coords.clone(), { data: osmNode, name: osmNode.tags.name });
|
|
609
|
-
newVertex.coords.level = level;
|
|
610
|
-
vertices.push(newVertex);
|
|
611
|
-
if (Level.intersect(newVertex.coords.level, forceLevel) || forceLevel === null && "level" in osmNode.tags) {
|
|
612
|
-
vertex = newVertex;
|
|
613
|
-
}
|
|
614
|
-
});
|
|
615
|
-
if (osmNode.tags.highway === "elevator" && vertex) {
|
|
616
|
-
elevatorVertices.push(vertex);
|
|
617
|
-
}
|
|
618
|
-
return vertex;
|
|
599
|
+
return node;
|
|
619
600
|
};
|
|
620
601
|
osmModel.ways.forEach((way) => {
|
|
621
602
|
if (!waySelectionFilter(way)) {
|
|
622
603
|
return;
|
|
623
604
|
}
|
|
624
|
-
let
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
605
|
+
let firstNode = getOrCreateNode(way.nodes[0]);
|
|
606
|
+
for (let i = 1; i < way.nodes.length; i++) {
|
|
607
|
+
const secondNode = getOrCreateNode(way.nodes[i]);
|
|
608
|
+
const edge = new GeoGraphEdge(
|
|
609
|
+
firstNode,
|
|
610
|
+
secondNode,
|
|
611
|
+
{ data: way, name: way.tags.name, level: way.level }
|
|
612
|
+
);
|
|
613
|
+
_OsmGraph.manageOneWay(edge, way);
|
|
614
|
+
edges.push(edge);
|
|
615
|
+
firstNode = secondNode;
|
|
630
616
|
}
|
|
631
|
-
levelsToGenerate.forEach((level) => {
|
|
632
|
-
let firstVertex = getOrCreateVertex(way.nodes[0], level);
|
|
633
|
-
for (let i = 1; i < way.nodes.length; i++) {
|
|
634
|
-
const secondVertex = getOrCreateVertex(way.nodes[i], level);
|
|
635
|
-
const edge = new GeoGraphEdge(
|
|
636
|
-
firstVertex,
|
|
637
|
-
secondVertex,
|
|
638
|
-
{ data: way, name: way.tags.name, level }
|
|
639
|
-
);
|
|
640
|
-
_OsmGraph.manageOneWay(edge, way);
|
|
641
|
-
edges.push(edge);
|
|
642
|
-
firstVertex = secondVertex;
|
|
643
|
-
}
|
|
644
|
-
});
|
|
645
617
|
});
|
|
646
618
|
osmModel.ways.filter((way) => way.isElevator).forEach((way) => {
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
const newEdge = new GeoGraphEdge(
|
|
655
|
-
elevatorCenterVertex,
|
|
656
|
-
entryVertex,
|
|
657
|
-
{
|
|
658
|
-
level: Level.intersection(elevatorCenterVertex.coords.level, entryVertex.coords.level),
|
|
659
|
-
data: way
|
|
660
|
-
}
|
|
661
|
-
);
|
|
662
|
-
edges.push(newEdge);
|
|
619
|
+
way.nodes.forEach((node) => {
|
|
620
|
+
const connectedWays = node.ways.filter((otherWay) => otherWay != way);
|
|
621
|
+
if (connectedWays.length) {
|
|
622
|
+
const graphVertex = getOrCreateNode(node);
|
|
623
|
+
graphVertex.data.tags.highway = "elevator";
|
|
624
|
+
elevatorNodes.push(graphVertex);
|
|
625
|
+
}
|
|
663
626
|
});
|
|
664
|
-
elevatorVertices.push(elevatorCenterVertex);
|
|
665
627
|
});
|
|
666
|
-
|
|
667
|
-
_OsmGraph.createNodesAndEdgesFromElevator(
|
|
628
|
+
elevatorNodes.forEach((node) => {
|
|
629
|
+
_OsmGraph.createNodesAndEdgesFromElevator(nodes, edges, node);
|
|
668
630
|
});
|
|
669
|
-
return new _OsmGraph(
|
|
631
|
+
return new _OsmGraph(nodes, edges, true);
|
|
670
632
|
}
|
|
671
633
|
static manageOneWay(edge, way) {
|
|
672
634
|
const { highway, oneway, conveying } = way.tags;
|
|
@@ -677,52 +639,53 @@ const _OsmGraph = class extends GeoGraph {
|
|
|
677
639
|
edge.vertex2 = tmpNode;
|
|
678
640
|
}
|
|
679
641
|
}
|
|
680
|
-
static createNodesAndEdgesFromElevator(
|
|
681
|
-
const
|
|
642
|
+
static createNodesAndEdgesFromElevator(nodes, edges, elevatorNode) {
|
|
643
|
+
const createdNodes = [];
|
|
682
644
|
const getOrCreateLevelVertex = (level) => {
|
|
683
|
-
let levelVertex =
|
|
645
|
+
let levelVertex = createdNodes.find(({ coords }) => Level.equals(level, coords.level));
|
|
684
646
|
if (!levelVertex) {
|
|
685
|
-
levelVertex = new GeoGraphVertex(
|
|
686
|
-
data:
|
|
687
|
-
name: `${
|
|
647
|
+
levelVertex = new GeoGraphVertex(elevatorNode.coords.clone(), {
|
|
648
|
+
data: elevatorNode.data,
|
|
649
|
+
name: `${elevatorNode.name} (elevator lvl: ${level})`
|
|
688
650
|
});
|
|
689
651
|
levelVertex.coords.level = level;
|
|
690
|
-
|
|
691
|
-
|
|
652
|
+
createdNodes.push(levelVertex);
|
|
653
|
+
nodes.push(levelVertex);
|
|
692
654
|
}
|
|
693
655
|
return levelVertex;
|
|
694
656
|
};
|
|
695
|
-
|
|
657
|
+
elevatorNode.edges.forEach((edge) => {
|
|
696
658
|
if (Level.isRange(edge.level)) {
|
|
697
659
|
throw new Error("Cannot handle this elevator edge due to ambiguity");
|
|
698
660
|
}
|
|
699
661
|
const levelVertex = getOrCreateLevelVertex(edge.level);
|
|
700
|
-
if (edge.vertex1 ===
|
|
662
|
+
if (edge.vertex1 === elevatorNode) {
|
|
701
663
|
edge.vertex1 = levelVertex;
|
|
702
664
|
} else {
|
|
703
665
|
edge.vertex2 = levelVertex;
|
|
704
666
|
}
|
|
667
|
+
levelVertex.edges.push(edge);
|
|
705
668
|
});
|
|
706
|
-
for (let i = 0; i <
|
|
707
|
-
for (let j = i + 1; j <
|
|
708
|
-
const
|
|
709
|
-
const
|
|
710
|
-
if (
|
|
669
|
+
for (let i = 0; i < createdNodes.length; i++) {
|
|
670
|
+
for (let j = i + 1; j < createdNodes.length; j++) {
|
|
671
|
+
const createdNode1 = createdNodes[i];
|
|
672
|
+
const createdNode2 = createdNodes[j];
|
|
673
|
+
if (createdNode1.coords.level === null || createdNode2.coords.level === null) {
|
|
711
674
|
continue;
|
|
712
675
|
}
|
|
713
|
-
const minLevel = Math.min(
|
|
714
|
-
const maxLevel = Math.max(
|
|
676
|
+
const minLevel = Math.min(createdNode1.coords.level, createdNode2.coords.level);
|
|
677
|
+
const maxLevel = Math.max(createdNode1.coords.level, createdNode2.coords.level);
|
|
715
678
|
const newEdge = new GeoGraphEdge(
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
{ data:
|
|
679
|
+
createdNode1,
|
|
680
|
+
createdNode2,
|
|
681
|
+
{ data: elevatorNode.data, name: elevatorNode.name, level: [minLevel, maxLevel] }
|
|
719
682
|
);
|
|
720
683
|
edges.push(newEdge);
|
|
721
684
|
}
|
|
722
685
|
}
|
|
723
|
-
const elevatorNodeIndex =
|
|
686
|
+
const elevatorNodeIndex = nodes.indexOf(elevatorNode);
|
|
724
687
|
if (elevatorNodeIndex > -1) {
|
|
725
|
-
|
|
688
|
+
nodes.splice(elevatorNodeIndex, 1);
|
|
726
689
|
}
|
|
727
690
|
}
|
|
728
691
|
};
|
|
@@ -882,9 +845,9 @@ const _WemapOsmRouter = class extends GeoGraphRouter {
|
|
|
882
845
|
return false;
|
|
883
846
|
if (typeof (options == null ? void 0 : options.useStairs) !== "undefined" && !(options == null ? void 0 : options.useStairs) && edge.data instanceof OsmWay && edge.data.areStairs && !edge.data.isConveying)
|
|
884
847
|
return false;
|
|
885
|
-
if (typeof (options == null ? void 0 : options.
|
|
848
|
+
if (typeof (options == null ? void 0 : options.useEscalators) !== "undefined" && !(options == null ? void 0 : options.useEscalators) && edge.data instanceof OsmWay && edge.data.areStairs && edge.data.isConveying)
|
|
886
849
|
return false;
|
|
887
|
-
if (typeof (options == null ? void 0 : options.
|
|
850
|
+
if (typeof (options == null ? void 0 : options.useElevators) !== "undefined" && !(options == null ? void 0 : options.useElevators) && ((_c = edge.data) == null ? void 0 : _c.isElevator))
|
|
888
851
|
return false;
|
|
889
852
|
return true;
|
|
890
853
|
};
|