Seperti yang disajikan dalam ceramah di FOSS4G Mapbox Studio memungkinkan untuk membuat petak vektor Mapbox dan mengekspornya sebagai .mbtiles
file.
The Mapbox-gl.js perpustakaan dapat digunakan untuk secara dinamis gaya dan membuat ubin vektor Mapbox pada klien (browser) sisi.
Bagian yang hilang: Bagaimana cara saya meng-host ubin vektor Mapbox ( .mbtiles
) sehingga saya dapat mengkonsumsinya dengan mapbox-gl.js?
Saya tahu bahwa Mapbox Studio dapat mengunggah ubin vektor ke server Mapbox dan membiarkannya menjadi host ubin. Tapi itu bukan pilihan bagi saya, saya ingin meng-host ubin vektor di server saya sendiri.
Pendekatan TileStream di bawah ini ternyata jalan buntu. Lihat jawaban saya untuk solusi yang berfungsi dengan Tilelive.
Saya mencoba TileStream yang dapat menyajikan ubin gambar dari .mbtiles
file:
Halaman web saya menggunakan mapbox-gl v0.4.0:
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.4.0/mapbox-gl.css' rel='stylesheet' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.4.0/mapbox-gl.js'></script>
dan itu menciptakan mapboxgl.Map dalam skrip JavaScript:
var map = new mapboxgl.Map({
container: 'map',
center: [46.8104, 8.2452],
zoom: 9,
style: 'c.json'
});
File c.json
style mengonfigurasi sumber ubin vektor:
{
"version": 6,
"sprite": "https://www.mapbox.com/mapbox-gl-styles/sprites/bright",
"glyphs": "mapbox://fontstack/{fontstack}/{range}.pbf",
"constants": {
"@land": "#808080",
"@earth": "#805040",
"@water": "#a0c8f0",
"@road": "#000000"
},
"sources": {
"osm_roads": {
"type": "vector",
"url": "tile.json"
}
},
"layers": [{
"id": "background",
"type": "background",
"paint": {
"background-color": "@land"
}
}, {
"id": "roads",
"type": "line",
"source": "osm_roads",
"source-layer": "roads",
"paint": {
"line-color": "@road"
}
}]
}
... dengan spesifikasi TileJSON berikut di tile.json
:
{
"tilejson": "2.1.0",
"tiles": [
"http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.png"
],
"minzoom": 0,
"maxzoom": 12
}
... yang menunjuk ke server TileStream saya berjalan di localhost:8888
. TileStream telah dimulai dengan:
node index.js start --tiles="..\tiles"
... di mana ..\tiles
folder tersebut berisi osm_roads.mbtiles
file saya .
Dengan pengaturan ini, saya dapat membuka halaman web saya tetapi hanya melihat lapisan latar belakang. Di jejak jaringan browser saya dapat melihat bahwa ubin memang dimuat ketika saya memperbesar, tapi konsol kesalahan JavaScript browser berisi beberapa kesalahan formulir
Error: Invalid UTF-8 codepoint: 160 in mapbox-gl.js:7
Karena ubin vektor bukan .png
gambar melainkan file ProtoBuf, URL ubin http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.pbf
sebenarnya lebih masuk akal, tetapi itu tidak berhasil.
Ada ide?
///
untuk mendefinisikan file mbtiles di:tilelive.load('mbtiles://path/to/osm_roads.mbtiles', function(err, source) {