vector_tile 0.1.2 copy "vector_tile: ^0.1.2" to clipboard
vector_tile: ^0.1.2 copied to clipboard

outdated

A simple Dart package to encode & decode Mapbox Vector Tile, A implementation of Mapbox Vector Tile specification.

Dart Vector Tile #

Package to encode & decode vector tiles. A implementation of Mapbox Vector Tile specification 2.1.

Features:

  • Parse .mvt/.pbf file to raw vector tile format.
  • Decode vector tile feature to GeoJson format (only GeoJson Feature type).
  • Encode & create vector tile file from raw format data.
  • Encode & create vector tile file from GeoJson format data. (TODO)

Parse & Decode #

Decode an vector tile file, either .pbf or .mvt should work:

import 'vector_tile/vector_tile.dart';

main() async {
  VectorTile tile = await VectorTile.fromPath(path: '../data/sample-12-3262-1923.pbf');
  VectorTileLayer layer = tile.layers.firstWhere((layer) => layer.name == 'transportation');

  layer.features.forEach((feature) {
    // Geometry will be decode on-demand to avoid redundant calculating
    feature.decodeGeometry();

    // Each GeometryType will have different geometry data format
    // So we must explicit check GeometryType and specific generic type here
    if (feature.geometryType == GeometryType.Point) {
      var geojson = feature.toGeoJson<GeoJsonPoint>(3262, 1923, 12);

      print(geojson.properties);
      print(geojson.geometry.coordinates);
    }
  }
}

We also can decode feature to GeoJson data first and explicit cast the type later, there are more examples code in example folder.

Sample VectorTile fields

Encode #

Create VectorTile from raw data and then encode it into protobuf file:

import 'package:vector_tile/raw/raw_vector_tile.dart';

main() async {
  var values = [
    createVectorTileValue(intValue: Int64(65)),
    createVectorTileValue(stringValue: 'basketball'),
  ];

  var features = [
      createVectorTileFeature(
        id: Int64(31162829580),
        tags: [0, 96, 1, 348],
        type: VectorTile_GeomType.POINT,
        geometry: [9, 8058, 1562],
      ),
  ];

  var layers = [
    createVectorTileLayer(
      name: 'building',
      extent: 4096,
      version: 2,
      keys: ['render_height', 'render_min_height'],
      values: values,
      features: features,
    ),
  ];

  var tile = createVectorTile(layers: layers);

  // Save to disk
  await encodeVectorTile(path: './gen/tile.pbf', tile: tile);
}

API #

Class VectorTile:

  • (TODO) toGeoJson: Convert VectorTile to a FeatureCollection GeoJson. Not implemented yet.

class VectorTileFeature:

  • decodeGeometry(): Decode geometry data from raw data, this data also will be used later when we call getGeoJson method.
  • T toGeoJson<T extends GeoJson>(int x, int y, int z): Convert to GeoJson format include lon/lat coordinates calculating, this method will return generic type of GeoJson class because each geometry type will have different coordinates format. So you must given explicit GeoJson type or do a type cast here (See decode example above).

Sample VectorTile (raw) decoded (as JSON) #

{
  "layers": [
    {
      "name": "poi",
      "features": {
        "id": 31162829580,
        "tags": [
          0,
          0,
          1,
          1
        ],
        "type": "POINT",
        "geometry": [
          9,
          8058,
          1562
        ]
      },
      "keys": [
        "render_height",
        "name"
      ],
      "values": [
        {
          "intValue": 65
        },
        {
          "stringValue": "basketball"
        }
      ],
      "extent": 4096,
      "version": 2
    }
  ]
}

Sample VectorTileFeature as GeoJson decoded #

{ 
  "type": "Feature",
  "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
  "properties": {
    "render_height": 65,
    "name": "basketball"
  }
}
6
likes
0
pub points
66%
popularity

Publisher

unverified uploader

A simple Dart package to encode & decode Mapbox Vector Tile, A implementation of Mapbox Vector Tile specification.

Repository (GitHub)
View/report issues

Documentation

Documentation

License

unknown (LICENSE)

Dependencies

fixnum, meta, protobuf

More

Packages that depend on vector_tile