rodolpheg

Untitled

Feb 3rd, 2020
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Carte choroplèthe</title>
  5. <meta charset="utf-8" />
  6. <!-- Chargement de la bibliothèque de programmation Leafletjs.com -->
  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. <!-- Chargement d'un plugin installé localement (qui nous sera utile pour charger des GeoJSON), télécharger ici : https://github.com/calvinmetcalf/leaflet-ajax et à copier dans un dossier 'plugins' créé pour l'occasion dans le même dossier que votre fichier index.html -->
  10. <script src="plugins/leaflet.ajax.min.js"></script>
  11. <style>
  12. html, body {height: 100%; margin: 0;}
  13. #map { width: 100%; height: 100%; }
  14. .titre <h1> {
  15. font: 250px Helvetica;
  16. float: center;
  17. }
  18. .legend {
  19. text-align: left;
  20. line-height: 18px;
  21. color: #555;
  22. }
  23. .legend i {
  24. font: 12px Helvetica;
  25. width: 18px;
  26. height: 18px;
  27. float: left;
  28. margin-right: 6px;
  29. opacity: 0.7;
  30. }
  31. .info {
  32. padding: 16px 16px;
  33. font: 14px Helvetica;
  34. background: white;
  35. background: rgba(255,255,255,0.8);
  36. box-shadow: 0 0 15px rgba(0,0,0,0.2);
  37. border-radius: 5px;
  38. }
  39. .info h4 {
  40. margin: 0 0 5px; color: #777;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <div id='map'></div>
  46. <script>
  47. var map = L.map('map').setView([45.52,-73.63], 11);
  48.  
  49. // 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
  50. function couleur_par_valeur(v) {
  51. v = parseFloat(v);
  52. if (v > 0 && v <= 35008) {c = '#d53e4f'}
  53. else if (v > 35008 && v <= 44971) {c = '#f46d43'}
  54. else if (v > 44971 && v <= 55979) {c = '#fdae61'}
  55. else if (v > 55979 && v <= 71808) {c = '#fee08b'}
  56. else if (v > 71808 && v <= 93440) {c = '#e6f598'}
  57. else if (v > 93440 && v <= 129024) {c = '#abdda4'}
  58. else if (v > 129024 && v <= 186368) {c = '#66c2a5'}
  59. else if (v > 186368) {c = '#3288bd'};
  60. return c;
  61. }
  62.  
  63. // Fonction attribuant un style à l'entité qu'on lui passe
  64. function style_par_entite(feature) {
  65. return {
  66. weight: .5,
  67. opacity: .5,
  68. color: 'white',
  69. dashArray: '3',
  70.  
  71. fillOpacity: 0.9,
  72. fillColor: couleur_par_valeur(feature.properties['var'])
  73. };
  74. }
  75.  
  76. var titre = L.control({position: 'topleft'});
  77. titre.onAdd = function (map) {
  78. // création d'un élément <div>
  79. var div = L.DomUtil.create('div', 'info titre');
  80. div.innerHTML = '<h1>Revenu après impôt médian des ménages en 2015</h1>';
  81. return div;
  82. };
  83. // Ajout du titre
  84. titre.addTo(map);
  85.  
  86. var info = L.control({position: 'topleft'});
  87. info.onAdd = function (map) {
  88. this._div = L.DomUtil.create('div', 'info');
  89. this.update();
  90. return this._div;
  91. };
  92. info.update = function (polygone) {
  93. this._div.innerHTML = '<h4>Revenu après impôt médian des ménages en 2015</h4><hr>' + (polygone ?
  94. 'Aire de diffusion ' + polygone.da_number + ' : <b>' + polygone.var + '$</b>'
  95. : '<em>Pointez une aire de diffusion</em>');
  96. };
  97. info.addTo(map);
  98.  
  99. function surligneEntite(e) {
  100. var layer = e.target;
  101. layer.setStyle({
  102. weight: 2,
  103. color: 'white',
  104. dashArray: '',
  105. fillOpacity: 0.5
  106. });
  107. info.update(layer.feature.properties);
  108. }
  109. function resetStyleEntite(e) {
  110. var layer = e.target;
  111. poly.resetStyle(layer);
  112. info.update();
  113. }
  114. function zoomSurEntite(e) {
  115. var layer = e.target;
  116. map.fitBounds(layer.getBounds());
  117. }
  118.  
  119. // Fonction ajoutant des "listener" à la couche
  120. function ajouter_interaction(feature, layer) {
  121. layer.on({
  122. mouseover: surligneEntite,
  123. mouseout: resetStyleEntite,
  124. click: zoomSurEntite
  125. });
  126. }
  127.  
  128. // Importation d'une couche GeoJSON grâce au plugin "leaflet-ajax"
  129. // Utilisation de onEachFeature pour attribuer une fonction à chaque entité : https://leafletjs.com/reference-1.6.0.html#geojson-oneachfeature
  130. var poly = new L.GeoJSON.AJAX('Montreal_v0743.json', {style: style_par_entite, onEachFeature: ajouter_interaction});
  131. poly.addTo(map);
  132. // Ajout de la référence pour les données
  133. map.attributionControl.addAttribution('Données &copy; <a href="http://statisticscanada.ca/">Statistiques Canada</a>');
  134.  
  135. // Création d'un élément d'interface pour la légende
  136. var legend = L.control({position: 'bottomright'});
  137.  
  138. // Créons une palette une palette avec http://colorbrewer2.org, mais la classification est ici à notre discrétion
  139. var classes = [11440, 35008, 44971, 55979, 71808, 93440, 129024, 186368, 283904];
  140. var palette = ["#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#e6f598", "#abdda4", "#66c2a5", "#3288bd"];
  141.  
  142. legend.onAdd = function (map) {
  143. // création d'un élément <div>
  144. var div = L.DomUtil.create('div', 'info legend');
  145. var labels = [];
  146. // itération à travers les classes et création des icones sous forme de code HTML
  147. for (var i = 0; i < classes.length - 1; i++) {
  148. labels.push('<i style="background:' + palette[i] + '"></i>' + classes[i] + ' $ à ' + classes[i + 1] + " $<br>");
  149. }
  150. // injection du code HTML dans la page
  151. div.innerHTML = '<h4>Valeur en dollars par année</h4><hr>' + labels.join('<br>');
  152. return div;
  153. };
  154. // Ajout de la légende à la carte
  155. legend.addTo(map);
  156.  
  157. L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={votre_clef}', {
  158. // établir le niveau de zoom maximum
  159. maxZoom: 18,
  160. // 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
  161. attribution: 'Fond de carte &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
  162. '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
  163. 'via © <a href="https://www.mapbox.com/">Mapbox</a>',
  164. // Choisir le style de carte. pour utiliser un style personnalisé : 'nom_utilisateur/clef_du_style' à récupérer ici : studio.mapbox.com
  165. id: 'mapbox/light-v10',
  166. // VOTRE_CLEF doit être copiée de account.mapbox.com
  167. votre_clef: 'pk.eyJ1IjoiZ29ucm8iLCJhIjoiY2szZzdhYzVwMDMxMjNkbjZodzA2ZG8wOSJ9.w_VkhpdmD-1pmMYcabUQwg'
  168. }).addTo(map);
  169. </script>
  170. </body>
  171. </html>
Advertisement
Add Comment
Please, Sign In to add comment