来自任何外部来源的 Mapbox 图标?
Mapbox icon from any external source?
我想将 png 图标添加到来自任何公开可用的在线资源的 mapbox 地图。
我正在尝试使用来自 mapbox.com 的示例,它使用来自维基媒体的 png:
https://docs.mapbox.com/mapbox-gl-js/example/add-image/
这是他们使用的 png:
我可以将它从维基媒体上的任何内容中替换出来,但不能从其他任何内容中替换出来。例如,将 link 换成这个,它不会出现:
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>
问题出在浏览器的 CORS 设置上。当我允许 CORS 时,图像加载得很好。
错误:
Access to fetch at
'https://www.thenittygritty.org/coronavirus/circle1.png' from origin
'null' has been blocked by CORS policy: No
'Access-Control-Allow-Origin' header is present on the requested
resource. If an opaque response serves your needs, set the request's
mode to 'no-cors' to fetch the resource with CORS disabled.
什么是 CORS: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
您可以试试这个 Chrome 扩展以允许 CORS:
我想将 png 图标添加到来自任何公开可用的在线资源的 mapbox 地图。
我正在尝试使用来自 mapbox.com 的示例,它使用来自维基媒体的 png:
https://docs.mapbox.com/mapbox-gl-js/example/add-image/
这是他们使用的 png:
我可以将它从维基媒体上的任何内容中替换出来,但不能从其他任何内容中替换出来。例如,将 link 换成这个,它不会出现:
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>
问题出在浏览器的 CORS 设置上。当我允许 CORS 时,图像加载得很好。
错误:
Access to fetch at 'https://www.thenittygritty.org/coronavirus/circle1.png' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
什么是 CORS: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
您可以试试这个 Chrome 扩展以允许 CORS: