/// <summary> /// Converts a PBF way into an OsmSharp-way. /// </summary> /// <returns></returns> public static OsmSharp.Osm.Way DecodeWay(PrimitiveBlock block, OsmSharp.Osm.PBF.Way pbfWay) { var way = new OsmSharp.Osm.Way(); Encoder.DecodeWay(block, pbfWay, way); return(way); }
public override void AddWay(OsmSharp.Osm.Way way) { this._currentEntities.Add((OsmGeo)way); if (this._currentEntities.Count <= 8000) { return; } this.FlushBlock(); }
public static void DecodeWay(PrimitiveBlock block, Way pbfWay, OsmSharp.Osm.Way way) { if (way.Nodes != null && way.Nodes.Count > 0) { way.Nodes.Clear(); } if (way.Tags != null) { way.Tags.Clear(); } if (way.Nodes == null) { way.Nodes = new List <long>(pbfWay.refs.Count); } if (way.Tags == null) { way.Tags = (TagsCollectionBase) new TagsCollection(pbfWay.keys.Count); } way.Id = new long?(pbfWay.id); if (pbfWay.refs.Count > 0) { long num = 0; for (int index = 0; index < pbfWay.refs.Count; ++index) { num += pbfWay.refs[index]; way.Nodes.Add(num); } } if (pbfWay.keys.Count > 0) { for (int index = 0; index < pbfWay.keys.Count; ++index) { string key = Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.keys[index]]); string str = Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.vals[index]]); way.Tags.Add(new Tag(key, str)); } } if (pbfWay.info != null) { way.ChangeSetId = new long?(pbfWay.info.changeset); way.TimeStamp = new DateTime?(Encoder.DecodeTimestamp(pbfWay.info.timestamp, (long)block.date_granularity)); way.UserId = new long?((long)pbfWay.info.uid); way.UserName = (string)null; if (block.stringtable != null) { way.UserName = Encoding.UTF8.GetString(block.stringtable.s[pbfWay.info.user_sid]); } way.Version = new ulong?((ulong)pbfWay.info.version); } way.Visible = new bool?(true); }
public void TestEncodeWay() { var block = new PrimitiveBlock(); block.date_granularity = 1000; block.granularity = 100; block.lat_offset = 0; block.lon_offset = 0; block.stringtable = new StringTable(); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes(string.Empty)); // always encode empty string as '0'. block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("highway")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("residential")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("Ben")); var way = new OsmSharp.Osm.Way(); way.Id = 1; way.ChangeSetId = 1; way.Tags = new OsmSharp.Collections.Tags.TagsCollection(); way.Tags.Add("name", "Ben"); way.TimeStamp = DateTime.Now; way.UserId = 1; way.UserName = "******"; way.Version = 1; way.Visible = true; way.Nodes = new List <long>(); way.Nodes.Add(1); way.Nodes.Add(2); var pbfWay = Encoder.EncodeWay(block, new Dictionary <string, int>(), way); Assert.IsNotNull(pbfWay); Assert.AreEqual(1, pbfWay.id); Assert.AreEqual(2, pbfWay.refs.Count); Assert.AreEqual(1, pbfWay.refs[0]); Assert.AreEqual(1, pbfWay.refs[1]); Assert.AreEqual(1, pbfWay.info.changeset); Assert.AreEqual(Encoder.EncodeTimestamp(way.TimeStamp.Value, block.date_granularity), pbfWay.info.timestamp); Assert.AreEqual(1, pbfWay.info.uid); Assert.AreEqual("Ben", System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.info.user_sid])); Assert.AreEqual(1, pbfWay.info.version); Assert.AreEqual(1, pbfWay.keys.Count); Assert.AreEqual("name", System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.keys[0]])); Assert.AreEqual(1, pbfWay.vals.Count); Assert.AreEqual("Ben", System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.vals[0]])); }
/// <summary> /// Converts a PBF way into an OsmSharp-way. /// </summary> /// <param name="block"></param> /// <param name="way"></param> /// <returns></returns> internal OsmSharp.Osm.Way ConvertWay(PrimitiveBlock block, OsmSharp.Osm.PBF.Way way) { var simpleWay = new OsmSharp.Osm.Way(); simpleWay.Id = way.id; simpleWay.Nodes = new List <long>(way.refs.Count); long node_id = 0; for (int node_idx = 0; node_idx < way.refs.Count; node_idx++) { node_id = node_id + way.refs[node_idx]; simpleWay.Nodes.Add(node_id); } simpleWay.Tags = new TagsCollection(way.keys.Count); if (way.keys.Count > 0) { for (int tag_idx = 0; tag_idx < way.keys.Count; tag_idx++) { string key = Encoding.UTF8.GetString(block.stringtable.s[(int)way.keys[tag_idx]]); string value = Encoding.UTF8.GetString(block.stringtable.s[(int)way.vals[tag_idx]]); simpleWay.Tags.Add(new Tag(key, value)); } } if (way.info != null) { // add the metadata if any. simpleWay.ChangeSetId = way.info.changeset; simpleWay.TimeStamp = Utilities.FromUnixTime((long)way.info.timestamp * (long)block.date_granularity); simpleWay.UserId = way.info.uid; simpleWay.UserName = Encoding.UTF8.GetString(block.stringtable.s[way.info.user_sid]); simpleWay.Version = (ulong)way.info.version; } simpleWay.Visible = true; return(simpleWay); }
/// <summary> /// Converts simple primitives. /// </summary> /// <param name="pbfPrimitive"></param> /// <returns></returns> internal OsmSharp.Osm.OsmGeo Convert(KeyValuePair<PrimitiveBlock, object> pbfPrimitive) { if (pbfPrimitive.Value == null || pbfPrimitive.Key == null) { throw new ArgumentNullException("pbfPrimitive"); } PrimitiveBlock block = pbfPrimitive.Key; // get the block properties this object comes from. if (pbfPrimitive.Value is OsmSharp.Osm.PBF.Node) { var node = (pbfPrimitive.Value as OsmSharp.Osm.PBF.Node); var simpleNode = new OsmSharp.Osm.Node(); simpleNode.ChangeSetId = node.info.changeset; simpleNode.Id = node.id; simpleNode.Latitude = .000000001 * ((double)block.lat_offset + ((double)block.granularity * (double)node.lat)); simpleNode.Longitude = .000000001 * ((double)block.lon_offset + ((double)block.granularity * (double)node.lon)); if (node.keys.Count > 0) { simpleNode.Tags = new TagsCollection(); for (int tag_idx = 0; tag_idx < node.keys.Count; tag_idx++) { string key = Encoding.UTF8.GetString(block.stringtable.s[(int)node.keys[tag_idx]]); string value = Encoding.UTF8.GetString(block.stringtable.s[(int)node.vals[tag_idx]]); if (!simpleNode.Tags.ContainsKey(key)) { simpleNode.Tags.Add(new Tag() { Key = key, Value = value }); } } } simpleNode.TimeStamp = Utilities.FromUnixTime((long)node.info.timestamp * (long)block.date_granularity); simpleNode.Visible = true; simpleNode.Version = (uint)node.info.version; simpleNode.UserId = node.info.uid; simpleNode.UserName = Encoding.UTF8.GetString(block.stringtable.s[node.info.user_sid]); simpleNode.Version = (ulong)node.info.version; simpleNode.Visible = true; return simpleNode; } else if (pbfPrimitive.Value is OsmSharp.Osm.PBF.Way) { var way = (pbfPrimitive.Value as OsmSharp.Osm.PBF.Way); var simple_way = new OsmSharp.Osm.Way(); simple_way.Id = way.id; simple_way.Nodes = new List<long>(way.refs.Count); long node_id = 0; for (int node_idx = 0; node_idx < way.refs.Count; node_idx++) { node_id = node_id + way.refs[node_idx]; simple_way.Nodes.Add(node_id); } if (way.keys.Count > 0) { simple_way.Tags = new TagsCollection(); for (int tag_idx = 0; tag_idx < way.keys.Count; tag_idx++) { string key = Encoding.UTF8.GetString(block.stringtable.s[(int)way.keys[tag_idx]]); string value = Encoding.UTF8.GetString(block.stringtable.s[(int)way.vals[tag_idx]]); if (!simple_way.Tags.ContainsKey(key)) { simple_way.Tags.Add(new Tag(key, value)); } } } if (way.info != null) { // add the metadata if any. simple_way.ChangeSetId = way.info.changeset; simple_way.TimeStamp = Utilities.FromUnixTime((long)way.info.timestamp * (long)block.date_granularity); simple_way.UserId = way.info.uid; simple_way.UserName = Encoding.UTF8.GetString(block.stringtable.s[way.info.user_sid]); simple_way.Version = (ulong)way.info.version; } simple_way.Visible = true; return simple_way; } else if (pbfPrimitive.Value is OsmSharp.Osm.PBF.Relation) { var relation = (pbfPrimitive.Value as OsmSharp.Osm.PBF.Relation); var simple_relation = new OsmSharp.Osm.Relation(); simple_relation.Id = relation.id; if (relation.types.Count > 0) { simple_relation.Members = new List<OsmSharp.Osm.RelationMember>(); long member_id = 0; for (int member_idx = 0; member_idx < relation.types.Count; member_idx++) { member_id = member_id + relation.memids[member_idx]; string role = Encoding.UTF8.GetString( block.stringtable.s[relation.roles_sid[member_idx]]); var member = new OsmSharp.Osm.RelationMember(); member.MemberId = member_id; member.MemberRole = role; switch (relation.types[member_idx]) { case Relation.MemberType.NODE: member.MemberType = OsmSharp.Osm.OsmGeoType.Node; break; case Relation.MemberType.WAY: member.MemberType = OsmSharp.Osm.OsmGeoType.Way; break; case Relation.MemberType.RELATION: member.MemberType = OsmSharp.Osm.OsmGeoType.Relation; break; } simple_relation.Members.Add(member); } } if (relation.keys.Count > 0) { simple_relation.Tags = new TagsCollection(); for (int tag_idx = 0; tag_idx < relation.keys.Count; tag_idx++) { string key = Encoding.UTF8.GetString(block.stringtable.s[(int)relation.keys[tag_idx]]); string value = Encoding.UTF8.GetString(block.stringtable.s[(int)relation.vals[tag_idx]]); if (!simple_relation.Tags.ContainsKey(key)) { simple_relation.Tags.Add(new Tag(key, value)); } } } if (relation.info != null) { // read metadata if any. simple_relation.ChangeSetId = relation.info.changeset; simple_relation.TimeStamp = Utilities.FromUnixTime((long)relation.info.timestamp * (long)block.date_granularity); simple_relation.UserId = relation.info.uid; simple_relation.UserName = Encoding.UTF8.GetString(block.stringtable.s[relation.info.user_sid]); simple_relation.Version = (ulong)relation.info.version; } simple_relation.Visible = true; return simple_relation; } throw new Exception(string.Format("PBF primitive with type {0} not supported!", pbfPrimitive.GetType().ToString())); }
/// <summary> /// Converts simple primitives. /// </summary> /// <param name="pbfPrimitive"></param> /// <returns></returns> internal OsmSharp.Osm.OsmGeo Convert(KeyValuePair <PrimitiveBlock, object> pbfPrimitive) { if (pbfPrimitive.Value == null || pbfPrimitive.Key == null) { throw new ArgumentNullException("pbfPrimitive"); } PrimitiveBlock block = pbfPrimitive.Key; // get the block properties this object comes from. if (pbfPrimitive.Value is OsmSharp.Osm.Data.PBF.Node) { var node = (pbfPrimitive.Value as OsmSharp.Osm.Data.PBF.Node); var simpleNode = new OsmSharp.Osm.Node(); simpleNode.ChangeSetId = node.info.changeset; simpleNode.Id = node.id; simpleNode.Latitude = .000000001 * ((double)block.lat_offset + ((double)block.granularity * (double)node.lat)); simpleNode.Longitude = .000000001 * ((double)block.lon_offset + ((double)block.granularity * (double)node.lon)); if (node.keys.Count > 0) { simpleNode.Tags = new SimpleTagsCollection(); for (int tag_idx = 0; tag_idx < node.keys.Count; tag_idx++) { string key = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)node.keys[tag_idx]]); string value = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)node.vals[tag_idx]]); if (!simpleNode.Tags.ContainsKey(key)) { simpleNode.Tags.Add(new Tag() { Key = key, Value = value }); } } } simpleNode.TimeStamp = Utilities.FromUnixTime((long)node.info.timestamp * (long)block.date_granularity); simpleNode.Visible = true; simpleNode.Version = (uint)node.info.version; simpleNode.UserId = node.info.uid; simpleNode.UserName = ASCIIEncoding.ASCII.GetString(block.stringtable.s[node.info.user_sid]); simpleNode.Version = (ulong)node.info.version; simpleNode.Visible = true; return(simpleNode); } else if (pbfPrimitive.Value is OsmSharp.Osm.Data.PBF.Way) { var way = (pbfPrimitive.Value as OsmSharp.Osm.Data.PBF.Way); var simple_way = new OsmSharp.Osm.Way(); simple_way.Id = way.id; simple_way.Nodes = new List <long>(way.refs.Count); long node_id = 0; for (int node_idx = 0; node_idx < way.refs.Count; node_idx++) { node_id = node_id + way.refs[node_idx]; simple_way.Nodes.Add(node_id); } if (way.keys.Count > 0) { simple_way.Tags = new SimpleTagsCollection(); for (int tag_idx = 0; tag_idx < way.keys.Count; tag_idx++) { string key = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)way.keys[tag_idx]]); string value = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)way.vals[tag_idx]]); if (!simple_way.Tags.ContainsKey(key)) { simple_way.Tags.Add(new Tag(key, value)); } } } if (way.info != null) { // add the metadata if any. simple_way.ChangeSetId = way.info.changeset; simple_way.TimeStamp = Utilities.FromUnixTime((long)way.info.timestamp * (long)block.date_granularity); simple_way.UserId = way.info.uid; simple_way.UserName = ASCIIEncoding.ASCII.GetString(block.stringtable.s[way.info.user_sid]); simple_way.Version = (ulong)way.info.version; } simple_way.Visible = true; return(simple_way); } else if (pbfPrimitive.Value is OsmSharp.Osm.Data.PBF.Relation) { var relation = (pbfPrimitive.Value as OsmSharp.Osm.Data.PBF.Relation); var simple_relation = new OsmSharp.Osm.Relation(); simple_relation.Id = relation.id; if (relation.types.Count > 0) { simple_relation.Members = new List <OsmSharp.Osm.RelationMember>(); long member_id = 0; for (int member_idx = 0; member_idx < relation.types.Count; member_idx++) { member_id = member_id + relation.memids[member_idx]; string role = ASCIIEncoding.ASCII.GetString( block.stringtable.s[relation.roles_sid[member_idx]]); var member = new OsmSharp.Osm.RelationMember(); member.MemberId = member_id; member.MemberRole = role; switch (relation.types[member_idx]) { case Relation.MemberType.NODE: member.MemberType = OsmSharp.Osm.OsmGeoType.Node; break; case Relation.MemberType.WAY: member.MemberType = OsmSharp.Osm.OsmGeoType.Way; break; case Relation.MemberType.RELATION: member.MemberType = OsmSharp.Osm.OsmGeoType.Relation; break; } simple_relation.Members.Add(member); } } if (relation.keys.Count > 0) { simple_relation.Tags = new SimpleTagsCollection(); for (int tag_idx = 0; tag_idx < relation.keys.Count; tag_idx++) { string key = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)relation.keys[tag_idx]]); string value = ASCIIEncoding.ASCII.GetString(block.stringtable.s[(int)relation.vals[tag_idx]]); if (!simple_relation.Tags.ContainsKey(key)) { simple_relation.Tags.Add(new Tag(key, value)); } } } if (relation.info != null) { // read metadata if any. simple_relation.ChangeSetId = relation.info.changeset; simple_relation.TimeStamp = Utilities.FromUnixTime((long)relation.info.timestamp * (long)block.date_granularity); simple_relation.UserId = relation.info.uid; simple_relation.UserName = ASCIIEncoding.ASCII.GetString(block.stringtable.s[relation.info.user_sid]); simple_relation.Version = (ulong)relation.info.version; } simple_relation.Visible = true; return(simple_relation); } throw new Exception(string.Format("PBF primitive with type {0} not supported!", pbfPrimitive.GetType().ToString())); }
/// <summary> /// Converts a PBF way into an OsmSharp-way. /// </summary> /// <param name="block"></param> /// <param name="way"></param> /// <returns></returns> internal OsmSharp.Osm.Way ConvertWay(PrimitiveBlock block, OsmSharp.Osm.PBF.Way way) { var simpleWay = new OsmSharp.Osm.Way(); simpleWay.Id = way.id; simpleWay.Nodes = new List<long>(way.refs.Count); long node_id = 0; for (int node_idx = 0; node_idx < way.refs.Count; node_idx++) { node_id = node_id + way.refs[node_idx]; simpleWay.Nodes.Add(node_id); } simpleWay.Tags = new TagsCollection(way.keys.Count); if (way.keys.Count > 0) { for (int tag_idx = 0; tag_idx < way.keys.Count; tag_idx++) { string key = Encoding.UTF8.GetString(block.stringtable.s[(int)way.keys[tag_idx]]); string value = Encoding.UTF8.GetString(block.stringtable.s[(int)way.vals[tag_idx]]); simpleWay.Tags.Add(new Tag(key, value)); } } if (way.info != null) { // add the metadata if any. simpleWay.ChangeSetId = way.info.changeset; simpleWay.TimeStamp = Utilities.FromUnixTime((long)way.info.timestamp * (long)block.date_granularity); simpleWay.UserId = way.info.uid; simpleWay.UserName = Encoding.UTF8.GetString(block.stringtable.s[way.info.user_sid]); simpleWay.Version = (ulong)way.info.version; } simpleWay.Visible = true; return simpleWay; }
/// <summary> /// Converts a PBF way into an OsmSharp-way. /// </summary> /// <returns></returns> public static OsmSharp.Osm.Way DecodeWay(PrimitiveBlock block, OsmSharp.Osm.PBF.Way pbfWay) { var way = new OsmSharp.Osm.Way(); Encoder.DecodeWay(block, pbfWay, way); return way; }
/// <summary> /// Converts a PBF-way into an OsmSharp-way. /// </summary> public static void DecodeWay(PrimitiveBlock block, OsmSharp.Osm.PBF.Way pbfWay, OsmSharp.Osm.Way way) { // make sure old data is gone. if (way.Nodes != null && way.Nodes.Count > 0) { // clear nodes list. way.Nodes.Clear(); } if (way.Tags != null) { // clear the tags collection. way.Tags.Clear(); } if (way.Nodes == null) { // create nodes list. way.Nodes = new List <long>(pbfWay.refs.Count); } if (way.Tags == null) { // create tags collection. way.Tags = new TagsCollection(pbfWay.keys.Count); } // set new stuff. way.Id = pbfWay.id; if (pbfWay.refs.Count > 0) { // fill nodes-list. long nodeId = 0; for (int i = 0; i < pbfWay.refs.Count; i++) { nodeId = nodeId + pbfWay.refs[i]; way.Nodes.Add(nodeId); } } if (pbfWay.keys.Count > 0) { for (var i = 0; i < pbfWay.keys.Count; i++) { var key = System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.keys[i]]); var value = System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.vals[i]]); way.Tags.Add(new Tag(key, value)); } } if (pbfWay.info != null) { // add the metadata if any. way.ChangeSetId = pbfWay.info.changeset; way.TimeStamp = Encoder.DecodeTimestamp(pbfWay.info.timestamp, block.date_granularity); way.UserId = pbfWay.info.uid; way.UserName = null; if (block.stringtable != null) { way.UserName = System.Text.Encoding.UTF8.GetString(block.stringtable.s[pbfWay.info.user_sid]); } way.Version = (ulong)pbfWay.info.version; } way.Visible = true; }
/// <summary> /// Sets all the info about the buildings and landuses into their lists /// </summary> private void getBuildingsAndLanduses() { FileInfo fileInfo = new FileInfo(OSMFILE); XmlOsmStreamSource xmlSource = new XmlOsmStreamSource(fileInfo.OpenRead()); xmlSource.Initialize(); while (xmlSource.MoveNextWay()) { OsmSharp.Osm.Way way = (OsmSharp.Osm.Way)xmlSource.Current(); if ((way != null) && (way.Visible.HasValue) && (bool)(way.Visible) && (way.Tags != null)) { // Info about buildings if (way.Tags.ContainsKey("building")) { List <long> buildingNodes = new List <long>(); int height = 10; // Standard height is 10 string amenity = ""; // Check amenity and if it is a church if (way.Tags.ContainsKey("amenity")) { amenity = way.Tags["amenity"]; if (amenity == "place_of_worship") { height = 25; } } // Check height if (way.Tags.ContainsKey("height")) { height = (int)(float.Parse(way.Tags["height"], System.Globalization.CultureInfo.InvariantCulture)); } else if (way.Tags.ContainsKey("building:levels")) { string[] verdiepen = way.Tags["building:levels"].Split('-'); height = 3 * Convert.ToInt32(verdiepen[verdiepen.Length - 1]); amenity = "apartment"; } foreach (long id in way.Nodes) { buildingNodes.Add(id); } buildings.Add(new Building(buildingNodes, height, amenity, ZOOM)); } // Info about landuses if (way.Tags.ContainsKey("landuse")) { List <long> landuseNodes = new List <long>(); foreach (long id in way.Nodes) { landuseNodes.Add(id); } landuses.Add(new Landuse(landuseNodes, 0, way.Tags["landuse"], ZOOM)); } } } xmlSource.Dispose(); }
public void TestEncodeWay() { var block = new PrimitiveBlock(); block.date_granularity = 1000; block.granularity = 100; block.lat_offset = 0; block.lon_offset = 0; block.stringtable = new StringTable(); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes(string.Empty)); // always encode empty string as '0'. block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("highway")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("residential")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("Ben")); var way = new OsmSharp.Osm.Way(); way.Id = 1; way.ChangeSetId = 1; way.Tags = new OsmSharp.Collections.Tags.TagsCollection(); way.Tags.Add("name", "Ben"); way.TimeStamp = DateTime.Now; way.UserId = 1; way.UserName = "******"; way.Version = 1; way.Visible = true; way.Nodes = new List<long>(); way.Nodes.Add(1); way.Nodes.Add(2); var pbfWay = Encoder.EncodeWay(block, new Dictionary<string,int>(), way); Assert.IsNotNull(pbfWay); Assert.AreEqual(1, pbfWay.id); Assert.AreEqual(2, pbfWay.refs.Count); Assert.AreEqual(1, pbfWay.refs[0]); Assert.AreEqual(1, pbfWay.refs[1]); Assert.AreEqual(1, pbfWay.info.changeset); Assert.AreEqual(Encoder.EncodeTimestamp(way.TimeStamp.Value, block.date_granularity), pbfWay.info.timestamp); Assert.AreEqual(1, pbfWay.info.uid); Assert.AreEqual("Ben", System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.info.user_sid])); Assert.AreEqual(1, pbfWay.info.version); Assert.AreEqual(1, pbfWay.keys.Count); Assert.AreEqual("name", System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.keys[0]])); Assert.AreEqual(1, pbfWay.vals.Count); Assert.AreEqual("Ben", System.Text.Encoding.UTF8.GetString(block.stringtable.s[(int)pbfWay.vals[0]])); }
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); }