Existe-t-il un moyen de changer une couleur d’image-image mapbox-gl-js?
Ce code issu de https://www.mapbox.com/mapbox-gl-js/example/geojson-markers/ ne changera pas la couleur du marqueur en rouge
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"
}
});
J'ai essayé toutes les options listées dans la documentation officielle
J'ai trouvé une réponse. Vous avez besoin d’icônes sdf spécifiquement pour que cela fonctionne.
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
Le problème est que MapBox vous permet uniquement de colorer les icônes au format SDF (fonction de distance signée)}.
icon-color La couleur de l'icône. Ceci ne peut être utilisé qu'avec des icônes sdf.
Ici est une petite documentation à ce sujet. Comme le dit le post de GitHub, il est limité à seulement une couleur . Extraire un fichier sdf d'un fichier png est assez facile avec MapBox.
La documentation de la fonction addImage vous indique que vous pouvez ajouter un paramètre optionnel qui peut contenir sdf et pixelRatio.
Donc, tout ce que vous avez à faire est quelque chose comme ça:
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
}
});
});
Vous pouvez également utiliser vos propres icônes externes pré-colorées (ou en générer à la volée) en tant que icon-image
si vous utilisez d'abord map.loadImage()
et map.addImage()
.
Exemples: