Skip to content

Instantly share code, notes, and snippets.

Created February 11, 2018 12:24
Show Gist options
  • Save anonymous/ced9aaa2574f2709ec7f0e25dbf5e84b to your computer and use it in GitHub Desktop.
Save anonymous/ced9aaa2574f2709ec7f0e25dbf5e84b to your computer and use it in GitHub Desktop.
#MapboxGL / Onglets géographiques
license: mit
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>MapboxGL</title>
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.0/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.0/mapbox-gl.css' rel='stylesheet' />
<style>
#map { position:absolute; top:0; bottom:0; width:100%; }
#menu {
width: 20%; margin-right: auto; margin-left: auto;
Z-index: 1; top: 10px; right: 10px; position: absolute;
border-color: #FFFFFF; background-color: #808080 ;
font-size: 12px; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; }
#menu a {
display: block; color: #FFFFFF; padding: 8px 16px;
text-align: center; font-weight: bold;
border-style: solid; border-color: #000000;}
#menu a.active { background-color: #CC6600;
color: #FFFFFF;}
#menu a:hover:not(.active) {
background-color: #ffffff;
color: #000000;}
body {
background-color: black;
}
</style>
</head>
<body>
<div id='map'>
<div>
<button id='Gare'>Quartier Gare-Centre</button>
<button id='Rennes1'>Université Rennes 1</button>
<button id='Rennes2'>Université Rennes 2</button>
</div>
<div id="menu"></div>
</div>
<script>
// AccesToken
mapboxgl.accessToken = 'pk.eyJ1IjoibmluYW5vdW4iLCJhIjoiY2pjdHBoZGlzMnV4dDJxcGc5azJkbWRiYSJ9.o4dZRrdHcgVEKCveOXG1YQ';
// Configuration de la carte
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/dark-v9',
center: [-1.68, 48.12], // lat/long
zoom: 17, // zoom
pitch: 50, // Inclinaison
bearing: -10 // Rotation
});
map.on('load', function () {
// Ajout routes OSM
map.addSource('mapbox-streets-v7', {
type: 'vector',
url: 'mapbox://mapbox.mapbox-streets-v7'});
map.addLayer({
"id": "routes",
"type": "line",
"source": "mapbox-streets-v7",
"layout": {'visibility': 'visible'},
"source-layer": "road",
"paint": {"line-color": "#FF7F50", "line-width": 1}
});
// Ajout arrets de bus
map.addSource('Arrets', {
type: 'vector',
url: 'mapbox://ninanoun.58widelk'});
map.addLayer({
'id': 'Arrets',
'type': 'circle',
'source': 'Arrets',
'source-layer': 'Bus-5ypx1k',
'layout': {'visibility': 'none'},
'paint': {'circle-radius': 7, 'circle-color': '#f5f60d'}
});
// Ajout couche équipements
map.addSource('Equipements', {
type: 'vector',
url: 'mapbox://ninanoun.4xcn5ude'});
map.addLayer({
'id': 'Equipements',
'type': 'circle',
'source': 'Equipements',
'source-layer': 'base-orga-var-6k0zky',
'layout': {'visibility': 'none'},
'paint': {'circle-radius': 6, 'circle-color': '#3399ff'}
});
//Limites de proprietes
map.addSource('Proprietes', {
type: 'vector',
url: 'mapbox://ninanoun.a4kdgiot'
});
map.addLayer({
'id': 'Proprietes',
'type': 'line',
'source': 'Proprietes',
'source-layer': 'limites_proprietes',
'layout': {'visibility': 'none',
'line-join': 'round','line-cap': 'round'},
'paint': {'line-color': '#FFFFFF', 'line-width': 1.5}
});
// Ajout batiments 3D
map.addLayer({
'id': 'Batimenst_3D',
'source': 'composite',
'source-layer': 'building',
'layout': {'visibility': 'none'},
'filter': ['==', 'extrude', 'true'],
'type': 'fill-extrusion',
'minzoom': 15,
'paint': {'fill-extrusion-color': '#FFFFFF', 'fill-extrusion-height':
{'type': 'identity','property': 'height'},
'fill-extrusion-base': {'type': 'identity','property': 'min_height'},
'fill-extrusion-opacity': 0.9
}
});
});
// Interactivité Hover
//Interactivité HOVER
//Interactivité HOVER
var popup = new mapboxgl.Popup({
closeButton: false,
closeOnClick: false });
map.on('mousemove', function(e) {
var features = map.queryRenderedFeatures(e.point, { layers: ['Equipements'] });
// Change the cursor style as a UI indicator.
map.getCanvas().style.cursor = (features.length) ? 'pointer' : '';
if (!features.length) {
popup.remove();
return; }
var feature = features[0];
popup.setLngLat(feature.geometry.coordinates)
.setHTML(feature.properties.organom)
.addTo(map);
});
//Interactivité CLICK
map.on('click', function (e) {
var features = map.queryRenderedFeatures(e.point, { layers: ['Arrets'] });
if (!features.length) {
return;
}
var feature = features[0];
var popup = new mapboxgl.Popup({ offset: [0, -15] })
.setLngLat(feature.geometry.coordinates)
.setHTML('<h2>' + feature.properties.nom + '</h2><h3>'
+"Mobilier : " + feature.properties.mobilier + '</h3><p>'
+"Accessibilité PMR : " + feature.properties.estaccessiblepmr + '</p>' )
.addTo(map);
});
map.on('mousemove', function (e) {
var features = map.queryRenderedFeatures(e.point, { layers: ['Arrets'] });
map.getCanvas().style.cursor = (features.length) ? 'pointer' : '';
});
var toggleableLayerIds = ['Routes', 'Arrets', 'Equipements', 'Proprietes', 'Batimenst_3D' ];
for (var i = 0; i < toggleableLayerIds.length; i++) {var id = toggleableLayerIds[i];
var link = document.createElement('a');
link.href = '#';
link.className = 'inactive';
link.textContent = id;
link.onclick = function (e) {var clickedLayer = this.textContent;
e.preventDefault();
e.stopPropagation();
var visibility = map.getLayoutProperty(clickedLayer, 'visibility');
if (visibility === 'visible') {
map.setLayoutProperty(clickedLayer, 'visibility', 'none');
this.className = '';} else {this.className = 'active';
map.setLayoutProperty(clickedLayer, 'visibility', 'visible');} };
var layers = document.getElementById('menu'); layers.appendChild(link); }
// Ajout boutons navigation a la fin du script
var nav = new mapboxgl.NavigationControl();
map.addControl(nav, 'top-right');
map.addControl(new mapboxgl.ScaleControl({
maxWidth: 120,
unit: 'metric'}));
// Configuration onglets géographiques
document.getElementById('Gare').addEventListener('click', function ()
{ map.flyTo({zoom: 16,
center: [-1.672, 48.1043],
pitch: 145,
bearing: -197.6 });
});
document.getElementById('Rennes1').addEventListener('click', function ()
{ map.flyTo({zoom: 16,
center: [-1.6396, 48.1186],
pitch: 145,
bearing: -197.6 });
});
document.getElementById('Rennes2').addEventListener('click', function ()
{ map.flyTo({zoom: 16,
center: [-1.7023, 48.1194],
pitch: 145,
bearing: -197.6 });
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment