MapBox-जीएल-js में टाइल यूआरएल स्विच करने के लिए अनुशंसित तरीका

वोट
2

परिस्थिति

हम एक प्रस्तुत करना रेखापुंज नक्शे को परत। परत के स्रोत एक प्रारंभिक टाइल url है। अब हम स्रोत की टाइल यूआरएल बदल सकते हैं और नए टाइलों के लिए पुनः लोड ट्रिगर करते हैं। उदाहरण के लिए हम समय में विभिन्न बिंदुओं के लिए टाइल है और हम अलग अलग समय चरणों के माध्यम से कदम के लिए चाहते हैं।

में क्या किया जा सकता mapbox-gl@0.21.0

map.addSource('tile-source', {...});
map.addLayer('tile-layer', {source: 'tile-source', ...});

// react to a button click or what ever to trigger tile url change
...
const source = map.getSource('tile-source');
source.tiles = ['new-tile-url'];
source._pyramid.reload();

यह ठीक काम करता है। लेकिन, बेशक, निजी तरीकों का उपयोग कर बुरा अभ्यास है; नीचे दिए गए कारण देखें:

क्या GitHub से वर्तमान संस्करण के साथ किया जा सकता है (नवीनतम, b155118 प्रतिबद्ध 2016/07/28)

// init map, add layer, add source, like above
const source = map.getSource('tile-source');
source.tiles = ['new-tile-url'];

map.styles.sources['tile-source'].reload();

यह इस तरह से किया जाना है, क्योंकि पूर्व है TilePyramidएक करने के लिए पुनर्संशोधित कर दिया गया है SourceCache। यहाँ हम बुला रहे हैं reload()पर SourceCacheनहीं RasterTileSource। ऐसा लगता है कि हम, हालांकि यह अभी भी गैर-दस्तावेजी एपीआई, जो भविष्य के संस्करणों में टूट सकता है की तरह लग रहा है अब किसी भी निजी तरीकों का इस्तेमाल करने की जरूरत नहीं है।

इसके अलावा वहाँ एक स्मृति रिसाव के साथ एक मुद्दा जब बुला रहा है reload(): https://github.com/mapbox/mapbox-gl-js/issues/2266

इसके अतिरिक्त संचय साफ़ कर हो जाता है जब बुला reload()। जो अब के लिए एक मुद्दा हो प्रतीत नहीं होता है।

// This yields a `RasterTileSource` instance
map.getSource('tile-source'); 

// This yields a `SourceCache` instance
map.styles.sources['tile-source'];

// What's really confusing too, at least namingwise
map.getStyle(); // <-- Yields the maps (visual) style

SourceCacheहै RasterTileSourceएक निजी के रूप में उदाहरण के _sourceक्षेत्र।

सवाल

इस तरह कुछ करने के लिए सिफारिश की तरीका क्या है? यह एक सुविधा पर काम किया जा रहा है? वहाँ एक स्पष्टीकरण क्यों यह एक विशेषता हो जाएगा नहीं है (अभी तक) या कभी नहीं है?

28/07/2016 को 07:46
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
3

ऐसा लगता है कि आप एक का URL बदलने के लिए कोशिश कर रहे हैं rasterस्रोत। जीएल जे एस में यह करने के लिए उचित तरीके से स्रोत को हटा दें और फिर एक ही आईडी और नए यूआरएल के साथ एक नया स्रोत को जोड़ने के लिए है।

map.addSource('tile-source', {...});
map.addLayer('tile-layer', {source: 'tile-source', ...});

// react to a button click or what ever to trigger tile url change
...
map.removeSource('tile-source');
map.addSource('tile-source', {tiles: ['new-tile-url'], ...});
04/08/2016 को 17:28
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more