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