Croatian WMS layers

Displays layers from Croatian WMS services in WME

目前为 2024-12-04 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Croatian WMS layers
  3. // @namespace https://greasyfork.org/en/users/1366579-js55ct
  4. // @description Displays layers from Croatian WMS services in WME
  5. // @version 2024.12.04.04
  6. // @author JS55CT
  7. // @match https://*.waze.com/*/editor*
  8. // @match https://*.waze.com/editor
  9. // @exclude https://*.waze.com/user/editor*
  10. // @grant unsafeWindow
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. /* Scripts modified from Czech WMS layers (https://greasyfork.org/cs/scripts/35069-czech-wms-layers) orgianl authors: petrjanik, d2-mac, MajkiiTelini */
  15.  
  16. (function () {
  17. var W;
  18. var OL;
  19. var I18n;
  20. var ZIndexes = {};
  21.  
  22. const scriptMetadata = GM_info.script;
  23. const scriptName = scriptMetadata.name;
  24. const storageName = scriptName.replace(/ /g, "");
  25. var WMSLayerTogglers = {};
  26. const debug = false;
  27.  
  28. function init(e) {
  29. if (debug) console.log(`${scriptName}: Croatian WMS layers Script Started......`);
  30.  
  31. W = unsafeWindow.W;
  32. OL = unsafeWindow.OpenLayers;
  33. I18n = unsafeWindow.I18n;
  34.  
  35. ZIndexes.base = W.map.olMap.Z_INDEX_BASE.Overlay + 10;
  36. ZIndexes.overlay = W.map.olMap.Z_INDEX_BASE.Overlay + 150;
  37. ZIndexes.popup = W.map.olMap.Z_INDEX_BASE.Popup + 150;
  38.  
  39. var groupTogglerHRV = addGroupToggler(false, "layer-switcher-group_hok", "WMS Croatia");
  40.  
  41. // where .params.VERSION >= "1.3.0" use "CRS:" else use "SRS:"" for the Coordinate System Value
  42. // New Croatian WMS service definition
  43.  
  44. var service_wms_dgu_hok = {
  45. type: "WMS",
  46. url: "https://geoportal.dgu.hr/wms",
  47. params: {
  48. SERVICE: "WMS",
  49. VERSION: "1.3.0",
  50. REQUEST: "GetMap",
  51. FORMAT: "image/png",
  52. TRANSPARENT: "true",
  53. LAYERS: "HOK",
  54. CRS: "EPSG:3765",
  55. STYLES: "raster",
  56. },
  57. attribution: "WMS Državne geodetske uprave RH - Hrvatska osnovna karta",
  58. tileSize: new OL.Size(512, 512),
  59. };
  60.  
  61. var service_wms_dgu_tk25 = {
  62. type: "WMS",
  63. url: "https://geoportal.dgu.hr/wms",
  64. params: {
  65. SERVICE: "WMS",
  66. VERSION: "1.3.0",
  67. REQUEST: "GetMap",
  68. FORMAT: "image/png",
  69. TRANSPARENT: "true",
  70. LAYERS: "TK25",
  71. CRS: "EPSG:3765",
  72. STYLES: "raster",
  73. },
  74. attribution: "WMS Državne geodetske uprave RH - Topografska karta 1:25000",
  75. tileSize: new OL.Size(512, 512),
  76. };
  77.  
  78. var service_wms_dgu_tk25 = {
  79. type: "WMS",
  80. url: "https://geoportal.dgu.hr/wms",
  81. params: {
  82. SERVICE: "WMS",
  83. VERSION: "1.3.0",
  84. REQUEST: "GetMap",
  85. FORMAT: "image/png",
  86. TRANSPARENT: "true",
  87. LAYERS: "TK25",
  88. CRS: "EPSG:3765",
  89. STYLES: "raster",
  90. },
  91. attribution: "WMS Državne geodetske uprave RH - Topografska karta 1:25000",
  92. tileSize: new OL.Size(512, 512),
  93. };
  94.  
  95. var service_katastarska_opcina = {
  96. type: "WMS",
  97. url: "http://geoportal.dgu.hr/services/auth/rpj/ows?SERVICE=WMS&authKey=c24b3b67-05a2-4178-9cd4-f2e9cdb5ea59&",
  98. params: {
  99. SERVICE: "WMS",
  100. VERSION: "1.3.0",
  101. REQUEST: "GetMap",
  102. FORMAT: "image/png",
  103. TRANSPARENT: "true",
  104. LAYERS: "katastarska_opcina",
  105. CRS: "EPSG:3857",
  106. STYLES: "rpj_katastarska_opcina",
  107. },
  108. attribution: "WMS servis Državne geodetske uprave - Katastarska Općina",
  109. comment: "Katastralne općine Hrvatske",
  110. };
  111.  
  112. var serviceCadastralZoning = {
  113. type: "WMS",
  114. url: "https://api.uredjenazemlja.hr/services/inspire/cp_wms/wms",
  115. params: {
  116. SERVICE: "WMS",
  117. VERSION: "1.3.0",
  118. REQUEST: "GetMap",
  119. FORMAT: "image/png",
  120. TRANSPARENT: "true",
  121. LAYERS: "CP.CadastralZoning",
  122. CRS: "EPSG:3765",
  123. STYLES: "CP.CadastralZoning.Default",
  124. },
  125. attribution: "Katastarske čestice i katastarske općine - WMS",
  126. tileSize: new OL.Size(512, 512),
  127. };
  128.  
  129. var serviceCadastralParcel = {
  130. type: "WMS",
  131. url: "https://api.uredjenazemlja.hr/services/inspire/cp_wms/wms",
  132. params: {
  133. SERVICE: "WMS",
  134. VERSION: "1.3.0",
  135. REQUEST: "GetMap",
  136. FORMAT: "image/png",
  137. TRANSPARENT: "true",
  138. LAYERS: "CP.CadastralParcel",
  139. CRS: "EPSG:3765",
  140. STYLES: "CP.CadastralParcel.Default",
  141. },
  142. attribution: "Katastarske čestice i katastarske općine - WMS",
  143. tileSize: new OL.Size(512, 512),
  144. };
  145.  
  146. //House Numbers
  147. var service_kucni_broj = {
  148. type: "WMS",
  149. url: "http://geoportal.dgu.hr/services/auth/rpj/ows?SERVICE=WMS&authKey=c24b3b67-05a2-4178-9cd4-f2e9cdb5ea59&",
  150. params: {
  151. SERVICE: "WMS",
  152. VERSION: "1.3.0",
  153. REQUEST: "GetMap",
  154. FORMAT: "image/png",
  155. TRANSPARENT: "true",
  156. LAYERS: "kucni_broj",
  157. CRS: "EPSG:3857",
  158. STYLES: "kucni_broj",
  159. },
  160. attribution: "WMS servis Državne geodetske uprave - Kucni Broj",
  161. comment: "House numbers layer",
  162. };
  163.  
  164. // Streets
  165. var service_ulica = {
  166. type: "WMS",
  167. url: "http://geoportal.dgu.hr/services/auth/rpj/ows?SERVICE=WMS&authKey=c24b3b67-05a2-4178-9cd4-f2e9cdb5ea59&",
  168. params: {
  169. SERVICE: "WMS",
  170. VERSION: "1.3.0",
  171. REQUEST: "GetMap",
  172. FORMAT: "image/png",
  173. TRANSPARENT: "true",
  174. LAYERS: "ulica",
  175. CRS: "EPSG:3857",
  176. STYLES: "ulica",
  177. },
  178. attribution: "WMS servis Državne geodetske uprave - ulica",
  179. comment: "Street Names",
  180. };
  181.  
  182. var service_wms_orthophoto_2022 = {
  183. type: "WMS",
  184. url: "https://geoportal.dgu.hr/services/inspire/orthophoto_2022/ows",
  185. params: {
  186. SERVICE: "WMS",
  187. VERSION: "1.3.0",
  188. REQUEST: "GetMap",
  189. FORMAT: "image/png",
  190. TRANSPARENT: "true",
  191. LAYERS: "OI.OrthoimageCoverage",
  192. CRS: "EPSG:3765",
  193. STYLES: "raster",
  194. },
  195. attribution: "Digitalni ortofoto u mjerilu 1:5000_2022. godina",
  196. tileSize: new OL.Size(512, 512),
  197. };
  198.  
  199. var service_wms_orthophoto_2021 = {
  200. type: "WMS",
  201. url: "https://geoportal.dgu.hr/services/inspire/orthophoto_2021/ows",
  202. params: {
  203. SERVICE: "WMS",
  204. VERSION: "1.3.0",
  205. REQUEST: "GetMap",
  206. FORMAT: "image/png",
  207. TRANSPARENT: "true",
  208. LAYERS: "OI.OrthoimageCoverage",
  209. CRS: "EPSG:3765",
  210. STYLES: "raster",
  211. },
  212. attribution: "Digitalni ortofoto u mjerilu 1:5000_2021. godina",
  213. tileSize: new OL.Size(512, 512),
  214. };
  215.  
  216. var service_wms_orthophoto_2020 = {
  217. type: "WMS",
  218. url: "https://geoportal.dgu.hr/services/inspire/orthophoto_2020/ows",
  219. params: {
  220. SERVICE: "WMS",
  221. VERSION: "1.3.0",
  222. REQUEST: "GetMap",
  223. FORMAT: "image/png",
  224. TRANSPARENT: "true",
  225. LAYERS: "OI.OrthoimageCoverage",
  226. CRS: "EPSG:3765",
  227. STYLES: "raster",
  228. },
  229. attribution: "Digitalni ortofoto u mjerilu 1:5000_2020. godina",
  230. tileSize: new OL.Size(512, 512),
  231. };
  232.  
  233. var service_wms_orthophoto_2014_2016 = {
  234. type: "WMS",
  235. url: "https://geoportal.dgu.hr/services/inspire/orthophoto_2014-2016/wms",
  236. params: {
  237. SERVICE: "WMS",
  238. VERSION: "1.3.0",
  239. REQUEST: "GetMap",
  240. FORMAT: "image/png",
  241. TRANSPARENT: "true",
  242. LAYERS: "OI.OrthoImagery",
  243. CRS: "EPSG:3765",
  244. STYLES: "raster",
  245. },
  246. attribution: "GeoPortal DGU - Digitalni ortofoto 2014-2016",
  247. tileSize: new OL.Size(512, 512),
  248. };
  249.  
  250. var service_wms_orthophoto_Zagreb = {
  251. type: "WMS",
  252. url: "https://geoportal.dgu.hr/services/inspire/orthophoto_1000/wms",
  253. params: {
  254. SERVICE: "WMS",
  255. VERSION: "1.3.0",
  256. REQUEST: "GetMap",
  257. FORMAT: "image/png",
  258. TRANSPARENT: "true",
  259. LAYERS: "OI.OrthoimageCoverage",
  260. CRS: "EPSG:3765",
  261. STYLES: "OI.OrthoimageCoverage.Default",
  262. },
  263. attribution: "GeoPortal DGU - Digitalni ortofoto 2014-2016",
  264. tileSize: new OL.Size(512, 512),
  265. };
  266.  
  267. // Add WMS layers
  268. WMSLayerTogglers.wms_dgu_hok = addLayerToggler(groupTogglerHRV, "Base Map (HOK)", [addNewLayer("Croatia:wms_dgu_hok", service_wms_dgu_hok, ZIndexes.base, 0.6)]);
  269. WMSLayerTogglers.wms_dgu_tk25 = addLayerToggler(groupTogglerHRV, "Base Map (Topographic)", [addNewLayer("Croatia:wms_dgu_tk25", service_wms_dgu_tk25, ZIndexes.base, 0.6)]);
  270. WMSLayerTogglers.wms_katastarska_opcina = addLayerToggler(groupTogglerHRV, "Općina (Municipality)", [addNewLayer("Croatia:wms_katastarska_opcina", service_katastarska_opcina, ZIndexes.overlay, 1.0)]); //notworking
  271. WMSLayerTogglers.wms_cadastralZoning = addLayerToggler(groupTogglerHRV, "Cadastral Zoning", [addNewLayer("Croatia:wms_cadastralZoning", serviceCadastralZoning, ZIndexes.overlay, 1.0)]);
  272. WMSLayerTogglers.wms_cadastralParcels = addLayerToggler(groupTogglerHRV, "Cadastral Parcels", [addNewLayer("Croatia:wms_cadastralParcels", serviceCadastralParcel, ZIndexes.overlay, 1.0)]);
  273. WMSLayerTogglers.wms_ulica = addLayerToggler(groupTogglerHRV, "Ulica (Street Name)", [addNewLayer("Croatia:wms_ulica", service_ulica, ZIndexes.overlay, 1.0)]);
  274. WMSLayerTogglers.wms_kucni_broj = addLayerToggler(groupTogglerHRV, "Kucni Broj (House #)", [addNewLayer("Croatia:wms_kucni_broj", service_kucni_broj, ZIndexes.overlay, 1.0)]);
  275. WMSLayerTogglers.wms_orthophoto_2022 = addLayerToggler(groupTogglerHRV, "Orthophoto 2022", [addNewLayer("Croatia:wms_orthophoto_2022", service_wms_orthophoto_2022, ZIndexes.base, 0.6)]);
  276. WMSLayerTogglers.wms_orthophoto_2021 = addLayerToggler(groupTogglerHRV, "Orthophoto 2021", [addNewLayer("Croatia:wms_orthophoto_2021", service_wms_orthophoto_2021, ZIndexes.base, 0.6)]);
  277. WMSLayerTogglers.wms_orthophoto_2020 = addLayerToggler(groupTogglerHRV, "Orthophoto 2020", [addNewLayer("Croatia:wms_orthophoto_2020", service_wms_orthophoto_2020, ZIndexes.base, 0.6)]);
  278. WMSLayerTogglers.wms_orthophoto_2014_2016 = addLayerToggler(groupTogglerHRV, "Orthophoto 2014-16", [addNewLayer("Croatia:wms_orthophoto_2014_2016", service_wms_orthophoto_2014_2016, ZIndexes.base, 0.6)]);
  279. WMSLayerTogglers.wms_orthophoto_Zagreb = addLayerToggler(groupTogglerHRV, "Orthophoto ( Zagreb & Krapina-Zagorje)", [addNewLayer("Croatia:wms_orthophoto_Zagreb", service_wms_orthophoto_Zagreb, ZIndexes.base, 0.6)]);
  280.  
  281. if (debug) console.log(`${scriptName}: WMSLayerTogglers`, WMSLayerTogglers);
  282.  
  283. setZOrdering(WMSLayerTogglers);
  284. W.map.events.register("addlayer", null, setZOrdering(WMSLayerTogglers));
  285. W.map.events.register("removelayer", null, setZOrdering(WMSLayerTogglers));
  286.  
  287. if (localStorage[storageName]) {
  288. let JSONStorageOptions = JSON.parse(localStorage[storageName]);
  289.  
  290. if (debug) console.log(`${scriptName}: Loading Layer and Group States from Storage`);
  291.  
  292. // Load individual layer toggler states
  293. for (let key in WMSLayerTogglers) {
  294. if (JSONStorageOptions[key]) {
  295. const checkboxElement = document.getElementById(WMSLayerTogglers[key].htmlItem);
  296. if (checkboxElement) {
  297. if (JSONStorageOptions[key].checked !== checkboxElement.checked) {
  298. checkboxElement.click(); // Ensure the visual state matches the saved state
  299. }
  300. } else {
  301. console.warn(`${scriptName}: Checkbox with ID ${WMSLayerTogglers[key].htmlItem} not found.`);
  302. }
  303. }
  304. }
  305.  
  306. /************************ Need to Fix this when I have time. ******************
  307. // Load group toggler states
  308. document.querySelectorAll('wz-toggle-switch').forEach(groupToggler => {
  309. const state = JSONStorageOptions[groupToggler.id];
  310. if (state && state.checked !== groupToggler.checked) {
  311. groupToggler.click(); // Ensure the visual state matches the saved state
  312. } else {
  313. console.warn(`${scriptName}: Group toggler with ID ${groupToggler.id} not found in storage.`);
  314. }
  315. });
  316. ***********************************************************************************/
  317. } else {
  318. localStorage[storageName] = {};
  319. }
  320.  
  321. window.addEventListener("beforeunload", saveWMSLayersOptions, false);
  322. if (debug) console.log(`${scriptName}: Croatian WMS layers Script Loaded`);
  323. }
  324.  
  325. function saveWMSLayersOptions() {
  326. const storageObject = {};
  327.  
  328. // Example for individual layer togglers using WMSLayerTogglers object
  329. for (let key in WMSLayerTogglers) {
  330. const element = document.getElementById(WMSLayerTogglers[key].htmlItem);
  331. if (element) {
  332. storageObject[key] = { checked: element.checked };
  333. }
  334. }
  335.  
  336. /*********************** NEED TO FIX THIS WHEN I HAVE TIME ***************************
  337. // Save group toggler states
  338. const groupTogglers = document.querySelectorAll('wz-toggle-switch');
  339. groupTogglers.forEach((toggler) => {
  340. storageObject[toggler.id] = { checked: toggler.checked };
  341. });
  342. *****************************************************************************************/
  343.  
  344. // Save to local storage using the variable storageName
  345. if (typeof storageName !== "undefined") {
  346. localStorage[storageName] = JSON.stringify(storageObject);
  347. } else {
  348. console.error("storageName is not defined.");
  349. }
  350.  
  351. if (debug) console.log(`${scriptName}: Layer options saved....`);
  352. }
  353. /**********************************************************************************************
  354. OL.Layer.WMS(name (String), url (String), params (Object), options (Object, optional) )
  355.  
  356. params (Object): This object contains key-value pairs of parameters to send to the WMS service. Common parameters include:
  357. * LAYERS: Specifies the names of the layers you want to request from the WMS service.
  358. * TRANSPARENT: Usually set to "true" to request transparent images that can be overlaid on other layers.
  359. * FORMAT: The image format for the tiles, commonly "image/png" for transparency.
  360. * VERSION: The version of the WMS request protocol, such as "1.1.1" or "1.3.0".
  361. * STYLES: Defines styles to apply to layers, often an empty string if default styles are desired.
  362.  
  363. options (Object, optional): This optional object provides additional configuration options for the layer. Common options include:
  364. * opacity: Sets the opacity of the layer, typically between 0 (fully transparent) and 1 (fully opaque).
  365. * isBaseLayer: Boolean value indicating whether this layer is a base layer.
  366. * projection: Defines the spatial reference system for the layer.
  367. * tileSize: Specifies the size of the tile as an OL.Size object.
  368. * attribution: Provides attribution text for the layer, often displayed on the map to give credit to data providers.
  369. ***************************************************************************************************/
  370.  
  371. function addNewLayer(id, service, zIndex = 0, opacity = 1) {
  372. if (debug) console.log(`${scriptName}: addNewKayer() called for: ${id}`);
  373.  
  374. var newLayer = {};
  375.  
  376. // Determine if CRS or SRS should be used
  377. const wmsVersion = service.params.VERSION || "1.3.0"; // Default to 1.3.0 if not specified
  378. const coordinateSystemParam = wmsVersion >= "1.3.0" ? "CRS" : "SRS";
  379.  
  380. // Set the appropriate coordinate reference system
  381. const coordinateSystemValue = service.params[coordinateSystemParam] || "EPSG:3765"; // Default to EPSG:3765 for Croatia
  382.  
  383. newLayer.zIndex = zIndex == 0 ? ZIndexes.overlay : zIndex;
  384. newLayer.layer = new OL.Layer.WMS(
  385. id,
  386. service.url,
  387. {
  388. layers: service.params.LAYERS,
  389. transparent: service.params.TRANSPARENT || "true",
  390. format: service.params.FORMAT || "image/png",
  391. version: wmsVersion,
  392. [coordinateSystemParam]: coordinateSystemValue,
  393. styles: service.params.STYLES || "",
  394. },
  395. {
  396. opacity: opacity,
  397. tileSize: service.tileSize || new OL.Size(512, 512), // Use service-defined tile size if available
  398. isBaseLayer: false,
  399. visibility: true,
  400. transitionEffect: "resize",
  401. attribution: service.attribution,
  402. projection: new OL.Projection(coordinateSystemValue), //EPSG:3765 is specifically designed for use in Croatia.
  403. }
  404. );
  405.  
  406. if (debug) console.log(`${scriptName}: addNewKayer() newLayer:`, newLayer);
  407.  
  408. return newLayer;
  409. }
  410.  
  411. function addGroupToggler(isDefault, layerSwitcherGroupItemName, layerGroupVisibleName) {
  412. var group;
  413. if (isDefault === true) {
  414. group = document.getElementById(layerSwitcherGroupItemName).parentElement.parentElement;
  415. } else {
  416. var layerGroupsList = document.getElementsByClassName("list-unstyled togglers")[0];
  417. group = document.createElement("li");
  418. group.className = "group";
  419. var togglerContainer = document.createElement("div");
  420. togglerContainer.className = "layer-switcher-toggler-tree-category";
  421. var groupButton = document.createElement("wz-button");
  422. groupButton.color = "clear-icon";
  423. groupButton.size = "xs";
  424. var iCaretDown = document.createElement("i");
  425. iCaretDown.className = "toggle-category w-icon w-icon-caret-down";
  426. iCaretDown.dataset.groupId = layerSwitcherGroupItemName.replace("layer-switcher-", "").toUpperCase();
  427. var togglerSwitch = document.createElement("wz-toggle-switch");
  428. togglerSwitch.className = layerSwitcherGroupItemName + " hydrated";
  429. togglerSwitch.id = layerSwitcherGroupItemName;
  430. togglerSwitch.checked = true;
  431. var label = document.createElement("label");
  432. label.className = "label-text";
  433. label.htmlFor = togglerSwitch.id;
  434. var togglerChildrenList = document.createElement("ul");
  435. togglerChildrenList.className = "collapsible-" + layerSwitcherGroupItemName.replace("layer-switcher-", "").toUpperCase();
  436. label.appendChild(document.createTextNode(layerGroupVisibleName));
  437. groupButton.addEventListener("click", layerTogglerGroupMinimizerEventHandler(iCaretDown));
  438. togglerSwitch.addEventListener("click", layerTogglerGroupMinimizerEventHandler(iCaretDown));
  439. groupButton.appendChild(iCaretDown);
  440. togglerContainer.appendChild(groupButton);
  441. togglerContainer.appendChild(togglerSwitch);
  442. togglerContainer.appendChild(label);
  443. group.appendChild(togglerContainer);
  444. group.appendChild(togglerChildrenList);
  445. layerGroupsList.appendChild(group);
  446. }
  447.  
  448. if (debug) console.log(`${scriptName}: Group Toggler created for ${layerGroupVisibleName}`);
  449.  
  450. return group;
  451. }
  452.  
  453. function addLayerToggler(groupToggler, layerName, layerArray) {
  454. var layerToggler = {};
  455. layerToggler.layerName = layerName;
  456. var layerShortcut = layerName.replace(/ /g, "_").replace(".", "");
  457. layerToggler.htmlItem = "layer-switcher-item_" + layerShortcut;
  458. layerToggler.layerArray = layerArray;
  459. var layer_container = groupToggler.getElementsByTagName("UL")[0];
  460. var layerGroupCheckbox = groupToggler.getElementsByClassName("layer-switcher-toggler-tree-category")[0].getElementsByTagName("wz-toggle-switch")[0];
  461. var toggler = document.createElement("li");
  462. var togglerCheckbox = document.createElement("wz-checkbox");
  463. togglerCheckbox.id = layerToggler.htmlItem;
  464. togglerCheckbox.className = "hydrated";
  465. togglerCheckbox.appendChild(document.createTextNode(layerName));
  466. toggler.appendChild(togglerCheckbox);
  467. layer_container.appendChild(toggler);
  468. for (var i = 0; i < layerArray.length; i++) {
  469. togglerCheckbox.addEventListener("change", layerTogglerEventHandler(layerArray[i]));
  470. layerGroupCheckbox.addEventListener("change", layerTogglerGroupEventHandler(togglerCheckbox, layerArray[i]));
  471. layerArray[i].layer.name = layerName + (layerArray.length > 1 ? " " + i : "");
  472. }
  473. // REMOVING SHORT CUT KEY, THEY ARE NOT CURRENTLY WORKING
  474. //registerKeyShortcut("WMS: " + layerName, layerKeyShortcutEventHandler(layerGroupCheckbox, togglerCheckbox), layerShortcut);
  475.  
  476. if (debug) console.log(`${scriptName}: Layer Toggler created for ${layerName}`);
  477. return layerToggler;
  478. }
  479.  
  480. /***** REMOVING SHORT CUT KEY, THEY ARE NOT CURRENTLY WORKING **************
  481. function registerKeyShortcut(actionName, callback, keyName) {
  482. I18n.translations[I18n.locale].keyboard_shortcuts.groups.default.members[keyName] = actionName;
  483. W.accelerators.addAction(keyName, { group: "default" });
  484. W.accelerators.events.register(keyName, null, callback);
  485. W.accelerators._registerShortcuts({ ["name"]: keyName });
  486. }
  487. function layerKeyShortcutEventHandler(groupCheckbox, checkbox) {
  488. return function () {
  489. if (!groupCheckbox.disabled) {
  490. checkbox.click();
  491. }
  492. };
  493. }
  494. *********************************************************************/
  495.  
  496. function layerTogglerEventHandler(layerType) {
  497. return function () {
  498. const isVisible = this.checked;
  499.  
  500. if (isVisible) {
  501. W.map.addLayer(layerType.layer);
  502. } else {
  503. W.map.removeLayer(layerType.layer);
  504. }
  505. layerType.layer.setVisibility(isVisible);
  506. // Call to save the current state of the layers
  507. saveWMSLayersOptions();
  508. };
  509. }
  510.  
  511. function layerTogglerGroupEventHandler(groupCheckbox, layerType) {
  512. return function () {
  513. // Update visibility only if both group and individual checkbox are checked
  514. const shouldBeVisible = this.checked && groupCheckbox.checked;
  515.  
  516. if (shouldBeVisible) {
  517. W.map.addLayer(layerType.layer);
  518. } else {
  519. W.map.removeLayer(layerType.layer);
  520. }
  521. // Set the layer visibility
  522. layerType.layer.setVisibility(shouldBeVisible);
  523. // Disable the group checkbox if this checkbox is not checked
  524. groupCheckbox.disabled = !this.checked;
  525. // Save the current state of the WMS layer options
  526. saveWMSLayersOptions();
  527. };
  528. }
  529.  
  530. function layerTogglerGroupMinimizerEventHandler(iCaretDown) {
  531. return function () {
  532. const ulCollapsible = iCaretDown.closest("li").querySelector("ul");
  533. iCaretDown.classList.toggle("upside-down");
  534. ulCollapsible.classList.toggle("collapse-layer-switcher-group");
  535. };
  536. }
  537.  
  538. function setZOrdering(layerTogglers) {
  539. return function () {
  540. for (var key in layerTogglers) {
  541. for (var j = 0; j < layerTogglers[key].layerArray.length; j++) {
  542. if (layerTogglers[key].layerArray[j].zIndex > 0) {
  543. var l = W.map.getLayerByName(layerTogglers[key].layerName);
  544. if (l !== undefined) {
  545. l.setZIndex(layerTogglers[key].layerArray[j].zIndex);
  546. }
  547. }
  548. }
  549. }
  550. };
  551. }
  552.  
  553. document.addEventListener("wme-map-data-loaded", init, { once: true });
  554. })();