app.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. 'use strict';
  2. import 'toolbar.module';
  3. import 'print.module';
  4. import 'query.module';
  5. import 'search.module';
  6. import 'add-layers.module';
  7. import 'measure.module';
  8. import 'permalink.module';
  9. import 'info.module';
  10. import 'datasource-selector.module';
  11. import 'sidebar.module';
  12. import 'draw.module';
  13. import View from 'ol/View';
  14. import { transform, transformExtent } from 'ol/proj';
  15. import { Tile, Group, Image as ImageLayer } from 'ol/layer';
  16. import { TileWMS, WMTS, OSM, XYZ, TileArcGISRest } from 'ol/source';
  17. import { Style, Icon, Stroke, Fill, Circle, Text } from 'ol/style';
  18. import VectorLayer from 'ol/layer/Vector';
  19. import './adjuster/adjuster.module';
  20. import nuts from 'nuts';
  21. var module = angular.module('hs', [
  22. 'hs.sidebar',
  23. 'hs.draw',
  24. 'hs.info',
  25. 'hs.toolbar',
  26. 'hs.layermanager',
  27. 'hs.query',
  28. 'hs.search', 'hs.print', 'hs.permalink',
  29. 'hs.geolocation',
  30. 'hs.datasource_selector',
  31. 'hs.save-map',
  32. 'hs.measure',
  33. 'hs.addLayers',
  34. 'pra.adjuster'
  35. ]);
  36. module.directive('hs', ['config', 'Core', function (config, Core) {
  37. return {
  38. template: Core.hslayersNgTemplate,
  39. link: function (scope, element) {
  40. Core.fullScreenMap(element);
  41. }
  42. };
  43. }]);
  44. function getHostname() {
  45. var url = window.location.href
  46. var urlArr = url.split("/");
  47. var domain = urlArr[2];
  48. return urlArr[0] + "//" + domain;
  49. };
  50. var stroke = new Stroke({
  51. color: '#3399CC',
  52. width: 0.25
  53. });
  54. function perc2color(perc) {
  55. perc = perc * 100;
  56. var r, g, b = 0;
  57. if(perc < 50) {
  58. r = 255;
  59. g = Math.round(5.1 * perc);
  60. }
  61. else {
  62. g = 255;
  63. r = Math.round(510 - 5.10 * perc);
  64. }
  65. var h = r * 0x10000 + g * 0x100 + b * 0x1;
  66. return `rgba(${r}, ${g}, ${b}, 0.7)`;
  67. }
  68. var styles = function(feature){
  69. if(isNaN(feature.get('total'))){
  70. return [new Style({
  71. fill: new Fill({
  72. color: '#FFF'
  73. }),
  74. stroke: stroke
  75. })]
  76. } else
  77. return [new Style({
  78. fill: new Fill({
  79. color: perc2color(feature.get('total'))
  80. }),
  81. stroke: stroke
  82. })]
  83. };
  84. var nuts2Layer = new VectorLayer({
  85. source: nuts.nuts2Source,
  86. visible: false,
  87. style: styles,
  88. title: 'NUTS2 regions'
  89. });
  90. var nuts3Layer = new VectorLayer({
  91. source: nuts.nuts3Source,
  92. visible: true,
  93. style: styles,
  94. title: 'NUTS3 regions',
  95. });
  96. nuts3Layer.set('hoveredKeys', ['NUTS_NAME', 'N_index', 'S_index', 'A_index', 'E_index', 'C_index', 'I_index']);
  97. nuts3Layer.set('hoveredKeysTranslations', {'NUTS_NAME': 'Name', 'N_index':'Natural', 'S_index': 'Social & Health', 'A_index': 'Anthropic', 'E_index': 'Economical', 'C_index': 'Cultural', 'I_index': 'Institutional'});
  98. module.value('config', {
  99. proxyPrefix: "/proxy/",
  100. default_layers: [
  101. new Tile({
  102. source: new OSM(),
  103. title: "Open street map",
  104. base: true,
  105. editor: { editable: false },
  106. removable: false
  107. }),
  108. nuts2Layer,
  109. nuts3Layer
  110. ],
  111. project_name: 'erra/map',
  112. default_view: new View({
  113. center: [2433348.3022471312, 7744501.813885343],
  114. zoom: 3.6,
  115. units: "m"
  116. }),
  117. advanced_form: true,
  118. datasources: [],
  119. hostname: {
  120. "default": {
  121. "title": "Default",
  122. "type": "default",
  123. "editable": false,
  124. "url": getHostname()
  125. }
  126. },
  127. panelWidths: {
  128. },
  129. panelsEnabled: {
  130. language: false,
  131. composition_browser: false,
  132. legend: false,
  133. ows: false,
  134. info: false,
  135. saveMap: false,
  136. draw: false
  137. }
  138. });
  139. module.controller('Main', ['$scope', 'Core', '$compile', 'hs.layout.service', 'pra.adjuster.service',
  140. function ($scope, Core, $compile, layoutService, adjusterService) {
  141. $scope.Core = Core;
  142. $scope.panelVisible = layoutService.panelVisible;
  143. layoutService.sidebarRight = false;
  144. //layoutService.sidebarToggleable = false;
  145. Core.singleDatasources = true;
  146. layoutService.sidebarButtons = true;
  147. layoutService.setDefaultPanel('adjuster');
  148. adjusterService.apply();
  149. $scope.$on("scope_loaded", function (event, args) {
  150. if (args == 'Sidebar') {
  151. var el = angular.element('<pra.adjuster hs.draggable ng-if="Core.exists(\'pra.adjuster\')" ng-show="panelVisible(\'adjuster\', this)"></pra.adjuster>')[0];
  152. document.querySelector('#panelplace').appendChild(el);
  153. $compile(el)($scope);
  154. var toolbar_button = angular.element('<div pra.adjuster.sidebar-btn></div>')[0];
  155. document.querySelector('.sidebar-list').appendChild(toolbar_button);
  156. $compile(toolbar_button)(event.targetScope);
  157. }
  158. })
  159. }
  160. ]);