有没有办法更改mapbox-gl-js图标图像颜色?
此代码取自https://www.mapbox.com/mapbox-gl-js/example/geojson-markers/,不会将标记颜色更改为红色
map.addLayer({
"id": "markers",
"type": "symbol",
"source": "markers",
"layout": {
"icon-image": "{marker-symbol}-15",
"text-field": "{title}",
"text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
"text-offset": [0, 0.6],
"text-anchor": "top"
},
"paint": {
"text-size": 12,
"icon-color" : "#ff0000"
}
});
我已经尝试了官方文档中列出的所有选项
答案 0 :(得分:7)
我找到了答案。你需要专门为它工作的sdf图标。
https://github.com/mapbox/mapbox-gl-js/issues/1594
Unfortunately we don't have a turnkey solution for generating sdf icons but you can see an example of how its done in the maki project
<击> https://github.com/mapbox/maki/blob/mb-pages/sdf-render.js 击>
由@yurik更新:以上链接不再有效,可能是指https://github.com/mapbox/maki/blob/b0060646e28507037e71edf049a17fab470a0080/sdf-render.js
答案 1 :(得分:3)
问题是MapBox仅允许您为SDF (有符号距离函数)格式的图标着色。
icon-color 图标的颜色。只能与sdf图标一起使用。
Here是关于它的小型文档。就像GitHub上的帖子说的那样,它仅限于一种颜色。在MapBox中从png文件中获取sdf文件非常容易。
addImage函数的文档告诉您可以添加可选选项参数,其中可以包含sdf和pixelRatio。
所以您要做的就是这样:
map.loadImage(imageURL, function(error0, image0) {
if (error0) throw error0;
map.addImage("image", image0, {
"sdf": "true"
});
map.addLayer({
"id": "Layer1",
"type": "symbol",
"source": "places",
"layout": {
"icon-image": "image",
"icon-allow-overlap": true,
},
"paint": {
"icon-color": "#00ff00",
"icon-halo-color": "#fff",
"icon-halo-width": 2
}
});
});
答案 2 :(得分:1)
如果您先使用icon-image
和map.loadImage()
,也可以使用自己的预先着色的外部图标(或动态生成彩色图标)为map.addImage()
。
示例: