rodolpheg

Untitled

Feb 27th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.91 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5.  
  6.  
  7. <meta charset="utf-8" />
  8.  
  9. <title>Carte choroplèthe de revenu après impôt médian des ménages en 2015</title>
  10.  
  11. <!-- Chargement de la bibliothèque de programmation Leafletjs.com -->
  12. <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css"/>
  13. <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
  14. <!-- Chargement d'un plugin installé localement (qui nous sera utile pour charger des GeoJSON),
  15. télécharger ici : https://github.com/calvinmetcalf/leaflet-ajax et à copier dans un dossier 'plugins'
  16. créé pour l'occasion dans le même dossier que votre fichier index.html -->
  17. <script src="plugins/leaflet.ajax.min.js"></script>
  18.  
  19.  
  20. <style>
  21. html, body {height: 100%; margin: 0;}
  22. #map { width: 100%; height: 100%; }
  23.  
  24. .legend {
  25. text-align: left;
  26. line-height: 18px;
  27. color: #555;
  28. }
  29. .legend i {
  30. font: 12px Helvetica;
  31. width: 18px;
  32. height: 18px;
  33. float: left;
  34. margin-right: 6px;
  35. opacity: 0.7;
  36. }
  37. .info {
  38. padding: 16px 16px;
  39. font: 14px Helvetica;
  40. background: white;
  41. background: rgba(255,255,255,0.8);
  42. box-shadow: 0 0 15px rgba(0,0,0,0.2);
  43. border-radius: 5px;
  44. }
  45. .info h4 {
  46. margin: 0 0 5px; color: #777;
  47. }
  48.  
  49.  
  50. </style>
  51. </head>
  52.  
  53. <body>
  54.  
  55.  
  56. <div id='map' class="row"></div>
  57.  
  58.  
  59. <script>
  60.  
  61. // var light = L.tileLayer(mapboxUrl, {id: 'mapbox/light-v10', attribution: mapboxAttribution}),
  62. // var fond = L. tileLayer
  63. //
  64. // var fond = L.map('map').setView([53.52,-92.63], 5);
  65. // L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={votre_clef}', {
  66. // // établir le niveau de zoom maximum
  67. // maxZoom: 18,
  68. // layers: [light, fond]
  69. // // afficher les référence de la carte. Dans ce cas, nous utilisons l'API MapBox pour afficher une carte issue des données produites par les contributeurs/trices d'Open Street Map
  70. // attribution: 'Fond de carte &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
  71. // '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
  72. // 'via © <a href="https://www.mapbox.com/">Mapbox</a>',
  73. //
  74. //
  75. // // Choisir le style de carte. pour utiliser un style personnalisé : 'nom_utilisateur/clef_du_style' à récupérer ici : studio.mapbox.com
  76. // id: 'gletarte/ck6p68ffj3nlw1ipfekx0126g',
  77. // // VOTRE_CLEF doit être copiée de account.mapbox.com
  78. // votre_clef: 'pk.eyJ1IjoiZ2xldGFydGUiLCJhIjoiY2s2OGsydnFwMDV1NTNrbXhhYjJseHc2MiJ9.JIPCgdoi-OHpMtsp80YGqg'
  79. //
  80.  
  81.  
  82. // Initialisation d'une carte avec plusieurs fonds de plans
  83. mapboxUrl = 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoiZ2xldGFydGUiLCJhIjoiY2s2OGsydnFwMDV1NTNrbXhhYjJseHc2MiJ9.JIPCgdoi-OHpMtsp80YGqg';
  84. 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>'
  85.  
  86. var light = L.tileLayer(mapboxUrl, {id: 'mapbox/light-v10', attribution: mapboxAttribution}),
  87. streets = L.tileLayer(mapboxUrl, {id: 'mapbox/streets-v11', attribution: mapboxAttribution}),
  88. sat = L.tileLayer(mapboxUrl, {id: 'mapbox/satellite-v9', attribution: mapboxAttribution}),
  89. gab = L.tileLayer(mapboxUrl, {id: 'gletarte/ck6p68ffj3nlw1ipfekx0126g', attribution: mapboxAttribution});
  90.  
  91. var map = L.map('map', {
  92. center: [45.52,-73.63],
  93. zoom: 13,
  94. layers: [sat, streets, light]
  95. });
  96.  
  97. // var baseMaps = {
  98. // "Rues": fond,
  99. // "Grayscale": light
  100. // };
  101.  
  102. var baseMaps = {
  103. "light": light,
  104. "sat": sat,
  105. "gab": gab,
  106. "streets": streets
  107. };
  108.  
  109. var couches = {
  110. "<b>Des parcs de Montréal</b>": polygone,
  111.  
  112. }
  113. L.control.layers(baseMaps,couches).addTo(map);
  114.  
  115. // Fonction attribuant un style à l'entité qu'on lui passe
  116. function style_par_entite(feature) {
  117. return {
  118. weight: .5,
  119. opacity: .5,
  120. color: 'white',
  121. dashArray: '3',
  122.  
  123. fillOpacity: 0.9,
  124. fillColor: couleur_par_valeur(feature.properties['var'])
  125. };
  126. }
  127.  
  128.  
  129. // fonction faisant le lien entre une valeur et une couleur. Nous pouvons établir une palette avec http://colorbrewer2.org, mais la classification est ici à notre discrétion
  130. function couleur_par_valeur(v) {
  131. v = parseFloat(v);
  132. if (v > 13167 && v <= 31680) {c = '#a50026'}
  133. else if (v > 31680 && v <= 40021) {c = '#d73027'}
  134. else if (v > 40021 && v <= 46176) {c = '#f46d43'}
  135. else if (v > 46176 && v <= 51968) {c = '#fdae61'}
  136. else if (v > 51968 && v <= 58336) {c = '#fee08b'}
  137. else if (v > 58336 && v <= 65504) {c = '#d9ef8b'}
  138. else if (v > 65504 && v <= 74000) {c = '#a6d96a'}
  139. else if (v > 74000 && v <= 84992) {c = '#66bd63'}
  140. else if (v > 84992 && v <= 102518) {c = '#1a9850'}
  141. else if (v > 102518) {c = '#006837'};
  142. return c;
  143. }
  144.  
  145.  
  146. // Ajout de la référence pour les données
  147. //map.attributionControl.addAttribution('Données &copy; <a href="http://statisticscanada.ca/">Statistiques Canada</a>');
  148.  
  149. // Création d'un élément d'interface pour la légende
  150. var legend = L.control({position: 'bottomright'});
  151.  
  152. // Créons une palette une palette avec http://colorbrewer2.org, mais la classification est ici à notre discrétion
  153. var classes = [13167, 31680, 40021, 46176, 51968, 58336, 65504, 74000, 84992, 102518, 150016];
  154. var palette = ["#a50026", "#d73027", "#f46d43", "#fdae61", "#fee08b", "#d9ef8b", "#a6d96a", "#66bd63", "#1a9850", "#006837"];
  155.  
  156. legend.onAdd = function (map) {
  157. // création d'un élément <div>
  158. var div = L.DomUtil.create('div', 'info legend');
  159. var labels = [];
  160. // itération à travers les classes et création des icones sous forme de code HTML
  161. for (var i = 0; i < classes.length - 1; i++) {
  162. labels.push('<i style="background:' + palette[i] + '"></i>' + classes[i] + ' $ à ' + classes[i + 1] + " $<br>");
  163. }
  164. // injection du code HTML dans la page
  165. div.innerHTML = '<h4>Revenu médian après impôt pour 2015</h4><hr>' + labels.join('<br>');
  166. return div;
  167. };
  168. // Ajout de la légende à la carte
  169. legend.addTo(map);
  170.  
  171.  
  172. // Fonction ajoutant des "listener" à la couche
  173. function ajouter_interaction(feature, layer) {
  174. layer.on({
  175. mouseover: surligneEntite,
  176. mouseout: resetStyleEntite,
  177. click: zoomSurEntite
  178. });
  179. }
  180.  
  181. function surligneEntite(e) {
  182. var layer = e.target;
  183. layer.setStyle({
  184. weight: 2,
  185. color: 'white',
  186. dashArray: '',
  187. fillOpacity: 0.5
  188. });
  189. info.update(layer.feature.properties);
  190. }
  191. function resetStyleEntite(e) {
  192. var layer = e.target;
  193. poly.resetStyle(layer);
  194. info.update();
  195. }
  196. function zoomSurEntite(e) {
  197. var layer = e.target;
  198. map.fitBounds(layer.getBounds());
  199. }
  200.  
  201. // Importation d'une couche GeoJSON grâce au plugin "leaflet-ajax"
  202. // Utilisation de onEachFeature pour attribuer une fonction à chaque entité : https://leafletjs.com/reference-1.6.0.html#geojson-oneachfeature
  203. var poly = new L.GeoJSON.AJAX('Canada_CSD_v0743.geojson', {style: style_par_entite, onEachFeature: ajouter_interaction});
  204. poly.addTo(map);
  205. var info = L.control({position: 'topleft'});
  206. info.onAdd = function (map) {
  207. this._div = L.DomUtil.create('div', 'info');
  208. this.update();
  209. return this._div;
  210. };
  211. info.update = function (polygone) {
  212. this._div.innerHTML = '<h4>Revenu après impôt médian des ménages en 2015</h4><hr>' + (polygone ?
  213. 'Aire de diffusion ' + polygone.csdn + ' : <b>' + polygone.var + '$</b>'
  214. : '<em>Pointez une aire de diffusion</em>');
  215. };
  216. L.control.layers(baseMaps,couches).addTo(map);
  217.  
  218.  
  219. </script>
  220. </body>
  221.  
  222. </html>
Advertisement
Add Comment
Please, Sign In to add comment