ดังที่นำเสนอในการพูดคุยที่ FOSS4G Mapbox Studio ช่วยให้สามารถสร้างไทล์ Mapbox แบบเวกเตอร์และส่งออกเป็น.mbtiles
ไฟล์
mapbox-gl.jsห้องสมุดสามารถนำมาใช้กับรูปแบบไดนามิกและทำให้กระเบื้องเวกเตอร์ Mapbox บนไคลเอนต์ (เบราว์เซอร์) ด้าน
ส่วนที่ขาดหายไป: ฉันจะโฮสต์ไทล์แผนที่แบบเวกเตอร์ของ Mapbox ( .mbtiles
) เพื่อให้ฉันสามารถกินด้วย mapbox-gl.js ได้อย่างไร
ฉันรู้ว่า Mapbox Studio สามารถอัปโหลดไทล์เวกเตอร์ไปยังเซิร์ฟเวอร์ Mapbox และปล่อยให้มันเป็นเจ้าภาพไทล์ แต่นั่นไม่ใช่ตัวเลือกสำหรับฉันฉันต้องการโฮสต์ไทล์เวกเตอร์บนเซิร์ฟเวอร์ของฉันเอง
วิธีการ TileStream ด้านล่างกลายเป็นจุดจบ ดูคำตอบของฉันสำหรับวิธีแก้ปัญหาการทำงานกับ Tilelive
ฉันลองTileStreamซึ่งสามารถให้บริการไฟล์ภาพจาก.mbtiles
ไฟล์:
หน้าเว็บของฉันใช้ 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>
และสร้าง mapboxgl.Map ในสคริปต์ JavaScript:
var map = new mapboxgl.Map({
container: 'map',
center: [46.8104, 8.2452],
zoom: 9,
style: 'c.json'
});
c.json
ไฟล์รูปแบบกำหนดค่าแหล่งกระเบื้องเวกเตอร์:
{
"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"
}
}]
}
... ด้วยข้อกำหนด TileJSON ต่อไปนี้ในtile.json
:
{
"tilejson": "2.1.0",
"tiles": [
"http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.png"
],
"minzoom": 0,
"maxzoom": 12
}
... ซึ่งชี้ไปยังเซิร์ฟเวอร์ TileStream localhost:8888
ของฉันทำงานที่ TileStream เริ่มต้นด้วย:
node index.js start --tiles="..\tiles"
... ที่..\tiles
โฟลเดอร์มีosm_roads.mbtiles
ไฟล์ของฉัน
ด้วยการตั้งค่านี้ฉันสามารถเปิดเว็บเพจของฉัน แต่เห็นเลเยอร์พื้นหลังเท่านั้น ในการติดตามเครือข่ายของเบราว์เซอร์ฉันเห็นว่ามีการโหลดไทล์เมื่อฉันซูมเข้า แต่คอนโซลข้อผิดพลาดของเบราว์เซอร์ JavaScript มีข้อผิดพลาดหลายอย่างของแบบฟอร์ม
Error: Invalid UTF-8 codepoint: 160 in mapbox-gl.js:7
เนื่องจาก.png
ไทล์เวกเตอร์ไม่ใช่ภาพ แต่เป็นไฟล์ ProtoBuf ดังนั้นไทล์ URL http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.pbf
จึงเหมาะสมกว่า แต่ก็ใช้ไม่ได้
ความคิดใด ๆ
///
ไฟล์เพื่อกำหนดไฟล์ mbtiles ใน:tilelive.load('mbtiles://path/to/osm_roads.mbtiles', function(err, source) {