/// <summary> /// Move to the next item in the stream. /// </summary> /// <param name="ignoreNodes">Makes this source skip all nodes.</param> /// <param name="ignoreWays">Makes this source skip all ways.</param> /// <param name="ignoreRelations">Makes this source skip all relations.</param> /// <returns></returns> public override bool MoveNext(bool ignoreNodes, bool ignoreWays, bool ignoreRelations) { if (!_initialized) { this.Initialize(); _initialized = true; } var nextPBFPrimitive = this.MoveToNextPrimitive(ignoreNodes, ignoreWays, ignoreRelations); while (nextPBFPrimitive.Value != null) { OsmSharp.IO.PBF.Node node = (nextPBFPrimitive.Value as OsmSharp.IO.PBF.Node); if (node != null && !ignoreNodes) { // next primitve is a node. _current = Encoder.DecodeNode(nextPBFPrimitive.Key, node); return(true); } OsmSharp.IO.PBF.Way way = (nextPBFPrimitive.Value as OsmSharp.IO.PBF.Way); if (way != null && !ignoreWays) { // next primitive is a way. _current = Encoder.DecodeWay(nextPBFPrimitive.Key, way); return(true); } OsmSharp.IO.PBF.Relation relation = (nextPBFPrimitive.Value as OsmSharp.IO.PBF.Relation); if (relation != null && !ignoreRelations) { // next primitive is a relation. _current = Encoder.DecodeRelation(nextPBFPrimitive.Key, relation); return(true); } nextPBFPrimitive = this.MoveToNextPrimitive(ignoreNodes, ignoreWays, ignoreRelations); } return(false); }
public void TestDecodeRelation() { 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")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("fake role")); var pbfRelation = new OsmSharp.IO.PBF.Relation() { id = 1, info = new Info() { changeset = 10, timestamp = 10, uid = 100, user_sid = 3, version = 2 } }; pbfRelation.keys.Add(1); pbfRelation.vals.Add(2); pbfRelation.memids.Add(10); pbfRelation.memids.Add(1); // delta-encoding. pbfRelation.roles_sid.Add(4); pbfRelation.roles_sid.Add(4); pbfRelation.types.Add(OsmSharp.IO.PBF.Relation.MemberType.NODE); pbfRelation.types.Add(OsmSharp.IO.PBF.Relation.MemberType.WAY); var relation = Encoder.DecodeRelation(block, pbfRelation); Assert.IsNotNull(relation); Assert.AreEqual(1, relation.Id); Assert.AreEqual(10, relation.ChangeSetId); Assert.AreEqual(PBFExtensions.FromUnixTime(10000), relation.TimeStamp); Assert.AreEqual(OsmSharp.OsmGeoType.Relation, relation.Type); Assert.AreEqual(100, relation.UserId); Assert.AreEqual("Ben", relation.UserName); Assert.AreEqual(2, relation.Version); Assert.AreEqual(2, relation.Members.Length); Assert.AreEqual(10, relation.Members[0].Id); Assert.AreEqual(OsmSharp.OsmGeoType.Node, relation.Members[0].Type); Assert.AreEqual("fake role", relation.Members[0].Role); Assert.AreEqual(11, relation.Members[1].Id); Assert.AreEqual(OsmSharp.OsmGeoType.Way, relation.Members[1].Type); Assert.AreEqual("fake role", relation.Members[1].Role); }
public void TestDecodeBlockWithRelation() { 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("highway")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("residential")); block.stringtable.s.Add(System.Text.Encoding.UTF8.GetBytes("Ben")); var pbfRelation = new OsmSharp.IO.PBF.Relation() { id = 1, info = new Info() { changeset = 10, timestamp = 10, uid = 100, user_sid = 2, version = 2 } }; pbfRelation.keys.Add(0); pbfRelation.vals.Add(1); pbfRelation.memids.Add(10); pbfRelation.memids.Add(1); // delta-encoding. pbfRelation.roles_sid.Add(3); pbfRelation.roles_sid.Add(3); pbfRelation.types.Add(OsmSharp.IO.PBF.Relation.MemberType.NODE); pbfRelation.types.Add(OsmSharp.IO.PBF.Relation.MemberType.WAY); var primitiveGroup = new PrimitiveGroup(); primitiveGroup.relations.Add(pbfRelation); block.primitivegroup.Add(primitiveGroup); var primitivesConsumer = new PrimitivesConsumerMock(); block.Decode(primitivesConsumer, false, false, false); Assert.AreEqual(0, primitivesConsumer.Nodes.Count); Assert.AreEqual(0, primitivesConsumer.Ways.Count); Assert.AreEqual(1, primitivesConsumer.Relations.Count); }
/// <summary> /// Processes a relation. /// </summary> /// <param name="block"></param> /// <param name="relation"></param> void IPBFOsmPrimitiveConsumer.ProcessRelation(PrimitiveBlock block, OsmSharp.IO.PBF.Relation relation) { this.QueuePrimitive(block, relation); }
public void ProcessRelation(PrimitiveBlock block, OsmSharp.IO.PBF.Relation relation) { this.Relations.Add(relation); }