|
18 | 18 |
|
19 | 19 | package com.graphhopper.storage;
|
20 | 20 |
|
| 21 | +import com.carrotsearch.hppc.DoubleArrayList; |
| 22 | +import com.carrotsearch.hppc.IntArrayList; |
21 | 23 | import com.graphhopper.routing.ev.EdgeIntAccess;
|
22 | 24 | import com.graphhopper.util.*;
|
23 | 25 | import com.graphhopper.util.shapes.BBox;
|
24 | 26 |
|
25 | 27 | import java.util.Locale;
|
| 28 | +import java.util.function.IntUnaryOperator; |
26 | 29 |
|
27 | 30 | import static com.graphhopper.util.EdgeIterator.NO_EDGE;
|
28 | 31 | import static com.graphhopper.util.Helper.nf;
|
@@ -218,6 +221,40 @@ public int edge(int nodeA, int nodeB) {
|
218 | 221 | return edge;
|
219 | 222 | }
|
220 | 223 |
|
| 224 | + public void relabelNodes(IntUnaryOperator getNewNodeForOldNode) { |
| 225 | + for (int edge = 0; edge < getEdges(); edge++) { |
| 226 | + long pointer = toEdgePointer(edge); |
| 227 | + setNodeA(pointer, getNewNodeForOldNode.applyAsInt(getNodeA(pointer))); |
| 228 | + setNodeB(pointer, getNewNodeForOldNode.applyAsInt(getNodeB(pointer))); |
| 229 | + } |
| 230 | + IntArrayList edgeRefs = new IntArrayList(); |
| 231 | + DoubleArrayList lats = new DoubleArrayList(); |
| 232 | + DoubleArrayList lons = new DoubleArrayList(); |
| 233 | + DoubleArrayList eles = new DoubleArrayList(); |
| 234 | + IntArrayList tcs = new IntArrayList(); |
| 235 | + for (int node = 0; node < getNodes(); node++) { |
| 236 | + long pointer = toNodePointer(node); |
| 237 | + edgeRefs.add(getEdgeRef(pointer)); |
| 238 | + lats.add(getLat(pointer)); |
| 239 | + lons.add(getLon(pointer)); |
| 240 | + if (withElevation()) |
| 241 | + eles.add(getEle(pointer)); |
| 242 | + if (withTurnCosts()) |
| 243 | + tcs.add(getTurnCostRef(pointer)); |
| 244 | + } |
| 245 | + for (int oldNode = 0; oldNode < getNodes(); oldNode++) { |
| 246 | + int newNode = getNewNodeForOldNode.applyAsInt(oldNode); |
| 247 | + long pointer = toNodePointer(newNode); |
| 248 | + setEdgeRef(pointer, edgeRefs.get(oldNode)); |
| 249 | + setLat(pointer, lats.get(oldNode)); |
| 250 | + setLon(pointer, lons.get(oldNode)); |
| 251 | + if (withElevation()) |
| 252 | + setEle(pointer, eles.get(oldNode)); |
| 253 | + if (withTurnCosts()) |
| 254 | + setTurnCostRef(pointer, tcs.get(oldNode)); |
| 255 | + } |
| 256 | + } |
| 257 | + |
221 | 258 | public void ensureNodeCapacity(int node) {
|
222 | 259 | if (node < nodeCount)
|
223 | 260 | return;
|
|
0 commit comments