Skip to content

Commit 84fa0aa

Browse files
committed
Fix writing dense nodes version
1 parent 216ae52 commit 84fa0aa

File tree

2 files changed

+104
-1
lines changed

2 files changed

+104
-1
lines changed

src/OsmSharp/IO/PBF/Encoder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ private static void EncodeDenseNode(PrimitiveBlock block, Dictionary<string, int
318318
: Encoder.EncodeTimestamp(previous.TimeStamp.Value, block.date_granularity);
319319
groupDense.denseinfo.timestamp.Add(currentTimeStamp - previousTimeStamp);
320320
groupDense.denseinfo.uid.Add((int)((current.UserId ?? 0) - previous.UserId.Value));
321-
groupDense.denseinfo.version.Add((int)(current.Version.Value - previous.Version.Value));
321+
groupDense.denseinfo.version.Add((int)current.Version.Value);
322322
var previousUserNameId = previous.UserName == null
323323
? 0
324324
: Encoder.EncodeString(block, reverseStringTable, previous.UserName);

test/OsmSharp.Test/Stream/PBFOsmStreamTargetTests.cs

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,52 @@ public void TestWriteNode()
176176
Assert.AreEqual(sourceNode.Latitude.Value, resultNode.Latitude.Value, .0001f);
177177
Assert.AreEqual(sourceNode.Longitude.Value, resultNode.Longitude.Value, .0001f);
178178
}
179+
180+
sourceObjects = new OsmGeo[] {
181+
new Node()
182+
{
183+
Id = 1,
184+
Latitude = 1f,
185+
Longitude = 1f,
186+
ChangeSetId = 1092,
187+
TimeStamp = DateTime.UnixEpoch,
188+
UserId = 9034,
189+
Version = 12
190+
},
191+
new Node()
192+
{
193+
Id = 2,
194+
Latitude = 2f,
195+
Longitude = 2f,
196+
ChangeSetId = 1093,
197+
TimeStamp = DateTime.Now,
198+
UserId = 9035,
199+
Version = 13
200+
},
201+
new Node()
202+
{
203+
Id = 3,
204+
Latitude = 3f,
205+
Longitude = 3f,
206+
ChangeSetId = 1094,
207+
TimeStamp = DateTime.UtcNow,
208+
UserId = 9036,
209+
Version = 14
210+
}
211+
};
212+
213+
// build PBF stream target.
214+
using (var stream = new MemoryStream())
215+
{
216+
var target = new PBFOsmStreamTarget(stream);
217+
target.RegisterSource(sourceObjects);
218+
target.Pull();
219+
220+
stream.Seek(0, SeekOrigin.Begin);
221+
var resultObjects = new List<OsmGeo>(new PBFOsmStreamSource(stream));
222+
223+
AreEqual(sourceObjects, resultObjects);
224+
}
179225
}
180226

181227
/// <summary>
@@ -636,5 +682,62 @@ public void TestReadWriteCompressedRead_ShouldSucceed()
636682
Assert.AreEqual(1715, new PBFOsmStreamSource(memoryStream).Count(n => n is Node));
637683
}
638684
}
685+
686+
687+
/// <summary>
688+
/// Test helper to test if 2 OsmGeo arrays are equal.
689+
/// </summary>
690+
private static void AreEqual(IEnumerable<OsmGeo> sourceObjects, IEnumerable<OsmGeo> resultObjects)
691+
{
692+
Assert.IsNotNull(resultObjects);
693+
var sourceArray = sourceObjects.ToArray();
694+
var resultArray = resultObjects.ToArray();
695+
Assert.AreEqual(sourceArray.Length, resultArray.Length);
696+
for (int i = 0; i < sourceArray.Length; i++)
697+
{
698+
AreEqual(sourceArray[i], resultArray[i]);
699+
}
700+
}
701+
702+
/// <summary>
703+
/// Test helper to test if 2 OsmGeos are equal.
704+
/// </summary>
705+
private static void AreEqual(OsmGeo sourceObject, OsmGeo resultObject)
706+
{
707+
Assert.AreEqual(sourceObject.Id, resultObject.Id);
708+
Assert.AreEqual(sourceObject.ChangeSetId, resultObject.ChangeSetId);
709+
Assert.AreEqual(sourceObject.TimeStamp.Value.Ticks, resultObject.TimeStamp.Value.Ticks, 10000000);
710+
Assert.AreEqual(sourceObject.UserId, resultObject.UserId);
711+
Assert.AreEqual(sourceObject.UserName, resultObject.UserName);
712+
Assert.AreEqual(sourceObject.Version, resultObject.Version);
713+
Assert.AreEqual(sourceObject.Tags?.Count ?? 0, resultObject.Tags?.Count ?? 0);
714+
foreach (var sourceTag in sourceObject.Tags ?? new TagsCollection())
715+
{
716+
Assert.IsTrue(resultObject.Tags.Contains(sourceTag));
717+
}
718+
switch (sourceObject)
719+
{
720+
case Node sourceNode:
721+
var resultNode = (Node)resultObject;
722+
Assert.AreEqual(sourceNode.Latitude.Value, resultNode.Latitude.Value, .0001f);
723+
Assert.AreEqual(sourceNode.Longitude.Value, resultNode.Longitude.Value, .0001f);
724+
break;
725+
case Way sourceWay:
726+
var resultWay = (Way)resultObject;
727+
Assert.IsTrue(sourceWay.Nodes.SequenceEqual(resultWay.Nodes));
728+
break;
729+
case Relation sourceRelation:
730+
var resultRelation = (Relation)resultObject;
731+
Assert.AreEqual(sourceRelation.Members.Length, resultRelation.Members.Length);
732+
for (int i = 0; i < sourceRelation.Members.Length; i++)
733+
{
734+
Assert.AreEqual(sourceRelation.Members[i].Type, resultRelation.Members[i].Type);
735+
Assert.AreEqual(sourceRelation.Members[i].Id, resultRelation.Members[i].Id);
736+
Assert.AreEqual(sourceRelation.Members[i].Role, resultRelation.Members[i].Role);
737+
}
738+
break;
739+
}
740+
}
741+
639742
}
640743
}

0 commit comments

Comments
 (0)