misc/persolijn

osm-protobuf/src/main/java/osm/message/PrimitiveBlock.java in master
Repositories | Summary | Log | Files

PrimitiveBlock.java (1555B) download


 1package osm.message;
 2
 3import java.util.ArrayList;
 4import java.util.Iterator;
 5import java.util.List;
 6
 7import protobuf.Message;
 8import protobuf.ProtobufReader;
 9
10// required StringTable stringtable = 1;
11// repeated PrimitiveGroup primitivegroup = 2;
12// optional int32 granularity = 17 [default=100]; 
13// optional int64 lat_offset = 19 [default=0];
14// optional int64 lon_offset = 20 [default=0]; 
15// optional int32 date_granularity = 18 [default=1000]; 
16public class PrimitiveBlock implements Message<List<Entity>> {
17    public static final double NANO = 1e-9;
18
19    public List<String> stringtable = null;
20
21    public List<byte[]> groupBuffers = new ArrayList<>();
22
23    public double granularity = NANO * 100;
24    public double latitudeOffset = 0;
25    public double longitudeOffset = 0;
26
27    @Override
28    public List<Entity> parse(Iterator<ProtobufReader> iter) {
29        List<Entity> groups = new ArrayList<>();
30
31        while (iter.hasNext()) {
32            ProtobufReader message = iter.next();
33            switch (message.tag()) {
34                case 1 -> stringtable = message.message(new StringTable());
35                case 2 -> message.delayed(new PrimitiveGroup(this), groups::addAll);
36                case 17 -> granularity = NANO * message.varint32();
37                case 18 -> message.skip();
38                case 19 -> latitudeOffset = NANO * message.varint64();
39                case 20 -> longitudeOffset = NANO * message.varint64();
40                default -> message.throwUnexpected();
41            }
42        }
43
44        return groups;
45    }
46}