rodolpheg

Untitled

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