public Osmformat.PrimitiveGroup serialize() { if (contents.size() == 0) { return null; } // System.out.format("%d Ways ",contents.size()); StringTable stable = getStringTable(); Osmformat.PrimitiveGroup.Builder builder = Osmformat.PrimitiveGroup .newBuilder(); for (Way i : contents) { Osmformat.Way.Builder bi = Osmformat.Way.newBuilder(); bi.setId(i.getId()); long lastid = 0; for (WayNode j : i.getWayNodes()) { long id = j.getNodeId(); bi.addRefs(id - lastid); lastid = id; } for (Tag t : i.getTags()) { bi.addKeys(stable.getIndex(t.getKey())); bi.addVals(stable.getIndex(t.getValue())); } if (!omit_metadata) { bi.setInfo(serializeMetadata(i)); } builder.addWays(bi); } return builder.build(); } }
return new Builder();
PrimitiveGroup.newBuilder() .addWays(Way.newBuilder() .setId(201) .addRefs(101).addRefs(1).addRefs(-1).addRefs(10).addRefs(-20) // Delta coded. Should be 101, 102, 101, 111, 91. .addKeys(2).addVals(1).addKeys(3).addVals(4)) .addWays(Way.newBuilder() .setId(-301) .addRefs(211).addRefs(1).addRefs(-1).addRefs(10).addRefs(-300) // Delta coded. Should be 211, 212, 211, 221, -79 .addKeys(4).addVals(3).addKeys(5).addVals(6)) .addWays(Way.newBuilder() .setId(401).addRefs(211).addRefs(1)) .addWays(Way.newBuilder() .setId(501)) );
@Override public void writeWay(long id, Way way) throws IOException { checkBlockTransition(OSMEntity.Type.WAY); Osmformat.Way.Builder builder = Osmformat.Way.newBuilder().setId(id); /* Tags */ if (way.tags != null) { for (OSMEntity.Tag tag : way.tags) { if (tag.value == null) tag.value = ""; builder.addKeys(stringTable.getCode(tag.key)); builder.addVals(stringTable.getCode(tag.value)); } } /* Node References */ long prevNodeRef = 0; for (long ref : way.nodes) { builder.addRefs(ref - prevNodeRef); // delta-coded node references prevNodeRef = ref; } /* TODO Should we trigger the build here or just call with the builder? */ primitiveGroupBuilder.addWays(builder.build()); }
/** * <pre> * Parallel arrays. * </pre> * * <code>repeated uint32 keys = 2 [packed = true];</code> */ public Builder setKeys( int index, int value) { copyOnWrite(); instance.setKeys(index, value); return this; } /**
/** * <pre> * DELTA coded * </pre> * * <code>repeated sint64 refs = 8 [packed = true];</code> */ public Builder setRefs( int index, long value) { copyOnWrite(); instance.setRefs(index, value); return this; } /**
/** * <pre> * DELTA coded * </pre> * * <code>repeated sint64 refs = 8 [packed = true];</code> */ public Builder addAllRefs( java.lang.Iterable<? extends java.lang.Long> values) { copyOnWrite(); instance.addAllRefs(values); return this; } /**
/** * <pre> * Parallel arrays. * </pre> * * <code>repeated uint32 keys = 2 [packed = true];</code> */ public Builder addAllKeys( java.lang.Iterable<? extends java.lang.Integer> values) { copyOnWrite(); instance.addAllKeys(values); return this; } /**
/** * <pre> * DELTA coded * </pre> * * <code>repeated sint64 refs = 8 [packed = true];</code> */ public Builder addRefs(long value) { copyOnWrite(); instance.addRefs(value); return this; } /**
/** * <pre> * Parallel arrays. * </pre> * * <code>repeated uint32 keys = 2 [packed = true];</code> */ public Builder addKeys(int value) { copyOnWrite(); instance.addKeys(value); return this; } /**
/** * <code>repeated sint64 lon = 10 [packed = true];</code> */ public Builder setLon( int index, long value) { copyOnWrite(); instance.setLon(index, value); return this; } /**
/** * <code>repeated sint64 lat = 9 [packed = true];</code> */ public Builder addLat(long value) { copyOnWrite(); instance.addLat(value); return this; } /**
/** * <code>repeated uint32 vals = 3 [packed = true];</code> */ public Builder addAllVals( java.lang.Iterable<? extends java.lang.Integer> values) { copyOnWrite(); instance.addAllVals(values); return this; } /**
/** * <pre> * Parallel arrays. * </pre> * * <code>repeated uint32 keys = 2 [packed = true];</code> */ public Builder clearKeys() { copyOnWrite(); instance.clearKeys(); return this; }
/** * <code>repeated .OSMPBF.Way ways = 3;</code> */ private void addWays( org.openstreetmap.osmosis.osmbinary.Osmformat.Way.Builder builderForValue) { ensureWaysIsMutable(); ways_.add(builderForValue.build()); } /**
/** * <code>repeated sint64 lat = 9 [packed = true];</code> */ public Builder setLat( int index, long value) { copyOnWrite(); instance.setLat(index, value); return this; } /**
/** * <code>optional .OSMPBF.Info info = 4;</code> */ public Builder setInfo( org.openstreetmap.osmosis.osmbinary.Osmformat.Info.Builder builderForValue) { copyOnWrite(); instance.setInfo(builderForValue); return this; } /**
/** * <code>required int64 id = 1;</code> */ public Builder setId(long value) { copyOnWrite(); instance.setId(value); return this; } /**
/** * <code>repeated .OSMPBF.Way ways = 3;</code> */ private void setWays( int index, org.openstreetmap.osmosis.osmbinary.Osmformat.Way.Builder builderForValue) { ensureWaysIsMutable(); ways_.set(index, builderForValue.build()); } /**
/** * <code>repeated sint64 lon = 10 [packed = true];</code> */ public Builder addLon(long value) { copyOnWrite(); instance.addLon(value); return this; } /**