Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

178 linhas
6.0KB

  1. {% load static %}
  2. <html>
  3. <head>
  4. <title>Bloommap</title>
  5. <link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
  6. <link rel="stylesheet" href="{% static 'map/index.css' %}">
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
  8. integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
  9. crossorigin=""/>
  10. <script src="https://unpkg.com/leaflet@1.5.1/dist/leaflet.js"
  11. integrity="sha512-GffPMF3RvMeYyc1LWMHtK8EbPv0iNZ8/oTtHPx9/cc2ILxQ+u905qIwdpULaqDkyBKgOaB57QTMg7ztg8Jm2Og=="
  12. crossorigin=""></script>
  13. <script src="{% static 'map/mapsync.js' %}"></script>
  14. </head>
  15. <body>
  16. <div id="map1"></div>
  17. <div id="map2"></div>
  18. <div style="pointer-events: none; position: absolute; top: 30px; right: 40px; z-index: 1000">2019</div>
  19. <div style="pointer-events: none; position: absolute; top: 310px; right: 40px; z-index: 1001">2029</div>
  20. <div class="slidecontainer">
  21. <input type="range" min="1" max="365" value="180" class="slider" id="myRange"
  22. oninput="updateMap(this.value)">
  23. </div>
  24. <p id="p_date"></p>
  25. <script>
  26. var p_date = document.getElementById("p_date");
  27. var map1 = L.map('map1').setView([49.4093524, 8.6931736], 15);
  28. var map2 = L.map('map2').setView([49.4093524, 8.6931736], 15);
  29. map1.sync(map2);
  30. map2.sync(map1);
  31. var tile = "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png "
  32. //var layer1 = L.tileLayer(tile, {
  33. // attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
  34. //}).addTo(map1);
  35. //
  36. //var layer2 = L.tileLayer(tile, {
  37. // attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
  38. //}).addTo(map2);
  39. var layer1 = L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
  40. attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
  41. maxZoom: 18,
  42. id: 'mapbox.streets',
  43. accessToken: 'pk.eyJ1IjoicG9zdGZsYXYiLCJhIjoiY2syN29xZHVpMnlzcDNtbXZkN2tlYWdhaSJ9.Th5tmsyOlPKoogGrOQrMNA'
  44. });
  45. var layer2 = L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
  46. attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
  47. maxZoom: 18,
  48. id: 'mapbox.streets',
  49. accessToken: 'pk.eyJ1IjoicG9zdGZsYXYiLCJhIjoiY2syN29xZHVpMnlzcDNtbXZkN2tlYWdhaSJ9.Th5tmsyOlPKoogGrOQrMNA'
  50. });
  51. layer1.addTo(map1);
  52. layer2.addTo(map2);
  53. function mk_not_bloom_icon(label) {
  54. return new L.DivIcon({
  55. className: 'no-bloom-icon',
  56. html: '<img class="no-bloom-icon" src="{% static 'map/tree_not_blooming.png' %}"/>' +
  57. '<span>' + label + '</span>',
  58. iconAnchor: [15, 30]
  59. });
  60. }
  61. function mk_bloom_icon(label) {
  62. return new L.DivIcon({
  63. className: 'bloom-icon',
  64. html: '<img class="no-bloom-icon" src="{% static 'map/tree_blooming.png' %}"/>' +
  65. '<span>' + label + '</span>',
  66. iconAnchor: [15, 30]
  67. });
  68. }
  69. //var not_bloom_icon = L.icon({
  70. // iconUrl: 'tree_not_blooming.png',
  71. //
  72. // iconSize: [40, 40], // size of the icon
  73. // shadowSize: [0, 0], // size of the shadow
  74. // iconAnchor: [20, 40], // point of the icon which will correspond to marker's location
  75. // shadowAnchor: [4, 62], // the same for the shadow
  76. // popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
  77. //});
  78. //var bloom_icon = L.icon({
  79. // iconUrl: 'tree_blooming.png',
  80. //
  81. // iconSize: [40, 40], // size of the icon
  82. // shadowSize: [0, 0], // size of the shadow
  83. // iconAnchor: [20, 40], // point of the icon which will correspond to marker's location
  84. // shadowAnchor: [4, 62], // the same for the shadow
  85. // popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
  86. //});
  87. class Tree {
  88. constructor(name, bloom_start, xcoord, ycoord) {
  89. this.name = name;
  90. this.bloom_start = bloom_start;
  91. this.marker = L.marker([xcoord, ycoord],
  92. {icon: mk_not_bloom_icon(this.name)});
  93. this.blooming = false;
  94. }
  95. update(dayno) {
  96. if ((dayno < this.bloom_start || dayno >= this.bloom_start + 14)
  97. && this.blooming) {
  98. this.marker.setIcon(mk_not_bloom_icon(this.name));
  99. this.blooming = false;
  100. } else if (dayno >= this.bloom_start
  101. && dayno < this.bloom_start + 14
  102. && !this.blooming) {
  103. this.marker.setIcon(mk_bloom_icon(this.name));
  104. this.blooming = true;
  105. }
  106. }
  107. }
  108. var treesFromJSON = {{ trees|safe }}["trees"];
  109. var trees_1 = [];
  110. for (var i = 0; i < treesFromJSON.length; i++) {
  111. let raw = treesFromJSON[i];
  112. let tree = new Tree(raw["name"], raw["bloom_start"],
  113. raw["latitude"], raw["longitude"]);
  114. trees_1.push(tree);
  115. }
  116. var trees_2 = [];
  117. for (var i = 0; i < treesFromJSON.length; i++) {
  118. let raw = treesFromJSON[i];
  119. let tree = new Tree(raw["name"], raw["bloom_start"] + 20,
  120. raw["latitude"], raw["longitude"]);
  121. trees_2.push(tree);
  122. }
  123. function updateMap(value) {
  124. for (var i = 0; i < trees_1.length; i++) {
  125. trees_1[i].update(value);
  126. }
  127. for (var i = 0; i < trees_2.length; i++) {
  128. trees_2[i].update(value);
  129. }
  130. p_date.innerHTML = "Date: " + dateFromDay(value);
  131. }
  132. function dateFromDay(dayno) {
  133. var date = new Date(2019, 0); // initialize a date in `year-01-01`
  134. var date2 = new Date(date.setDate(dayno));
  135. return date2.getMonth() + 1 + "-" + date2.getDate();
  136. }
  137. var cities1 = L.layerGroup(trees_1.map(t => t.marker));
  138. var cities2 = L.layerGroup(trees_2.map(t => t.marker));
  139. cities1.addTo(map1);
  140. cities2.addTo(map2);
  141. </script>
  142. </body>
  143. </html>