Node.java (2101B) download
1package osm.message;
2
3import java.util.Iterator;
4
5import osm.routing.RoutingNode;
6import protobuf.ProtobufReader;
7
8// required sint64 id = 1;
9// repeated uint32 keys = 2 [packed = true]; // String IDs.
10// repeated uint32 vals = 3 [packed = true]; // String IDs.
11// optional Info info = 4; // May be omitted in omitmeta
12// required sint64 lat = 8;
13// required sint64 lon = 9;
14public class Node extends AbstractEntity<Node> implements RoutingNode<Node> {
15 protected double latitude, longitude;
16
17 protected Node parent = null;
18 protected long score = Long.MAX_VALUE;
19 protected long heuristicScore = Long.MAX_VALUE;
20
21 public Node(PrimitiveBlock block) {
22 super(block);
23 }
24
25 @Override
26 public Node parseRemaining(Iterator<ProtobufReader> tags) {
27 while (tags.hasNext()) {
28 ProtobufReader message = tags.next();
29 switch (message.tag()) {
30 case 4 -> message.skip();
31 case 8 -> latitude = block.latitudeOffset + block.granularity * message.svarint64();
32 case 9 -> longitude = block.longitudeOffset + block.granularity * message.svarint64();
33 default -> message.throwUnexpected();
34 }
35 }
36 return null;
37 }
38
39 @Override
40 public double getLatitude() {
41 return latitude;
42 }
43
44 @Override
45 public double getLongitude() {
46 return longitude;
47 }
48
49 @Override
50 public Node getParent() {
51 return parent;
52 }
53
54 @Override
55 public void setParent(Node parent) {
56 this.parent = parent;
57 }
58
59 @Override
60 public boolean hasParent() {
61 return parent != null;
62 }
63
64 @Override
65 public long getScore() {
66 return score;
67 }
68
69 @Override
70 public void setScore(long value) {
71 score = value;
72 }
73
74 @Override
75 public long getHeuristicScore() {
76 return heuristicScore;
77 }
78
79 @Override
80 public void setHeuristicScore(long value) {
81 heuristicScore = value;
82 }
83
84 @Override
85 public String toString() {
86 return String.format("Node#%d", id);
87 }
88}