Esempio n. 1
0
    public void Read(byte[] data)
    {
        if (data == null)
        {
            throw new Exception("Tile data cannot be null");
        }
        if (data.Length < 1)
        {
            throw new Exception("Tile data cannot be empty");
        }
        if (data[0] == 0x1f && data[1] == 0x8b)
        {
            return;
        }

        OnlineMapsPBFReader reader = new OnlineMapsPBFReader(data);

        while (reader.NextByte())
        {
            if (reader.tag != (int)TileType.Layers)
            {
                reader.Skip();
                continue;
            }

            string name                   = null;
            byte[] layerMessage           = reader.View();
            OnlineMapsPBFReader layerView = new OnlineMapsPBFReader(layerMessage);
            while (layerView.NextByte())
            {
                if (layerView.tag == (int)LayerType.Name)
                {
                    name = layerView.GetString((ulong)layerView.Varint());
                }
                else
                {
                    layerView.Skip();
                }
            }

            layers.Add(name, layerMessage);
        }
    }
Esempio n. 2
0
    public static Feature GetFeature(Layer layer, int index)
    {
        byte[] data = layer.featuresData[index];
        OnlineMapsPBFReader reader  = new OnlineMapsPBFReader(data);
        Feature             feature = new Feature(layer);

        while (reader.NextByte())
        {
            switch ((FeatureType)reader.tag)
            {
            case FeatureType.Id:
                feature.id = (ulong)reader.Varint();
                break;

            case FeatureType.Tags:
                List <int> tags = reader.GetPackedUnit32().Select(t => (int)t).ToList();
                feature.tags = tags;
                break;

            case FeatureType.Type:
                int geomType = (int)reader.Varint();
                feature.geometryType = (GeomType)geomType;
                break;

            case FeatureType.Geometry:
                feature.geometryCommands = reader.GetPackedUnit32();
                break;

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

        return(feature);
    }
Esempio n. 3
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);
    }