/// <summary> /// Encodes an OsmSharp-node into a PBF-node. /// </summary> /// <returns></returns> public static OsmSharp.Osm.PBF.Node EncodeNode(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, OsmSharp.Osm.PBF.Node pbfNode, Osm.Node node) { pbfNode.id = node.Id.Value; pbfNode.info = new Info(); pbfNode.info.version = 0; if (node.ChangeSetId.HasValue) { pbfNode.info.changeset = node.ChangeSetId.Value; } else { pbfNode.info.changeset = 0; } if (node.TimeStamp.HasValue) { pbfNode.info.timestamp = Encoder.EncodeTimestamp(node.TimeStamp.Value, block.date_granularity); } else { pbfNode.info.timestamp = 0; } if (node.UserId.HasValue) { pbfNode.info.uid = (int)node.UserId.Value; } else { pbfNode.info.uid = 0; } pbfNode.info.user_sid = Encoder.EncodeString(block, reverseStringTable, node.UserName); if (node.Version.HasValue) { pbfNode.info.version = (int)node.Version.Value; } else { pbfNode.info.version = 0; } pbfNode.lat = Encoder.EncodeLatLon(node.Latitude.Value, block.lat_offset, block.granularity); pbfNode.lon = Encoder.EncodeLatLon(node.Longitude.Value, block.lon_offset, block.granularity); if (node.Tags != null) { foreach (var tag in node.Tags) { pbfNode.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key)); pbfNode.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value)); } } else { pbfNode.keys.Clear(); pbfNode.vals.Clear(); } return(pbfNode); }
public static Way EncodeWay(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, OsmSharp.Osm.Way way) { Way way1 = new Way(); way1.id = way.Id.Value; way1.info = new Info(); long?nullable; if (way.ChangeSetId.HasValue) { Info info = way1.info; nullable = way.ChangeSetId; long num = nullable.Value; info.changeset = num; } if (way.TimeStamp.HasValue) { way1.info.timestamp = Encoder.EncodeTimestamp(way.TimeStamp.Value, (long)block.date_granularity); } nullable = way.UserId; if (nullable.HasValue) { Info info = way1.info; nullable = way.UserId; int num = (int)nullable.Value; info.uid = num; } way1.info.user_sid = Encoder.EncodeString(block, reverseStringTable, way.UserName); way1.info.version = 0; if (way.Version.HasValue) { way1.info.version = (int)way.Version.Value; } if (way.Tags != null) { foreach (Tag tag in way.Tags) { way1.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key)); way1.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value)); } } if (way.Nodes != null && way.Nodes.Count > 0) { way1.refs.Add(way.Nodes[0]); for (int index = 1; index < way.Nodes.Count; ++index) { way1.refs.Add(way.Nodes[index] - way.Nodes[index - 1]); } } return(way1); }
public static Node EncodeNode(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, Node pbfNode, OsmSharp.Osm.Node node) { pbfNode.id = node.Id.Value; pbfNode.info = new Info(); pbfNode.info.version = 0; pbfNode.info.changeset = !node.ChangeSetId.HasValue ? 0L : node.ChangeSetId.Value; DateTime?timeStamp = node.TimeStamp; if (timeStamp.HasValue) { Info info = pbfNode.info; timeStamp = node.TimeStamp; int num = Encoder.EncodeTimestamp(timeStamp.Value, (long)block.date_granularity); info.timestamp = num; } else { pbfNode.info.timestamp = 0; } long?userId = node.UserId; if (userId.HasValue) { Info info = pbfNode.info; userId = node.UserId; int num = (int)userId.Value; info.uid = num; } else { pbfNode.info.uid = 0; } pbfNode.info.user_sid = Encoder.EncodeString(block, reverseStringTable, node.UserName); pbfNode.info.version = !node.Version.HasValue ? 0 : (int)node.Version.Value; pbfNode.lat = Encoder.EncodeLatLon(node.Latitude.Value, block.lat_offset, (long)block.granularity); pbfNode.lon = Encoder.EncodeLatLon(node.Longitude.Value, block.lon_offset, (long)block.granularity); if (node.Tags != null) { foreach (Tag tag in node.Tags) { pbfNode.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key)); pbfNode.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value)); } } else { pbfNode.keys.Clear(); pbfNode.vals.Clear(); } return(pbfNode); }
/// <summary> /// Encodes an OsmSharp-way into a PBF-way. /// </summary> /// <returns></returns> public static OsmSharp.Osm.PBF.Way EncodeWay(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, Osm.Way way) { var pbfWay = new OsmSharp.Osm.PBF.Way(); pbfWay.id = way.Id.Value; pbfWay.info = new Info(); if (way.ChangeSetId.HasValue) { pbfWay.info.changeset = way.ChangeSetId.Value; } if (way.TimeStamp.HasValue) { pbfWay.info.timestamp = Encoder.EncodeTimestamp(way.TimeStamp.Value, block.date_granularity); } if (way.UserId.HasValue) { pbfWay.info.uid = (int)way.UserId.Value; } pbfWay.info.user_sid = Encoder.EncodeString(block, reverseStringTable, way.UserName); pbfWay.info.version = 0; if (way.Version.HasValue) { pbfWay.info.version = (int)way.Version.Value; } if (way.Tags != null) { foreach (var tag in way.Tags) { pbfWay.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key)); pbfWay.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value)); } } if (way.Nodes != null && way.Nodes.Count > 0) { pbfWay.refs.Add(way.Nodes[0]); for (var i = 1; i < way.Nodes.Count; i++) { pbfWay.refs.Add(way.Nodes[i] - way.Nodes[i - 1]); } } return(pbfWay); }
/// <summary> /// Encodes an OsmSharp-relation into a PBF-relation. /// </summary> /// <returns></returns> public static OsmSharp.Osm.PBF.Relation EncodeRelation(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, Osm.Relation relation) { var pbfRelation = new OsmSharp.Osm.PBF.Relation(); pbfRelation.id = relation.Id.Value; pbfRelation.info = new Info(); if (relation.ChangeSetId.HasValue) { pbfRelation.info.changeset = relation.ChangeSetId.Value; } if (relation.TimeStamp.HasValue) { pbfRelation.info.timestamp = Encoder.EncodeTimestamp(relation.TimeStamp.Value, block.date_granularity); } if (relation.UserId.HasValue) { pbfRelation.info.uid = (int)relation.UserId.Value; } pbfRelation.info.user_sid = Encoder.EncodeString(block, reverseStringTable, relation.UserName); pbfRelation.info.version = 0; if (relation.Version.HasValue) { pbfRelation.info.version = (int)relation.Version.Value; } if (relation.Tags != null) { foreach (var tag in relation.Tags) { pbfRelation.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key)); pbfRelation.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value)); } } if (relation.Members != null && relation.Members.Count > 0) { pbfRelation.memids.Add(relation.Members[0].MemberId.Value); pbfRelation.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[0].MemberRole)); switch (relation.Members[0].MemberType.Value) { case OsmGeoType.Node: pbfRelation.types.Add(Relation.MemberType.NODE); break; case OsmGeoType.Way: pbfRelation.types.Add(Relation.MemberType.WAY); break; case OsmGeoType.Relation: pbfRelation.types.Add(Relation.MemberType.RELATION); break; } for (var i = 1; i < relation.Members.Count; i++) { pbfRelation.memids.Add(relation.Members[i].MemberId.Value - relation.Members[i - 1].MemberId.Value); pbfRelation.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[i].MemberRole)); switch (relation.Members[i].MemberType.Value) { case OsmGeoType.Node: pbfRelation.types.Add(Relation.MemberType.NODE); break; case OsmGeoType.Way: pbfRelation.types.Add(Relation.MemberType.WAY); break; case OsmGeoType.Relation: pbfRelation.types.Add(Relation.MemberType.RELATION); break; } } } return(pbfRelation); }
public static Relation EncodeRelation(PrimitiveBlock block, Dictionary <string, int> reverseStringTable, OsmSharp.Osm.Relation relation) { Relation relation1 = new Relation(); relation1.id = relation.Id.Value; relation1.info = new Info(); long?nullable; if (relation.ChangeSetId.HasValue) { Info info = relation1.info; nullable = relation.ChangeSetId; long num = nullable.Value; info.changeset = num; } if (relation.TimeStamp.HasValue) { relation1.info.timestamp = Encoder.EncodeTimestamp(relation.TimeStamp.Value, (long)block.date_granularity); } nullable = relation.UserId; if (nullable.HasValue) { Info info = relation1.info; nullable = relation.UserId; int num = (int)nullable.Value; info.uid = num; } relation1.info.user_sid = Encoder.EncodeString(block, reverseStringTable, relation.UserName); relation1.info.version = 0; if (relation.Version.HasValue) { relation1.info.version = (int)relation.Version.Value; } if (relation.Tags != null) { foreach (Tag tag in relation.Tags) { relation1.keys.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Key)); relation1.vals.Add((uint)Encoder.EncodeString(block, reverseStringTable, tag.Value)); } } if (relation.Members != null && relation.Members.Count > 0) { List <long> memids1 = relation1.memids; nullable = relation.Members[0].MemberId; long num1 = nullable.Value; memids1.Add(num1); relation1.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[0].MemberRole)); OsmGeoType?memberType = relation.Members[0].MemberType; switch (memberType.Value) { case OsmGeoType.Node: relation1.types.Add(Relation.MemberType.NODE); break; case OsmGeoType.Way: relation1.types.Add(Relation.MemberType.WAY); break; case OsmGeoType.Relation: relation1.types.Add(Relation.MemberType.RELATION); break; } for (int index = 1; index < relation.Members.Count; ++index) { List <long> memids2 = relation1.memids; nullable = relation.Members[index].MemberId; long num2 = nullable.Value; nullable = relation.Members[index - 1].MemberId; long num3 = nullable.Value; long num4 = num2 - num3; memids2.Add(num4); relation1.roles_sid.Add(Encoder.EncodeString(block, reverseStringTable, relation.Members[index].MemberRole)); memberType = relation.Members[index].MemberType; switch (memberType.Value) { case OsmGeoType.Node: relation1.types.Add(Relation.MemberType.NODE); break; case OsmGeoType.Way: relation1.types.Add(Relation.MemberType.WAY); break; case OsmGeoType.Relation: relation1.types.Add(Relation.MemberType.RELATION); break; } } } return(relation1); }