Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title>DIVI Map</title>
  5.  
  6. {% include 'libraries.html' %}
  7.  
  8. <!-- LEAFLET -->
  9. <link rel="stylesheet" href="https://npmcdn.com/leaflet@0.7.7/dist/leaflet.css" />
  10. <link rel="stylesheet" href="../static/lib/orderlayers/css/leaflet.control.orderlayers.css">
  11. <script src="https://npmcdn.com/leaflet@0.7.7/dist/leaflet.js"></script>
  12. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-dateFormat/1.0/jquery.dateFormat.min.js"></script>
  13. <script src="../static/js/L.TileLayer.DVT.js"></script>
  14. <script src="../static/lib/orderlayers/leaflet.control.orderlayers.js"></script>
  15.  
  16. <!-- GOOGLE FONT -->
  17. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400italic,600,600italic,800,800italic">
  18. <link href='https://fonts.googleapis.com/css?family=Oswald:400,700&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
  19.  
  20. </head>
  21. <style>
  22. #map {
  23. height: 100vh;
  24. width: 80%;
  25. float: right;
  26. display: inline-block;
  27. box-shadow: 0 1px 5px rgba(0,0,0,0.3);
  28. }
  29. #sidebar {
  30. padding: 15px;
  31. height : 100vh;
  32. width: 20%;
  33. display: inline-block;
  34. }
  35. .leaflet-popup-content {
  36. max-height:500px;
  37. overflow: auto;
  38. overflow-x: hidden;
  39. }
  40. canvas.leaflet-tile {
  41. visibility: visible;
  42. opacity: 1 !important;
  43. }
  44.  
  45. .leaflet-container {
  46. cursor: pointer;
  47. }
  48. .leaflet-top .leaflet-control {
  49. margin-top: 50px;
  50. }
  51. .hamburger {
  52. box-shadow: 0 1px 5px rgba(0,0,0,0.65);
  53. border-radius: 4px;
  54. width: 26px;
  55. height: 26px;
  56. z-index: 9999;
  57. position: absolute;
  58. top: 10px;
  59. left: 10px
  60. }
  61. .card {
  62. margin-top: 20px;
  63. padding:30px 20px 20px 20px;
  64. box-shadow: 0 1px 5px rgba(0,0,0,0.3);
  65. }
  66. table, td {
  67. border: 1px solid black;
  68. border-collapse: collapse;
  69. }
  70. td {
  71. padding: 5px;
  72. font-size: 12px;
  73. }
  74. </style>
  75. <body>
  76. <div id="sidebar">
  77. <p align="center"><img src="{{url_for('static',filename='img/logodivi.png')}}" height="60px" alt="MVP Ready"></p>
  78. <!--
  79. <p>Data stworzenia: <span data-bind="text: created_at().slice(0,10)"></span></p>
  80. <p>Data wygaśnięcia: <span data-bind="text: valid_to().slice(0,10)"></span></p>
  81. -->
  82. <div class="card">
  83. <h3 data-bind="text: title"></h3>
  84. <p data-bind="text: description"></p>
  85. </div>
  86. </div>
  87. <div id="map">
  88. <div class="leaflet-bar" data-bind="click: sidebarToggle"><a class="leaflet-bar hamburger"><i id="icon" class="fa fa-chevron-left"></i></a></div>
  89. </div>
  90. <script>
  91. var map;
  92. function maplinkModel() {
  93. var self = this;
  94.  
  95. var token = '{{ token }}';
  96. var mlid = '{{ mlid }}'
  97. var zoom_lvl = '{{ zoom_lvl }}';
  98. var center_point = '{{ center_point }}';
  99. center_point = center_point.replace(/\s+/g, '').split(',');
  100.  
  101. self.title = ko.observable('{{ title }}');
  102. self.description = ko.observable('{{ description }}');
  103. self.created_at = ko.observable('{{ created_at }}');
  104. self.valid_to = ko.observable('{{ valid_to }}');
  105.  
  106. self.currentBasemaps = ko.observableArray();
  107. self.currentLayers = ko.observableArray();
  108. self.currentWMSLayers = ko.observableArray();
  109. self.projectLayers = ko.observableArray();
  110.  
  111. map = L.map('map').setView([center_point[1], center_point[0]], zoom_lvl);
  112. var osm_basemap = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{attribution: '&copy; <a href="http://osm.org/copyright" title="OpenStreetMap" target="_blank">OpenStreetMap</a>', noWrap: true}).addTo(map);
  113. var base = {"OSM": osm_basemap};
  114. var overlay = {};
  115.  
  116. self.getBasemaps = function(){
  117. return $.getJSON('../link_basemaps/'+mlid, function(r){
  118. self.currentBasemaps(r.data)
  119. self.currentBasemaps().forEach(function(layer){
  120. var baseLayer = L.tileLayer(layer.url,{attribution: '&copy; <a href="http://osm.org/copyright" title="OpenStreetMap" target="_blank">OpenStreetMap</a>'})
  121. base[layer.name] = baseLayer
  122. })
  123. })
  124. };
  125. self.getLayers = function(){
  126. return $.getJSON('../link_layers/'+mlid, function(r){
  127. self.currentLayers(r.data)
  128. self.currentLayers().forEach(function(layer){
  129. var tLayer = undefined;
  130. if(layer['data_type'] == 'raster') {
  131. tLayer = L.tileLayer('../tiles/'+layer.id_projects+'/'+layer.id+'/{z}/{x}/{y}.png?token='+token,{});
  132. }
  133. else {
  134. tLayer = new L.TileLayer.DVT('../dvt/'+layer.id+'/{z}/{x}/{y}.json?token='+token,{
  135. style: layer.visual
  136. })
  137. }
  138. overlay[layer.name] = tLayer
  139. tLayer.addTo(map);
  140. })
  141. })
  142. };
  143. self.getWMSLayers = function(){
  144. return $.getJSON('../link_services/'+mlid, function(r){
  145. self.currentWMSLayers(r.data)
  146. self.currentWMSLayers().forEach(function(layer){
  147. var WMSLayer = L.tileLayer.wms(layer.url, {layers: layer.layer, format: layer.format, transparent: true})
  148. overlay[layer.name] = WMSLayer
  149. WMSLayer.addTo(map)
  150. //self.updateSwitcher()
  151. })
  152. })
  153. };
  154.  
  155. self.updateSwitcher = function(){
  156. layerControl = L.control.orderlayers(base, overlay, {position: 'bottomright', collapsed:true, order: 'qgis', title: ' '}).addTo(map);
  157. }
  158.  
  159. map.on('click', function(e) {
  160. map.eachLayer(function(layer){
  161. if(layer instanceof L.TileLayer.DVT) {
  162. var featuresFound = layer.featureAt(e);
  163. var attributes = [];
  164. for(var f in featuresFound) {
  165. layer.unhighlightAll()
  166. layer.highlightFeature(f)
  167. for(var attr in featuresFound[f]['properties']) {
  168. attributes.push([attr,featuresFound[f]['properties'][attr]])
  169.  
  170. }
  171. }
  172. if(attributes.length) {
  173. var popup = attributes.map(function(elem){
  174. return '<tr><td>'+elem[0]+'</td><td>'+elem[1]+'</td></tr>'
  175. })
  176. var popupContent = '<table><tr><td><strong>nazwa atrybutu</strong></td><td><strong>wartość</strong></td></tr>';
  177. popup.forEach(function(data){
  178. popupContent += data
  179. })
  180. popupContent += '</table>'
  181. L.popup().setLatLng([e.latlng.lat, e.latlng.lng]).setContent(popupContent).openOn(map)
  182. }
  183. }
  184. })
  185. });
  186.  
  187. self.sidebarToggle = function(){
  188. if($('#sidebar').css('width') == '0px'){
  189. $('#map').css('width','80%')
  190. $('#sidebar').css('width','20%')
  191. $('#sidebar').css('padding','15px')
  192. $('#icon').attr('class', 'fa fa-chevron-left')
  193. }else{
  194. $('#sidebar').css('padding','0')
  195. $('#sidebar').css('width','0%')
  196. $('#map').css('width','100%')
  197. $('#icon').attr('class', 'fa fa-chevron-right')
  198. }
  199. map.invalidateSize()
  200. }
  201.  
  202. $.when(self.getBasemaps(),self.getLayers(),self.getWMSLayers()).done(function(a,b,c){
  203. self.updateSwitcher();
  204. })
  205.  
  206. }
  207. var vm = new maplinkModel();
  208. ko.applyBindings(vm);
  209.  
  210. </script>
  211. </body>
  212. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement