/// <summary> /// Tests read/write and actual data file. /// </summary> protected void TestReadWriteData() { this.NotifyEmptyExpected(); // empty test database. // create the target and pull the data from the test-file into the sqlite database. OsmStreamTarget target = this.CreateDataStreamTarget(); PBFOsmStreamSource source = new PBFOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Data.Test.Unittests.Data.Osm.test.osm.pbf")); target.RegisterSource(source); target.Pull(); IDataSourceReadOnly dataSource = this.CreateDataSource(); MemoryDataSource memorySource = MemoryDataSource.CreateFrom(source); foreach (Node node in memorySource.GetNodes()) { Node dbNode = dataSource.GetNode(node.Id.Value); this.CompareNodes(node, dbNode); } foreach (Way way in memorySource.GetWays()) { Way dbWay = dataSource.GetWay(way.Id.Value); this.CompareWays(way, dbWay); } foreach (Relation relation in memorySource.GetRelations()) { Relation dbRelation = dataSource.GetRelation(relation.Id.Value); this.CompareRelations(relation, dbRelation); } }
/// <summary> /// Returns the way for the given id. /// </summary> /// <param name="id"></param> /// <returns></returns> public override Way GetWay(long id) { Way way; if (!_waysCache.TryGet(id, out way)) { // cache miss. way = _source.GetWay(id); _waysCache.Add(id, way); } return(way); }
/// <summary> /// Creates a relation from a SimpleRelation. /// </summary> /// <param name="simpleRelation"></param> /// <param name="cache"></param> /// <returns></returns> public static CompleteRelation CreateFrom(Relation simpleRelation, IDataSourceReadOnly cache) { if (simpleRelation == null) { throw new ArgumentNullException("simpleRelation"); } if (cache == null) { throw new ArgumentNullException("cache"); } if (simpleRelation.Id == null) { throw new Exception("simpleRelation.Id is null"); } CompleteRelation relation = Create(simpleRelation.Id.Value); relation.ChangeSetId = simpleRelation.ChangeSetId; foreach (Tag pair in simpleRelation.Tags) { relation.Tags.Add(pair); } for (int idx = 0; idx < simpleRelation.Members.Count; idx++) { long memberId = simpleRelation.Members[idx].MemberId.Value; string role = simpleRelation.Members[idx].MemberRole; var member = new CompleteRelationMember(); member.Role = role; switch (simpleRelation.Members[idx].MemberType.Value) { case OsmGeoType.Node: Node simpleNode = cache.GetNode(memberId); if (simpleNode != null) { member.Member = CompleteNode.CreateFrom(simpleNode); } else { return(null); } break; case OsmGeoType.Way: Way simpleWay = cache.GetWay(memberId); if (simpleWay != null) { member.Member = CompleteWay.CreateFrom(simpleWay, cache); } else { return(null); } break; case OsmGeoType.Relation: Relation simpleRelationMember = cache.GetRelation(memberId); if (simpleRelationMember != null) { member.Member = CompleteRelation.CreateFrom(simpleRelationMember, cache); } else { return(null); } break; } relation.Members.Add(member); } relation.TimeStamp = simpleRelation.TimeStamp; relation.User = simpleRelation.UserName; relation.UserId = simpleRelation.UserId; relation.Version = simpleRelation.Version.HasValue ? (long)simpleRelation.Version.Value : (long?)null; relation.Visible = simpleRelation.Visible.HasValue && simpleRelation.Visible.Value; return(relation); }
/// <summary> /// Tests if the data present is the data from api.osm. /// </summary> private void TestData(IDataSourceReadOnly data) { // test what data is present in the datasource. Node node_291738780 = data.GetNode(291738780); Assert.IsNotNull(node_291738780); Assert.AreEqual(291738780, node_291738780.Id); Node node_1727654333 = data.GetNode(1727654333); Assert.IsNotNull(node_1727654333); Assert.AreEqual(1727654333, node_1727654333.Id); Way way_87281441 = data.GetWay(87281441); Assert.IsNotNull(way_87281441); Assert.AreEqual(87281441, way_87281441.Id); Way way_76705106 = data.GetWay(76705106); Assert.IsNotNull(way_76705106); Assert.AreEqual(76705106, way_76705106.Id); }