app.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 { Tile } from 'ol/layer';
  15. import { OSM } from 'ol/source';
  16. import { Style, Stroke, Fill } from 'ol/style';
  17. import VectorLayer from 'ol/layer/Vector';
  18. import './adjuster/adjuster.module';
  19. import nuts from './nuts';
  20. const module = angular.module('hs', [
  21. 'hs.sidebar',
  22. 'hs.draw',
  23. 'hs.info',
  24. 'hs.toolbar',
  25. 'hs.layermanager',
  26. 'hs.query',
  27. 'hs.search', 'hs.print', 'hs.permalink',
  28. 'hs.geolocation',
  29. 'hs.datasource_selector',
  30. 'hs.save-map',
  31. 'hs.measure',
  32. 'hs.addLayers',
  33. 'pra.adjuster'
  34. ]);
  35. module.directive('hs', ['config', 'Core', function (config, Core) {
  36. return {
  37. template: Core.hslayersNgTemplate,
  38. link: function (scope, element) {
  39. Core.fullScreenMap(element);
  40. }
  41. };
  42. }]);
  43. function getHostname () {
  44. const url = window.location.href;
  45. const urlArr = url.split('/');
  46. const domain = urlArr[2];
  47. return urlArr[0] + '//' + domain;
  48. };
  49. const stroke = new Stroke({
  50. color: '#3399CC',
  51. width: 0.25
  52. });
  53. function perc2color (perc) {
  54. perc = perc * 100;
  55. let r; let g; const b = 0;
  56. if (perc < 50) {
  57. r = 255;
  58. g = Math.round(5.1 * perc);
  59. } else {
  60. g = 255;
  61. r = Math.round(510 - 5.10 * perc);
  62. }
  63. // eslint-disable-next-line no-unused-vars
  64. const h = r * 0x10000 + g * 0x100 + b * 0x1;
  65. return `rgba(${r}, ${g}, ${b}, 0.7)`;
  66. }
  67. const styles = function (feature) {
  68. if (isNaN(feature.get('total'))) {
  69. return [new Style({
  70. fill: new Fill({
  71. color: '#FFF'
  72. }),
  73. stroke: stroke
  74. })];
  75. } else {
  76. return [new Style({
  77. fill: new Fill({
  78. color: perc2color(feature.get('total'))
  79. }),
  80. stroke: stroke
  81. })];
  82. }
  83. };
  84. const nuts2Layer = new VectorLayer({
  85. source: nuts.nuts2Source,
  86. visible: false,
  87. style: styles,
  88. title: 'NUTS2 regions'
  89. });
  90. const nuts3Layer = new VectorLayer({
  91. source: nuts.nuts3Source,
  92. visible: true,
  93. style: styles,
  94. title: 'NUTS3 regions'
  95. });
  96. nuts3Layer.set('hoveredKeys', ['NUTS_NAME', 'totalForHumans', 'Social & Human', 'Anthropic', 'Institutional', 'Economical', 'Natural', 'Cultural']);
  97. nuts3Layer.set('hoveredKeysTranslations', { NUTS_NAME: 'Name', totalForHumans: 'Calculated score' });
  98. module.value('config', {
  99. proxyPrefix: '../8085/',
  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. searchProvider: (q) => {
  139. return `/app/jupyter-test/8085/search/?q=${q}`;
  140. }
  141. });
  142. module.controller('Main', ['$scope', 'Core', '$compile', 'hs.layout.service', 'pra.adjuster.service',
  143. function ($scope, Core, $compile, layoutService, adjusterService) {
  144. $scope.Core = Core;
  145. $scope.panelVisible = layoutService.panelVisible;
  146. layoutService.sidebarRight = false;
  147. // layoutService.sidebarToggleable = false;
  148. Core.singleDatasources = true;
  149. layoutService.sidebarButtons = true;
  150. layoutService.setDefaultPanel('adjuster');
  151. $scope.$on('scope_loaded', function (event, args) {
  152. // eslint-disable-next-line eqeqeq
  153. if (args == 'Sidebar') {
  154. const el = angular.element('<pra.adjuster hs.draggable ng-if="Core.exists(\'pra.adjuster\')" ng-show="panelVisible(\'adjuster\', this)"></pra.adjuster>')[0];
  155. layoutService.panelListElement.appendChild(el);
  156. $compile(el)($scope);
  157. const toolbarButton = angular.element('<div pra.adjuster.sidebar-btn></div>')[0];
  158. layoutService.sidebarListElement.appendChild(toolbarButton);
  159. $compile(toolbarButton)(event.targetScope);
  160. }
  161. });
  162. }
  163. ]);