rodolpheg

Untitled

Apr 7th, 2020
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta name="viewport" content="width=device-width, initial-scale=1">
  5. <title>Ma page</title>
  6. <meta charset="UTF-8">
  7. <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
  8. <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
  9.  
  10. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
  11. <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha256-pasqAKBDmFT4eHoN2ndd6lN370kFiGUFyTiUHWhU7k8=" crossorigin="anonymous"></script>
  12. <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
  13.  
  14. <script src="plugins/leaflet.ajax.min.js"></script>
  15.  
  16. <script src="plugins/classybrew.js"></script>
  17. <style>
  18. html, body {height: 100%; margin: 0;}
  19. #carte { width: 100%; height: 100%; }
  20. .navbar-nav > li{
  21. padding-left:5px;
  22. padding-right:5px;
  23. padding-top:2px;
  24. padding-bottom:2px;
  25. }
  26. .info {
  27. padding: 6px 8px;
  28. font: 14px/16px Arial, Helvetica, sans-serif;
  29. background: rgba(255,255,255,0.8);
  30. box-shadow: 0 0 15px rgba(0,0,0,0.2);
  31. border-radius: 5px;
  32. } .info
  33. .legend {
  34. text-align: left;
  35. line-height: 18px;
  36. color: #555;
  37. }
  38. .legend i {
  39. width: 18px;
  40. height: 18px;
  41. float: left;
  42. margin-right:
  43. 8px;
  44. opacity: 0.95;
  45. }
  46. </style>
  47. </head>
  48. <body>
  49. <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
  50. <a class="navbar-brand" href="#">
  51. <img src="logo.png" width="30" height="30" alt="">
  52. </a>
  53. <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  54. <span class="navbar-toggler-icon"></span>
  55. </button>
  56.  
  57. <div class="collapse navbar-collapse" id="navbarSupportedContent">
  58. <ul class="navbar-nav mr-auto">
  59.  
  60. <li class="nav-item">
  61. <select class="custom-select">
  62. <option value="0">Clair</option>
  63. <option value="3">Sombre</option>
  64. <option value="4">Topographie</option>
  65. <option selected value="1">Plan du réseau routier</option>
  66. <option value="2">Satellite</option>
  67. </select>
  68. </li>
  69.  
  70. <li class="nav-item">
  71. <select class="custom-select">
  72. <option selected>Sélectionnez des données à afficher</option>
  73. <option value="Montreal_AD_v0743.geojson">Montréal</option>
  74. <option value="Canada_CSD_v0743.geojson">Canada</option>
  75. </select>
  76. </li>
  77.  
  78. <li>
  79. <select class="custom-select">
  80. <option value="jenks">Ruptures naturelles (Jenks)</option>
  81. <option value="quantile">Quantilles</option>
  82. <option value="equal_interval">Intervals égaux</option>
  83. </select>
  84. </li>
  85.  
  86. <li>
  87. <select class="custom-select">
  88. <option value="YlGn">YlGn</option>
  89. <option value="Reds">Reds</option>
  90. <option value="Greens">Greens</option>
  91. <option value="YlGnBu">YlGnBu</option>
  92. <option value="Greys">Greys</option>
  93. <option value="Blues">Blues</option>
  94. <option selected value="Spectral">Spectral</option>
  95. <option value="RdYlGn">RdYlGn</option>
  96. </select>
  97. </li>
  98.  
  99. </ul>
  100. </div>
  101. </nav>
  102. <div class="container-fluid" id='carte'></div>
  103.  
  104. <script>
  105. var poly;
  106. var classification = 'jenks';
  107. var palette = 'Spectral';
  108. var serie;
  109.  
  110. // Initialisation d'une carte avec plusieurs fonds de carte
  111. mapboxUrl = 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=TOKEN';
  112. mapboxAttribution = 'Fond de carte &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' + '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' + 'via © <a href="https://www.mapbox.com/">Mapbox</a>'
  113.  
  114. var light = L.tileLayer(mapboxUrl, {id: 'mapbox/light-v10', attribution: mapboxAttribution}),
  115. streets = L.tileLayer(mapboxUrl, {id: 'mapbox/streets-v11', attribution: mapboxAttribution}),
  116. dark = L.tileLayer(mapboxUrl, {id: 'mapbox/dark-v10', attribution: mapboxAttribution}),
  117. outdoor = L.tileLayer(mapboxUrl, {id: 'mapbox/outdoors-v11', attribution: mapboxAttribution}),
  118. sat = L.tileLayer(mapboxUrl, {id: 'mapbox/satellite-v9', attribution: mapboxAttribution});
  119.  
  120. var map = L.map('carte', {
  121. center: [45.52,-73.63],
  122. zoom: 5,
  123. layers: streets,
  124. zoomControl: false
  125. });
  126.  
  127. couches = [light,streets,sat,dark,outdoor]
  128.  
  129. let base = document.querySelectorAll('select')[0];
  130. if (base) base.addEventListener('change', function(event) {
  131. map.removeLayer(light)
  132. map.removeLayer(dark)
  133. map.removeLayer(streets)
  134. map.removeLayer(outdoor)
  135. map.removeLayer(sat)
  136. map.addLayer(couches[event.target.value]);
  137. });
  138.  
  139. let data = document.querySelectorAll('select')[1];
  140. if (data) data.addEventListener('change', function(event) {
  141.  
  142. if (map.hasLayer(poly) == true) {
  143. map.removeLayer(poly);
  144. }
  145.  
  146. poly = new L.GeoJSON.AJAX('data/' + event.target.value);
  147. poly.addTo(map);
  148.  
  149. poly.on('data:loaded', function() {
  150.  
  151. map.fitBounds(poly.getBounds());
  152.  
  153. var donnees = poly.toGeoJSON();
  154. serie = [];
  155. for (let i = 0; i < donnees.features.length; i++) {
  156. serie.push(parseFloat(donnees.features[i].properties.var));
  157. };
  158.  
  159. resetColourAndLegend(classification,palette,serie);
  160. })
  161.  
  162. map.attributionControl.addAttribution('Données &copy; <a href="http://statisticscanada.ca/">Statistiques Canada</a>');
  163.  
  164. });
  165.  
  166. // détection des changement dans le menu "type de classification"
  167. let classif = document.querySelectorAll('select')[2];
  168. if (classif) classif.addEventListener('change', function(event) {
  169. classification = event.target.value;
  170. resetColourAndLegend(classification,palette,serie)
  171. });
  172.  
  173. // détection des changement dans le menu "palette de couleurs"
  174. let pal = document.querySelectorAll('select')[3];
  175. if (pal) pal.addEventListener('change', function(event) {
  176. palette = event.target.value;
  177. resetColourAndLegend(classification,palette,serie)
  178. });
  179.  
  180. function resetColourAndLegend(classification,palette,serie) {
  181.  
  182. var brew = new classyBrew();
  183. brew.setSeries(serie);
  184. brew.setNumClasses(8);
  185. brew.setColorCode(palette);
  186. var classes = brew.classify(classification);
  187.  
  188. poly.eachLayer(function (layer) {
  189. layer.setStyle({
  190. weight: .5,
  191. opacity: 1,
  192. color: 'grey',
  193. dashArray: '3',
  194. fillOpacity: 1,
  195. fillColor: brew.getColorInRange(layer.feature.properties['var'])
  196. })
  197. });
  198.  
  199. try {
  200. map.removeControl(legend);
  201. }
  202. catch(err) {
  203. console.log(err)
  204. }
  205. legend = L.control({position: 'bottomright'});
  206. legend.onAdd = function (map) {
  207. var div = L.DomUtil.create('div', 'info legend');
  208. var labels = [];
  209. for (var i = 0; i < classes.length - 1; i++) {
  210. labels.push('<i style="background:' + brew.getColorInRange((parseInt(classes[i]) + parseInt(classes[i + 1])) / 2) + '"></i>' + parseInt(classes[i]) + ' à ' + parseInt(classes[i + 1]) + " <br>");
  211. }
  212. div.innerHTML = '<b>Revenu médian en $</b><hr>' + labels.join('<br>');
  213. return div;
  214. };
  215. legend.addTo(map);
  216. }
  217.  
  218. </script>
  219. </body>
  220. </html>
Advertisement
Add Comment
Please, Sign In to add comment