use of de.topobyte.osm4j.core.model.iface.OsmTag in project osm4j-pbf by topobyte.
the class PbfWriter method serializeRelations.
private Osmformat.PrimitiveGroup serializeRelations(Collection<OsmRelation> relations) {
Osmformat.PrimitiveGroup.Builder builder = Osmformat.PrimitiveGroup.newBuilder();
for (OsmRelation relation : relations) {
Osmformat.Relation.Builder bi = Osmformat.Relation.newBuilder();
bi.setId(relation.getId());
long lastid = 0;
for (int k = 0; k < relation.getNumberOfMembers(); k++) {
OsmRelationMember j = relation.getMember(k);
long id = j.getId();
bi.addMemids(id - lastid);
lastid = id;
EntityType t = j.getType();
Osmformat.Relation.MemberType type = getType(t);
bi.addTypes(type);
bi.addRolesSid(stringTable.getIndex(j.getRole()));
}
for (int k = 0; k < relation.getNumberOfTags(); k++) {
OsmTag t = relation.getTag(k);
bi.addKeys(stringTable.getIndex(t.getKey()));
bi.addVals(stringTable.getIndex(t.getValue()));
}
if (writeMetadata && relation.getMetadata() != null) {
bi.setInfo(serializeMetadata(relation));
}
builder.addRelations(bi);
}
return builder.build();
}
use of de.topobyte.osm4j.core.model.iface.OsmTag in project osm4j-pbf by topobyte.
the class PrimParser method convert.
public OsmRelation convert(Osmformat.Relation r) {
long id = r.getId();
long lastMid = 0;
List<OsmTag> tags = new ArrayList<>();
for (int j = 0; j < r.getKeysCount(); j++) {
tags.add(new Tag(strings[r.getKeys(j)], strings[r.getVals(j)]));
}
List<RelationMember> members = new ArrayList<>();
for (int j = 0; j < r.getMemidsCount(); j++) {
long mid = lastMid + r.getMemids(j);
lastMid = mid;
String role = strings[r.getRolesSid(j)];
Osmformat.Relation.MemberType type = r.getTypes(j);
EntityType t = getType(type);
RelationMember member = new RelationMember(mid, t, role);
members.add(member);
}
OsmMetadata metadata = null;
if (fetchMetadata && r.hasInfo()) {
Osmformat.Info info = r.getInfo();
metadata = convertMetadata(info);
}
return new Relation(id, members, tags, metadata);
}
use of de.topobyte.osm4j.core.model.iface.OsmTag in project osm4j-pbf by topobyte.
the class PrimParser method parseDense.
public void parseDense(Osmformat.DenseNodes nodes, OsmHandler handler) throws IOException {
Osmformat.DenseInfo denseInfo = null;
boolean hasVisible = false;
if (fetchMetadata && nodes.hasDenseinfo()) {
denseInfo = nodes.getDenseinfo();
hasVisible = denseInfo.getVisibleCount() != 0;
}
long id = 0, lat = 0, lon = 0;
int version = 0, uid = 0, userSid = 0;
long timestamp = 0, changeset = 0;
// Index into the keysvals array.
int j = 0;
for (int i = 0; i < nodes.getIdCount(); i++) {
id += nodes.getId(i);
lat += nodes.getLat(i);
lon += nodes.getLon(i);
double latf = parseLat(lat), lonf = parseLon(lon);
List<OsmTag> tags = new ArrayList<>();
OsmMetadata metadata = null;
if (fetchMetadata && nodes.hasDenseinfo()) {
version = denseInfo.getVersion(i);
timestamp += denseInfo.getTimestamp(i);
uid += denseInfo.getUid(i);
userSid += denseInfo.getUserSid(i);
changeset += denseInfo.getChangeset(i);
boolean visible = true;
if (hasVisible) {
visible = denseInfo.getVisible(i);
}
metadata = new Metadata(version, timestamp * dateGranularity, uid, strings[userSid], changeset, visible);
}
// If empty, assume that nothing here has keys or vals.
if (nodes.getKeysValsCount() > 0) {
while (nodes.getKeysVals(j) != 0) {
int keyid = nodes.getKeysVals(j++);
int valid = nodes.getKeysVals(j++);
tags.add(new Tag(strings[keyid], strings[valid]));
}
// Skip over the '0' delimiter.
j++;
}
Node node = new Node(id, lonf, latf, tags, metadata);
handler.handle(node);
}
}
Aggregations