map = {
let map = this;
const mapboxStyle = FileAttachment("os_night.json").url();
if (!map) {
map = new mapboxgl.Map({
container,
center: [0.05, 51.459],
zoom: 12,
pitch: 45,
style:
'https://s3.us-east-2.amazonaws.com/eviction-lab-prototypes/bubble-colors/assets/style.json'
});
}
let trafficLayer = {
id: "traffic_points",
type: "circle",
source: "traffic",
paint: {
"circle-color": circleColor,
"circle-opacity": circleOpacity,
"circle-stroke-color": circleStrokeColor,
"circle-stroke-width": 0.75,
"circle-radius": 10
}
};
yield new Promise(resolve => {
if (map.loaded()) resolve(map);
else map.on('load', () => resolve(map));
});
let bgLayer = map.setPaintProperty('background', 'background-color', bgColor);
if (!map.getSource('traffic')) {
map.addSource('traffic', {
type: 'geojson',
data: {
type: "FeatureCollection",
features: traffic
}
});
}
if (map.getLayer(trafficLayer.id)) {
map.removeLayer(trafficLayer.id);
}
map.addLayer(trafficLayer);
var popup = new mapboxgl.Popup({
closeButton: false,
closeOnClick: false
});
map.on('mouseenter', 'traffic_points', function(e) {
map.getCanvas().style.cursor = 'pointer';
var coordinates = e.features[0].geometry.coordinates.slice();
var props = Object.keys(e.features[0].properties).filter(
el => el.indexOf('road') !== -1
);
var filter = {};
props.map(el => (filter[el] = e.features[0].properties[el]));
var description = `<pre>${JSON.stringify(filter, null, 2).replace(
/{|}/g,
''
)}</pre>`;
while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {
coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;
}
popup
.setLngLat(coordinates)
.setHTML(description)
.addTo(map);
});
map.on('mouseleave', 'traffic_points', function() {
map.getCanvas().style.cursor = '';
popup.remove();
});
}