Ejemplo n.º 1
0
        /// <summary>
        /// Decodes the given block.
        /// </summary>
        public static bool Decode(this PrimitiveBlock block, IPBFOsmPrimitiveConsumer primitivesConsumer,
                                  bool ignoreNodes, bool ignoreWays, bool ignoreRelations)
        {
            bool hasNodes, hasWays, hasRelations;

            return(block.Decode(primitivesConsumer, ignoreNodes, ignoreWays, ignoreRelations,
                                out hasNodes, out hasWays, out hasRelations));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Decodes the block.
        /// </summary>
        public static bool Decode(this PrimitiveBlock block, IPBFOsmPrimitiveConsumer primitivesConsumer,
                                  bool ignoreNodes, bool ignoreWays, bool ignoreRelations, out bool hasNodes, out bool hasWays, out bool hasRelations)
        {
            var success = false;

            hasNodes     = false;
            hasWays      = false;
            hasRelations = false;

            if (block.primitivegroup != null)
            {
                foreach (var primitivegroup in block.primitivegroup)
                {
                    if (primitivegroup.dense != null && primitivegroup.dense.id.Count > 0)
                    {
                        hasNodes = true;
                        if (!ignoreNodes)
                        {
                            int  keyValsIdx       = 0;
                            long currentId        = 0;
                            long currentLat       = 0;
                            long currentLon       = 0;
                            long currentChangeset = 0;
                            long currentTimestamp = 0;
                            int  currentUid       = 0;
                            int  currentUserSid   = 0;
                            int  currentVersion   = 0;

                            for (int idx = 0; idx < primitivegroup.dense.id.Count; idx++)
                            {
                                // do the delta decoding stuff.
                                currentId = currentId +
                                            primitivegroup.dense.id[idx];
                                currentLat = currentLat +
                                             primitivegroup.dense.lat[idx];
                                currentLon = currentLon +
                                             primitivegroup.dense.lon[idx];
                                if (primitivegroup.dense.denseinfo != null)
                                { // add all the metadata.
                                    currentChangeset = currentChangeset +
                                                       primitivegroup.dense.denseinfo.changeset[idx];
                                    currentTimestamp = currentTimestamp +
                                                       primitivegroup.dense.denseinfo.timestamp[idx];
                                    currentUid = currentUid +
                                                 primitivegroup.dense.denseinfo.uid[idx];
                                    currentUserSid = currentUserSid +
                                                     primitivegroup.dense.denseinfo.user_sid[idx];
                                    currentVersion = currentVersion +
                                                     primitivegroup.dense.denseinfo.version[idx];
                                }

                                var node = new Node();
                                node.id             = currentId;
                                node.info           = new Info();
                                node.info.changeset = currentChangeset;
                                node.info.timestamp = (int)currentTimestamp;
                                node.info.uid       = currentUid;
                                node.info.user_sid  = currentUserSid;
                                node.info.version   = currentVersion;
                                node.lat            = currentLat;
                                node.lon            = currentLon;

                                // get the keys/vals.
                                var keyVals = primitivegroup.dense.keys_vals;
                                while (keyVals.Count > keyValsIdx &&
                                       keyVals[keyValsIdx] != 0)
                                {
                                    node.keys.Add((uint)keyVals[keyValsIdx]);
                                    keyValsIdx++;
                                    node.vals.Add((uint)keyVals[keyValsIdx]);
                                    keyValsIdx++;
                                }
                                keyValsIdx++;

                                success  = true;
                                hasNodes = true;
                                primitivesConsumer.ProcessNode(block, node);
                            }
                        }
                    }
                    else
                    {
                        if (primitivegroup.nodes != null && primitivegroup.nodes.Count > 0)
                        {
                            hasNodes = true;
                            if (!ignoreNodes)
                            {
                                foreach (var node in primitivegroup.nodes)
                                {
                                    success = true;
                                    primitivesConsumer.ProcessNode(block, node);
                                }
                            }
                        }
                        if (primitivegroup.ways != null && primitivegroup.ways.Count > 0)
                        {
                            hasWays = true;
                            if (!ignoreWays)
                            {
                                foreach (var way in primitivegroup.ways)
                                {
                                    success = true;
                                    primitivesConsumer.ProcessWay(block, way);
                                }
                            }
                        }
                        if (primitivegroup.relations != null && primitivegroup.relations.Count > 0)
                        {
                            hasRelations = true;
                            if (!ignoreRelations)
                            {
                                foreach (var relation in primitivegroup.relations)
                                {
                                    success = true;
                                    primitivesConsumer.ProcessRelation(block, relation);
                                }
                            }
                        }
                    }
                }
            }
            return(success);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Decodes the block.
        /// </summary>
        public static bool Decode(this PrimitiveBlock block, IPBFOsmPrimitiveConsumer primitivesConsumer, 
            bool ignoreNodes, bool ignoreWays, bool ignoreRelations)
        {
            var success = false;

            if (block.primitivegroup != null)
            {
                foreach (var primitivegroup in block.primitivegroup)
                {
                    if (!ignoreNodes && primitivegroup.dense != null)
                    {
                        int keyValsIdx = 0;
                        long currentId = 0;
                        long currentLat = 0;
                        long currentLon = 0;
                        long currentChangeset = 0;
                        long currentTimestamp = 0;
                        int currentUid = 0;
                        int currentUserSid = 0;
                        int currentVersion = 0;

                        for (int idx = 0; idx < primitivegroup.dense.id.Count; idx++)
                        {
                            // do the delta decoding stuff.
                            currentId = currentId +
                                primitivegroup.dense.id[idx];
                            currentLat = currentLat +
                                primitivegroup.dense.lat[idx];
                            currentLon = currentLon +
                                primitivegroup.dense.lon[idx];
                            if (primitivegroup.dense.denseinfo != null)
                            { // add all the metadata.
                                currentChangeset = currentChangeset +
                                    primitivegroup.dense.denseinfo.changeset[idx];
                                currentTimestamp = currentTimestamp +
                                    primitivegroup.dense.denseinfo.timestamp[idx];
                                currentUid = currentUid +
                                    primitivegroup.dense.denseinfo.uid[idx];
                                currentUserSid = currentUserSid +
                                    primitivegroup.dense.denseinfo.user_sid[idx];
                                currentVersion = currentVersion +
                                    primitivegroup.dense.denseinfo.version[idx];
                            }

                            var node = new Node();
                            node.id = currentId;
                            node.info = new Info();
                            node.info.changeset = currentChangeset;
                            node.info.timestamp = (int)currentTimestamp;
                            node.info.uid = currentUid;
                            node.info.user_sid = currentUserSid;
                            node.info.version = currentVersion;
                            node.lat = currentLat;
                            node.lon = currentLon;

                            // get the keys/vals.
                            var keyVals = primitivegroup.dense.keys_vals;
                            while (keyVals.Count > keyValsIdx &&
                                keyVals[keyValsIdx] != 0)
                            {
                                node.keys.Add((uint)keyVals[keyValsIdx]);
                                keyValsIdx++;
                                node.vals.Add((uint)keyVals[keyValsIdx]);
                                keyValsIdx++;
                            }
                            keyValsIdx++;

                            success = true;
                            primitivesConsumer.ProcessNode(block, node);
                        }
                    }
                    else
                    {
                        if (!ignoreNodes && primitivegroup.nodes != null)
                        {
                            foreach (var node in primitivegroup.nodes)
                            {
                                success = true;
                                primitivesConsumer.ProcessNode(block, node);
                            }
                        }
                        if (!ignoreWays && primitivegroup.ways != null)
                        {
                            foreach (var way in primitivegroup.ways)
                            {
                                success = true;
                                primitivesConsumer.ProcessWay(block, way);
                            }
                        }
                        if (!ignoreRelations && primitivegroup.relations != null)
                        {
                            foreach (var relation in primitivegroup.relations)
                            {
                                success = true;
                                primitivesConsumer.ProcessRelation(block, relation);
                            }
                        }
                    }
                }
            }
            return success;
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Creates a decompressor.
 /// </summary>
 internal Decompressor(IPBFOsmPrimitiveConsumer primitives_consumer)
 {
     _primitives_consumer = primitives_consumer;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Creates a decompressor.
 /// </summary>
 internal Decompressor(IPBFOsmPrimitiveConsumer primitives_consumer)
 {
     _primitives_consumer = primitives_consumer;
 }
Ejemplo n.º 6
0
        public static bool Decode(this PrimitiveBlock block, IPBFOsmPrimitiveConsumer primitivesConsumer, bool ignoreNodes, bool ignoreWays, bool ignoreRelations)
        {
            bool flag = false;

            if (block.primitivegroup != null)
            {
                foreach (PrimitiveGroup primitiveGroup in block.primitivegroup)
                {
                    if (!ignoreNodes && primitiveGroup.dense != null)
                    {
                        int  index1 = 0;
                        long num1   = 0;
                        long num2   = 0;
                        long num3   = 0;
                        long num4   = 0;
                        long num5   = 0;
                        int  num6   = 0;
                        int  num7   = 0;
                        int  num8   = 0;
                        for (int index2 = 0; index2 < primitiveGroup.dense.id.Count; ++index2)
                        {
                            num1 += primitiveGroup.dense.id[index2];
                            num2 += primitiveGroup.dense.lat[index2];
                            num3 += primitiveGroup.dense.lon[index2];
                            if (primitiveGroup.dense.denseinfo != null)
                            {
                                num4 += primitiveGroup.dense.denseinfo.changeset[index2];
                                num5 += primitiveGroup.dense.denseinfo.timestamp[index2];
                                num6 += primitiveGroup.dense.denseinfo.uid[index2];
                                num7 += primitiveGroup.dense.denseinfo.user_sid[index2];
                                num8 += primitiveGroup.dense.denseinfo.version[index2];
                            }
                            Node node = new Node();
                            node.id             = num1;
                            node.info           = new Info();
                            node.info.changeset = num4;
                            node.info.timestamp = (int)num5;
                            node.info.uid       = num6;
                            node.info.user_sid  = num7;
                            node.info.version   = num8;
                            node.lat            = num2;
                            node.lon            = num3;
                            int index3;
                            for (List <int> keysVals = primitiveGroup.dense.keys_vals; keysVals.Count > index1 && keysVals[index1] != 0; index1 = index3 + 1)
                            {
                                node.keys.Add((uint)keysVals[index1]);
                                index3 = index1 + 1;
                                node.vals.Add((uint)keysVals[index3]);
                            }
                            ++index1;
                            flag = true;
                            primitivesConsumer.ProcessNode(block, node);
                        }
                    }
                    else
                    {
                        if (!ignoreNodes && primitiveGroup.nodes != null)
                        {
                            foreach (Node node in primitiveGroup.nodes)
                            {
                                flag = true;
                                primitivesConsumer.ProcessNode(block, node);
                            }
                        }
                        if (!ignoreWays && primitiveGroup.ways != null)
                        {
                            foreach (Way way in primitiveGroup.ways)
                            {
                                flag = true;
                                primitivesConsumer.ProcessWay(block, way);
                            }
                        }
                        if (!ignoreRelations && primitiveGroup.relations != null)
                        {
                            foreach (Relation relation in primitiveGroup.relations)
                            {
                                flag = true;
                                primitivesConsumer.ProcessRelation(block, relation);
                            }
                        }
                    }
                }
            }
            return(flag);
        }