pbf vector tiles support for online map

Started by guoke888, July 08, 2023, 12:09:29 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

guoke888

Hi there,

It would be great for online map to support pbf vector tiles.


Here is an example:


  <onlinemapsource uid="1">
    <name>MapBox</name>
    <url><![CDATA[https://api.mapbox.com/v4/alltrails.osm_segments,alltrails.ahx8exyx,mapbox.mapbox-streets-v8,alltrails.86sfqzu9,alltrails.6ejp62vc,alltrails.2a54nuiz,alltrails.5xfhqyuo,alltrails.dpxqqqh6,mapbox.mapbox-terrain-v2,alltrails.park-areas-production,alltrails.park-centerpoints-production/{$z}/{$x}/{$y}.vector.pbf?sku=101jwaSDi9aEs&access_token=pk.eyJ1IjoiYWxsdHJhaWxzIiwiYSI6ImNqM293emo1YjAwZWQyd3FnaXh0eWsxeHkifQ.LeDD0X-JiWsJmDKeB0AS5w]]></url>
    <minzoom>13</minzoom>
    <maxzoom>16</maxzoom>
    <projection>MERCATORESFERICA</projection>
    <servers></servers>
    <httpparam name="User-Agent">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36</httpparam>
    <cacheable>1</cacheable>
    <downloadable>1</downloadable>
    <maxtilesday>0</maxtilesday>
    <maxthreads>0</maxthreads>
    <xop></xop>
    <yop></yop>
    <zop></zop>
    <qop></qop>
    <sop></sop>
  </onlinemapsource>


Note the tiles served by this map source are gzip compressed protobuf files.
So you need to gunzip it first, then you can decode it with `protoc --decode` using https://github.com/mapbox/vector-tile-spec/blob/master/2.1/vector_tile.proto.

Example 1:

#### Download the file
$ curl -X GET "https://api.mapbox.com/v4/alltrails.osm_segments,alltrails.ahx8exyx,mapbox.mapbox-streets-v8,alltrails.86sfqzu9,alltrails.6ejp62vc,alltrails.2a54nuiz,alltrails.5xfhqyuo,alltrails.dpxqqqh6,mapbox.mapbox-terrain-v2,alltrails.park-areas-production,alltrails.park-centerpoints-production/14/2721/6303.vector.pbf?sku=101jwaSDi9aEs&access_token=pk.eyJ1IjoiYWxsdHJhaWxzIiwiYSI6ImNqM293emo1YjAwZWQyd3FnaXh0eWsxeHkifQ.LeDD0X-JiWsJmDKeB0AS5w" > 6303.pbf.gz
$ file 6303.pbf.gz
6303.pbf.gz: gzip compressed data, from Unix, original size modulo 2^32 21648

#### We can unzip it
$ gunzip 6303.pbf.gz
$ ls -l
total 16
-rw-rw-r-- 1 user user 21648 Jun 18 01:57 6303.pbf

#### Now download the vector_tile.proto file from https://github.com/mapbox/vector-tile-spec repo
$ git clone https://github.com/mapbox/vector-tile-spec.git
$ ls -l vector-tile-spec/2.1/vector_tile.proto
-rw-rw-r-- 1 user user 2860 Jun 18 01:54 vector-tile-spec/2.1/vector_tile.proto

#### Now we can use protoc to decode it
$ cat 6303.pbf | protoc -I vector-tile-spec/2.1/ vector_tile.proto --decode vector_tile.Tile
[libprotobuf WARNING ../../../../../src/google/protobuf/compiler/parser.cc:649] No syntax specified for the proto file: vector_tile.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
.
.
.
  extent: 4096
  version: 2
}


This doc should be helpful: https://docs.mapbox.com/data/tilesets/guides/vector-tiles-standards/


Here is another example:

<onlinemapsource uid="2">
    <name>MapTiler.com</name>
    <url><![CDATA[https://api.maptiler.com/tiles/v3/{$z}/{$x}/{$y}.pbf?key=eIgS48TpQ70m77qKYrsx&mtsid=402d4247-0a2e-4a5e-9e5c-f8000a15eabf]]></url>
    <minzoom>0</minzoom>
    <maxzoom>15</maxzoom>
    <projection>MERCATORESFERICA</projection>
    <servers>1</servers>
    <httpparam name="User-Agent">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36</httpparam>
    <httpparam name="Referer">https://www.maptiler.com/</httpparam>
    <cacheable>1</cacheable>
    <downloadable>1</downloadable>
    <maxtilesday>0</maxtilesday>
    <maxthreads>0</maxthreads>
    <xop></xop>
    <yop></yop>
    <zop></zop>
    <qop></qop>
    <sop></sop>
  </onlinemapsource>


Note map tiles served by this map source are not gzip compressed. So no need to gunzip.

Thanks!