下記のMapbox GLのStyleの仕様を見ていると、サークルでpaintするマーカーの色を変更する、など簡単!にできそうですが、これがあまり素直なつくりではありません。
https://www.mapbox.com/mapbox-gl-style-spec/#paint-circle-radius
ここでマーカーの色がもともと決めてあり、マーカーにより変更したい場合があります。
配送先A:赤
配送先B:青
みたいな感じですね。
下記の情報が大変参考になります。
Mapbox GL data-driven style reference
まず、配送先IDと色のキー:バリューの配列を作って、colorListに入れます。
var colorList = [ ["128", "#ff0000"], ["107", "#0d3afc"], ["1", "#00FF00"] ];
GeoJSONを次のように作っておきます。
var destinations = [
{type:”Feature”, geometry:{type:”Point”,
coordinates:[139.5920549, 35.4558924]},
properties:{id:”128″,
name:”配送先A”,
color:”#333333″,
information:”hogehoge”,
url:”/destination/viewDestination&destination_id=128&company_id=9841″
}
},
{type:”Feature”, geometry:{type:”Point”,
coordinates:[136.62946120000004, 36.5974896]},
properties:{id:”107″,
name:”配送先B”,
color:”#333333″,
information:"", url:"/destination/viewDestination&destination_id=107&company_id=9841" } } ]
そして、地図にスタイルを追加するときに、次のようにします。
map.on('style.load', function() { map.addSource("destinations", { "type" : "geojson", "data" : { "type" : "FeatureCollection", "features" : destinations } }); map.addLayer({ "id" : "destinations", "type" : "circle", "source": "destinations", "paint": { 'circle-stroke-color' : "#f5f0f0", 'circle-stroke-width' : 2, 'circle-radius': 12, 'circle-color': { //ここがポイント これで、idでcolorListから色を引いて //ペイントできる "property": "id", "type": "categorical", "stops": colorList } }, }, 'destinations_symbol'); map.addLayer({ "id" : "destinations_symbol", "type" : "symbol", "source" : "destinations", "layout" : { "icon-image" : "building-15", "text-field" : "{name}", "text-font" : [ "Open Sans Semibold", "Arial Unicode MS Bold" ], "text-offset" : [ 0, 1 ], "text-size" : 13, "text-anchor" : "top" }, "paint": { "text-color": "#023295", "text-halo-color" : "#ffffff", "text-halo-width" : 2 }, });
ちなみに上記のサンプルは、サークルの上にマーカーを表示しています。
下記の図のようになります。