Значок Mapbox из любого внешнего источника? - PullRequest
0 голосов
/ 24 марта 2020

Я хочу добавить значок png на карту mapbox из любого общедоступного онлайн-источника.

Я пытаюсь использовать этот пример здесь с mapbox.com, который использует png из Викисклада:

https://docs.mapbox.com/mapbox-gl-js/example/add-image/

Это png, который они используют:

https://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Cat_silhouette.svg/400px-Cat_silhouette.svg.png

Я могу поменяться это из ничего в Викимедиа, но не из чего-либо еще. Например, поменяйте местами ссылку с этой, и она не появится:

https://www.thenittygritty.org/coronavirus/circle1.png

Что мне здесь не хватает ??

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Add an icon to the map</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<script src="https://api.mapbox.com/mapbox-gl-js/v1.8.1/mapbox-gl.js"></script>
<link href="https://api.mapbox.com/mapbox-gl-js/v1.8.1/mapbox-gl.css" rel="stylesheet" />
<style>
	body { margin: 0; padding: 0; }
	#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<div id="map"></div>

<script>
	mapboxgl.accessToken = 'pk.eyJ1Ijoibml0dHlqZWUiLCJhIjoid1RmLXpycyJ9.NFk875-Fe6hoRCkGciG8yQ';
    var map = new mapboxgl.Map({
        container: 'map',
        style: 'mapbox://styles/mapbox/streets-v11'
    });

    map.on('load', function() {
        map.loadImage(
            'https://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Cat_silhouette.svg/400px-Cat_silhouette.svg.png',
            function(error, image) {
                if (error) throw error;
                map.addImage('cat', image);
                map.addSource('point', {
                    'type': 'geojson',
                    'data': {
                        'type': 'FeatureCollection',
                        'features': [
                            {
                                'type': 'Feature',
                                'geometry': {
                                    'type': 'Point',
                                    'coordinates': [0, 0]
                                }
                            }
                        ]
                    }
                });
                map.addLayer({
                    'id': 'points',
                    'type': 'symbol',
                    'source': 'point',
                    'layout': {
                        'icon-image': 'cat',
                        'icon-size': 0.25
                    }
                });
            }
        );
    });
</script>

</body>
</html>

1 Ответ

1 голос
/ 24 марта 2020

Проблема заключается в настройках CORS вашего браузера. Когда я разрешаю CORS, изображение загружается просто отлично.

Ошибка:

Доступ к выборке в 'https://www.thenittygritty.org/coronavirus/circle1.png' из источника 'null' был заблокирован политикой CORS: В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Что такое CORS : https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Вы можете попробовать это расширение Chrome, чтобы разрешить CORS:

https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf?hl=en

...