जैसा कि FOSS4G में एक बातचीत में प्रस्तुत किया गया है Mapbox स्टूडियो Mapbox वेक्टर टाइल बनाने और उन्हें एक .mbtiles
फ़ाइल के रूप में निर्यात करने की अनुमति देता है ।
MapBox-gl.js पुस्तकालय के लिए गतिशील रूप से शैली इस्तेमाल किया जा सकता है और ग्राहक पर (ब्राउज़र) की ओर MapBox वेक्टर टाइल्स प्रस्तुत करना।
अनुपस्थित भाग: मैं मैपबॉक्स वेक्टर टाइल्स ( .mbtiles
) को कैसे स्वयं होस्ट कर सकता हूं ताकि मैं उन्हें मैपबॉक्स- gl.js के साथ उपभोग कर सकूं?
मुझे पता है कि Mapbox Studio वेक्टर टाइल्स को Mapbox सर्वर पर अपलोड कर सकता है और इसे टाइल्स को होस्ट करने दे सकता है। लेकिन यह मेरे लिए कोई विकल्प नहीं है, मैं अपने स्वयं के सर्वर पर वेक्टर टाइल्स की मेजबानी करना चाहता हूं।
नीचे दी गई टाइलस्ट्रीम अप्रोच एक मृत अंत है। तिलिलिव के साथ काम करने के समाधान के लिए मेरा जवाब देखें।
मैंने टाइलस्ट्रीम की कोशिश की जो छवि टाइलों को .mbtiles
फाइलों से बाहर निकाल सकती है :
मेरा वेबपृष्ठ मैपबॉक्स-ग्ल 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 बनाता है:
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"
}
}]
}
... निम्नलिखित टाइलजोन विनिर्देशन में tile.json
:
{
"tilejson": "2.1.0",
"tiles": [
"http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.png"
],
"minzoom": 0,
"maxzoom": 12
}
... जो मेरे टाइलस्ट्रीम सर्वर पर चल रहा है localhost:8888
। टाइलस्ट्रीम को इसके साथ शुरू किया गया है:
node index.js start --tiles="..\tiles"
... जहां ..\tiles
फ़ोल्डर में मेरी osm_roads.mbtiles
फ़ाइल है।
इस सेटअप के साथ, मैं अपना वेबपेज खोल सकता हूं लेकिन केवल बैकग्राउंड लेयर देख सकता हूं। ब्राउज़र नेटवर्क ट्रेस में मैं देख सकता हूं कि जब मैं ज़ूम इन करता हूं तो टाइलें वास्तव में लोड होती हैं, लेकिन ब्राउज़र जावास्क्रिप्ट त्रुटि कंसोल में फॉर्म की कई त्रुटियां होती हैं
Error: Invalid UTF-8 codepoint: 160 in mapbox-gl.js:7
चूंकि वेक्टर टाइलें .png
इमेज नहीं होती हैं, बल्कि प्रोटोबफ फाइलें होती हैं, इसलिए टाइल्स URL http://localhost:8888/v2/osm_roads/{z}/{x}/{y}.pbf
वास्तव में अधिक समझ में आता है, लेकिन यह काम नहीं करता है।
कोई विचार?
///
mbtiles फ़ाइल को परिभाषित करने के लिए तीन की आवश्यकता है:tilelive.load('mbtiles://path/to/osm_roads.mbtiles', function(err, source) {