private List <Int64> ParseWayRefs(BinaryReader br, ParsedData parsed, out int bytes) { bytes = 0; int bytesRead = 0; var refs = new List <Int64>(); var refLen = ParseNumberAndTrackBytes(br, false, out bytesRead); bytes += bytesRead; if (refLen > 0) // parse refs { Int64 totalBytes = 0; while (totalBytes < refLen) { var pnatb = ParseNumberAndTrackBytes(br, true, out bytesRead); var refNum = parsed.ApplyDelta(pnatb, "noderefs"); totalBytes += bytesRead; bytes += bytesRead; refs.Add(refNum); } } return(refs); }
private Node ParseNodeContents(BinaryReader br, ParsedData parsed, int bytesSoFar, int bytesTotal) { int bytes = 0; var node = new Node(); node.header = ParseHeader(br, parsed, out bytes); bytesSoFar += bytes; var l = parsed.ApplyDelta(ParseNumberAndTrackBytes(br, true, out bytes), "nodelon"); node.lon = l / 10000000d; bytesSoFar += bytes; node.lat = parsed.ApplyDelta(ParseNumberAndTrackBytes(br, true, out bytes), "nodelat") / 10000000d; bytesSoFar += bytes; node.tags = ParseTags(br, parsed, bytesSoFar, bytesTotal); return(node); }
private bool ParseNode(BinaryReader br, ParsedData parsed) { int bytes = 0; Int64 len = ParseNumber(br, false); Int64 id = parsed.ApplyDelta(ParseNumberAndTrackBytes(br, true, out bytes), "nodeid"); var node = ParseNodeContents(br, parsed, bytes, (int)len); node.id = id; parsed.Nodes.Add(id, node); return(true); }
private Header ParseHeader(BinaryReader br, ParsedData parsed, out int bytes) { bytes = 0; int bytesRead = 0; var header = new Header(); header.version = ParseNumberAndTrackBytes(br, false, out bytesRead); bytes += bytesRead; if (header.version != 0) { header.timestamp = parsed.ApplyDelta(ParseNumberAndTrackBytes(br, true, out bytesRead), "nodetimestamp"); // seconds from 1970 bytes += bytesRead; // specs unclear if you filter author with timestamp or version if (header.timestamp != 0) { header.changeset = parsed.ApplyDelta(ParseNumberAndTrackBytes(br, true, out bytesRead), "nodechangeset"); bytes += bytesRead; var authorInfo = ParseUIDStringAndTrackBytes(br, parsed, out bytesRead).Split('\0'); // [0] uid, [1] user name bytes += bytesRead; if (authorInfo.Length > 0) { header.author.id = authorInfo[0]; } if (authorInfo.Length > 1) { header.author.name = authorInfo[1]; } } } return(header); }
private bool ParseWay(BinaryReader br, ParsedData parsed) { int bytes = 0; int bytesSoFar = 0; Int64 len = ParseNumber(br, false); Int64 id = parsed.ApplyDelta(ParseNumberAndTrackBytes(br, true, out bytes), "wayid"); bytesSoFar += bytes; // bytes... var way = ParseWayContents(br, parsed, bytesSoFar, (int)len); way.id = id; parsed.Ways.Add(way); return(true); }