Ich habe eine Karte, wo wir klassisch von einem Stil zum anderen wechseln können, zum Beispiel Straßen zu Satelliten.Mapbox GL JS: Style wird nicht geladen
Ich möchte informiert werden, dass der Stil geladen wird, um dann eine Ebene hinzuzufügen.
Gemäß der doc, ich habe versucht zu warten, dass der Stil geladen wird, um eine Schicht basierend auf einem GEOJson
-Datensatz hinzuzufügen.
Das funktioniert perfekt, wenn die Seite geladen wird, die map.on('load')
feuert, aber ich erhalte einen Fehler, wenn ich nur den Stil ändern, so beim Hinzufügen Layer aus map.on('styledataloading')
, und ich bekomme sogar Speicherprobleme in Firefox.
Mein Code ist:
mapboxgl.accessToken = 'pk.token';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v10',
center: [5,45.5],
zoom: 7
});
map.on('load', function() {
loadRegionMask();
});
map.on('styledataloading', function (styledata) {
if (map.isStyleLoaded()) {
loadRegionMask();
}
});
$('#typeMap').on('click', function switchLayer(layer) {
var layerId = layer.target.control.id;
switch (layerId) {
case 'streets':
map.setStyle('mapbox://styles/mapbox/' + layerId + '-v10');
break;
case 'satellite':
map.setStyle('mapbox://styles/mapbox/satellite-streets-v9');
break;
}
});
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', 'regions.json', true);
xobj.onreadystatechange = function() {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}
function loadRegionMask() {
loadJSON(function(response) {
var geoPoints_JSON = JSON.parse(response);
map.addSource("region-boundaries", {
'type': 'geojson',
'data': geoPoints_JSON,
});
map.addLayer({
'id': 'region-fill',
'type': 'fill',
'source': "region-boundaries",
'layout': {},
'paint': {
'fill-color': '#C4633F',
'fill-opacity': 0.5
},
"filter": ["==", "$type", "Polygon"]
});
});
}
Und der Fehler ist:
Uncaught Error: Style is not done loading
at t._checkLoaded (mapbox-gl.js:308)
at t.addSource (mapbox-gl.js:308)
at e.addSource (mapbox-gl.js:390)
at map.js:92 (map.addSource("region-boundaries",...)
at XMLHttpRequest.xobj.onreadystatechange (map.js:63)
Warum erhalte ich diesen Fehler während ich loadRegionMask()
nach der Prüfung nennen, dass der Stil geladen wird?
Mögliche Duplikat [Style ist nicht Laden getan: MapBox GL JS] (https://stackoverflow.com/questions/40557070/style-is-not-done-loading-mapbox-gl-js) –