/// <summary> /// Adds a way. /// </summary> public override void AddWay(Osm.Way way) { _currentEntities.Add(way); if (_currentEntities.Count > 8000) { this.FlushBlock(); } }
/// <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); }