Esempio n. 1
0
    private static Layer GetLayer(byte[] data)
    {
        Layer layer = new Layer();
        OnlineMapsPBFReader layerReader = new OnlineMapsPBFReader(data);

        while (layerReader.NextByte())
        {
            switch ((LayerType)layerReader.tag)
            {
            case LayerType.Version:
                layer.version = (ulong)layerReader.Varint();
                break;

            case LayerType.Name:
                layer.name = layerReader.GetString((ulong)layerReader.Varint());
                break;

            case LayerType.Extent:
                layer.extent = (ulong)layerReader.Varint();
                break;

            case LayerType.Keys:
                byte[] keyBuffer = layerReader.View();
                string key       = Encoding.UTF8.GetString(keyBuffer, 0, keyBuffer.Length);
                layer.keys.Add(key);
                break;

            case LayerType.Values:
                byte[] valueBuffer            = layerReader.View();
                OnlineMapsPBFReader valReader = new OnlineMapsPBFReader(valueBuffer);
                while (valReader.NextByte())
                {
                    switch ((ValueType)valReader.tag)
                    {
                    case ValueType.String:
                        byte[] stringBuffer = valReader.View();
                        string value        = Encoding.UTF8.GetString(stringBuffer, 0, stringBuffer.Length);
                        layer.values.Add(value);
                        break;

                    case ValueType.Float:
                        layer.values.Add(valReader.GetFloat());
                        break;

                    case ValueType.Double:
                        layer.values.Add(valReader.GetDouble());
                        break;

                    case ValueType.Int:
                        layer.values.Add(valReader.Varint());
                        break;

                    case ValueType.UInt:
                    case ValueType.SInt:
                        layer.values.Add(valReader.Varint());
                        break;

                    case ValueType.Bool:
                        layer.values.Add(valReader.Varint() == 1);
                        break;
                    }
                }
                break;

            case LayerType.Features:
                layer.featuresData.Add(layerReader.View());
                break;

            default:
                layerReader.Skip();
                break;
            }
        }

        return(layer);
    }