样式未完成加载错误:Mapbox GL JS

问题描述 投票:0回答:1

我已经使用Mapbox GL JS建立了一个网站,以在地图上显示许多分层的路线和点,以跟踪不同团队在路线上的进度。但是,当在大量页面上进行测试时,有时会不加载地图上的轨道以及其他许多页面元素,并且我收到未加载样式的错误提示。

代码提取:

var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/outdoors-v11',
center: [15, 50],
zoom: 4 // zoom range is 0 (the whole world) to 22 (street level)
});

var distanceContainer = document.getElementById('distance');

// GeoJSON object to hold our measurement features
var geojson = {
'type': 'FeatureCollection',
'features': []
};
var finishPoint = {
'type': 'FeatureCollection',
'features': []
};
var progressLine = {
'type': 'FeatureCollection',
'features': []
};

map.on('load', function () {
var routeLineString = getRoute();

var line = routeLineString;

var options = {units: 'kilometers'};
var endPoint = turf.along(line, turf.length(line), options);

map.addSource('route-source', {
    'type': 'geojson',
    'data': line
});

// Add styles to the map. Style layer: A style layer ties together the source and image and specifies how they are displayed on the map.
// 'line-color': '#0C7CBB', // dark cyan
// NHS blue: 005EB8
map.addLayer({
    'id': 'route',
    'type': 'line',
    'source': 'route-source',
    'layout': {
        'line-join': 'round',
        'line-cap': 'round'
    },
    'paint': {
        'line-color': '#000000',
        'line-width': 3
    }
},"team1RouteProgress");  // placement of this line below the progress line layer

// destination marker
map.loadImage("https://i.imgur.com/MK4NUzI.png", function (error, image) {
    if (error) throw error;
    map.addImage("finish-flag", image);
    map.addSource('finish-source', {
        'type': 'geojson',
        'data': finishPoint
    }); 
    map.addLayer({
        id: 'finish',
        type: 'symbol',
        source: 'finish-source',
        layout: {
            "icon-image": "finish-flag",
            'icon-anchor': "bottom"
        }
    });
}); 

finishPoint.features.push(endPoint);
//map.getSource('geojson').setData(geojson);

});

$(document).ready(function() {
// Clear the Distance container to populate it with a new value
distanceContainer.innerHTML = '';

var line = getRoute();
var options = {units: 'kilometers'};


$.ajax({    //create an ajax request to getProgress.php
    type: "GET",
    url: "./php/getTeamProgress.php",
    dataType: "json",   //expect json to be returned
    data: {
        //access_key: access_key,
    },
    success: function (response) {
        var Teams_arr = [];
        var dist_arr = [];
        var colour_arr = [];
        response.data.forEach(function (dat) {
            Teams_arr.push(dat.team);
            dist_arr.push(dat.distance);
            //Colour Setting
            if(dat.team === "Typhoon Squadron"){
                colour_arr.push("purple");
            }else if (dat.team === "Gloucester Penguins; for Ben"){
                colour_arr.push("red");
            }else if (dat.team === "Community"){
                colour_arr.push("yellow");
            }else if(dat.team === "HMS Grimsby"){
                colour_arr.push("navy");
            }else if(dat.team === "Thunderer Squadron"){
                colour_arr.push("blue");
            }else{
                colour_arr.push("grey");
            }

        });

        //alert(response.totaldist);
        var distStart = 0;

        //Team 1
        var team1DistAlongRoute = dist_arr[0]
        var team1Along = turf.along(line, team1DistAlongRoute, options);
        if (team1DistAlongRoute<0.1) {
            team1DistAlongRoute = 0.1; // prevent error in lineSliceAlong if dist = 0
        }
        var team1SliceLine = turf.lineSliceAlong(line, distStart, team1DistAlongRoute, {units: 'kilometers'});

        map.addSource('team1progress-source', {
            'type': 'geojson',
            'data': team1SliceLine
        });
        map.addLayer({
            'id': 'team1RouteProgress',
            'type': 'line',
            'source': 'team1progress-source',
            'layout': {
                'line-join': 'round',
                'line-cap': 'round'
            },
            'paint': {
                'line-color': colour_arr[0],
                'line-width': 5
            }
        });

        // Progress marker- Purple
        // Image: An image is loaded and added to the map.

        map.loadImage("./assets/black.png", function (error, image) {
            if (error) throw error;
            map.addImage("team1custom-marker", image);
            map.addSource('geojson', {
                'type': 'geojson',
                'data': geojson
            });
            map.addLayer({
                id: 'team1Progress',
                type: 'symbol',
                source: 'geojson',
                layout: {
                    "icon-image": "team1custom-marker",
                    'icon-anchor': "bottom"
                }
            });
        });

        geojson.features.push(team1Along);
        progressLine.features.push(team1SliceLine);

        //Team 2

        var team2DistAlongRoute = dist_arr[1]
        var team2Along = turf.along(line, team2DistAlongRoute, options);
        if (team2DistAlongRoute<0.1) {
            team2DistAlongRoute = 0.1; // prevent error in lineSliceAlong if dist = 0
        }
        var team2SliceLine = turf.lineSliceAlong(line, distStart, team2DistAlongRoute, {units: 'kilometers'});

        map.addSource('team2progress-source', {
            'type': 'geojson',
            'data': team2SliceLine
        });
        map.addLayer({
            'id': 'team2RouteProgress',
            'type': 'line',
            'source': 'team2progress-source',
            'layout': {
                'line-join': 'round',
                'line-cap': 'round'
            },
            'paint': {
                'line-color': colour_arr[1],
                'line-width': 5
            }
        });

        geojson.features.push(team2Along);
        progressLine.features.push(team2SliceLine);

etc etc

javascript mapbox mapbox-gl-js
1个回答
0
投票

快速修复:

map = new Mapboxgl.map({ ... })
map.on('load', () => {
   ...add all your `addSource()`, `addLayer()` etc here.
});
© www.soinside.com 2019 - 2024. All rights reserved.