Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }