Skip to content

Instantly share code, notes, and snippets.

@mapsmania
Created January 7, 2020 09:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mapsmania/2d1711570cfbbae616c3127078a45050 to your computer and use it in GitHub Desktop.
Save mapsmania/2d1711570cfbbae616c3127078a45050 to your computer and use it in GitHub Desktop.
straats & grachts
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Straats &amp; Grachts</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<script type="text/javascript" src="https://api.tiles.mapbox.com/mapbox-gl-js/v1.6.0/mapbox-gl.js"></script>
<link rel="stylesheet" type="text/css" href="https://api.tiles.mapbox.com/mapbox-gl-js/v1.6.0/mapbox-gl.css">
<style id="compiled-css" type="text/css">
body {
margin: 0;
padding: 0;
}
html, body, #map {
height: 100%;
}
.map-overlay {
background-color: #fff;
border-radius: 3px;
box-shadow:0 1px 2px rgba(0, 0, 0, 0.10);
font: 12px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif;
margin: 10px 0 0 10px;
padding: 10px;
position: absolute;
top: 0;
width: 200px;
}
.map-overlay fieldset {
border: none;
padding: 0;
}
.map-overlay select {
margin-bottom: 5px;
width: 100%;
}
.map-overlay label {
display: block;
font-weight: bold;
margin: 0 0 5px;
}
.map-overlay div {
color: white;
margin-bottom: 5px;
padding: 5px;
text-align: center;
}
#intro {
color: black;
font-weight: bold;
margin-bottom: 0;
}
#keys {
padding: 0;
}
.map-overlay div:last-of-type {
margin-bottom: 0;
}
</style>
<!-- TODO: Missing CoffeeScript 2 -->
<script type="text/javascript">//<![CDATA[
window.onload=function(){
mapboxgl.accessToken = 'pk.eyJ1IjoiZ21hcHNtYW5pYSIsImEiOiJOYnlnSFpvIn0.5f62d0cnrWCA1KioxzXtqg';
// inspired by https://erdavis.com/2019/07/27/the-beautiful-hidden-logic-of-cities/
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v10',
center: [4.8943408, 52.371256],
zoom: 12
});
var cities = {
'amsterdam': {
'center': [4.8943408, 52.371256],
'zoom': 12
},
'rotterdam': {
'center': [4.479, 51.922],
'zoom': 11
},
'haag': {
'center': [4.299, 52.077],
'zoom': 11
},
'utrecht': {
'center': [5.122, 52.091],
'zoom': 11
},
'eindhoven': {
'center': [5.478, 51.441],
'zoom': 11
},
'tilburg': {
'center': [5.091, 51.556],
'zoom': 11
},
'groningen': {
'center': [6.567, 53.219],
'zoom': 12
}
};
var citySelect = document.getElementById('city');
citySelect.addEventListener('change', function (event) {
var city = event.target.value;
map.flyTo(cities[city]);
});
var keys = document.getElementById('keys');
var colors = {
'gracht': '#4cbde9',
'kade': '#1165b2',
'weg': '#288679',
'straat': '#fec828',
'laan': '#fd7f1c',
'dreef': '#fb3252',
'steeg': '#fb8a95',
// fallback color
'Other': '#F8F3F3'
};
var caseExpression = ['case'];
for (var key in colors) {
// don't create an `in` expression for the fallback color
if (key !== 'Other') {
// 'name' is a property of the road layers, e.g. 'Mission St'
caseExpression.push(['in', key, ['get', 'name']]);
}
// build up a `case` expression to allow us to conditionally color lines
// final expression will look like:
// [
// 'case',
// ['in', 'Ave', ['get', 'name']], '#4cbde9',
// . ...
// . '#bcbcbc'
// ]
caseExpression.push(colors[key]);
// create a key for the map
var swatch = document.createElement('div');
swatch.style.backgroundColor = colors[key];
swatch.innerHTML = key;
keys.appendChild(swatch);
}
map.on('load', function() {
// iterate over all the style layers to find road layers
map.getStyle().layers.forEach(function (layer) {
// filter out the road label layer
if (layer.id.indexOf('road-') > -1 && layer.id !== 'road-label') {
// update the `line-color` property with our expression
map.setPaintProperty(layer.id, 'line-color', caseExpression);
}
});
});
}
//]]></script>
</head>
<body>
<div id='map'></div>
<div class='map-overlay'>
<fieldset>
<div id="intro">Straats & Grachts</div>
<label>Fly to City</label>
<select id='city' name='city'>
<option value='amsterdam'>Amsterdam</option>
<option value='rotterdam'>Rotterdam</option>
<option value='haag'>Den Haag</option>
<option value='utrecht'>Utrecht</option>
<option value='eindhoven'>Eindhoven</option>
<option value='tilburg'>Tilburg</option>
<option value='groningen'>Groningen</option>
</select>
<label>Type of Road</label>
<div id='keys'></div>
</fieldset>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment