您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Displays layers from Czech WMS services (ŘSD & ČÚZK) in WME
当前为
// ==UserScript== // @name Czech WMS layers // @version 2017.11.12 // @authorCZ petrjanik, d2-mac, MajkiiTelini // @description Displays layers from Czech WMS services (ŘSD & ČÚZK) in WME // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor.*$/ // @run-at document-end // @namespace https://greatest.deepsurf.us/cs/users/135686 // ==/UserScript== (function() { function init(e) { if (e && e.user === null) { return; } if (typeof Waze === "undefined" || typeof Waze.loginManager === "undefined") { setTimeout(init, 100); return; } if (!Waze.loginManager.user) { Waze.loginManager.events.register("login", null, init); Waze.loginManager.events.register("loginStatus", null, init); if (!Waze.loginManager.user) { return; } } if (document.getElementById("layer-switcher") === null && document.getElementById("layer-switcher-group_display") === null) { setTimeout(init, 200); return; } // adresy WMS služeb var service_wms_orto = {"type" : "WMS", "url" : "https://geoportal.cuzk.cz/WMS_ORTOFOTO_PUB/WMService.aspx?", "attribution" : "ČUZK Ortofoto", "comment" : "ČUZK ortofoto"}; var service_wms_katastr = {"type" : "WMS", "url" : "https://services.cuzk.cz/wms/wms.asp?", "attribution" : "ČUZK Katastrální mapy", "comment" : "ČUZK katastr"}; var service_wms_inspire = {"type" : "WMS", "url" : "https://services.cuzk.cz/wms/inspire-ad-wms.asp?", "attribution" : "ČUZK INSPIRE", "comment" : "ČUZK čísla popisná a orientační + názvy ulic"}; var service_wms_zabaged = {"type" : "WMS_3857", "url" : "https://ags.cuzk.cz/arcgis/services/ZABAGED/MapServer/WMSServer?", "attribution" : "ČUZK ZABAGED®", "comment" : "ČUZK Doprava, Lesy, Vodní plochy"}; //skupina vrstev v menu var groupTogglerWMS = addGroupToggler(false, "layer-switcher-group_wms", "WMS ČÚZK"); //vrstvy v menu var layerTogglers = {}; layerTogglers.wms_verejne = addLayerToggler(groupTogglerWMS, "Veřejné budovy", [addNewLayer("wms_verejne", service_wms_zabaged, "29,44,142,143")]); layerTogglers.wms_lesvoda = addLayerToggler(groupTogglerWMS, "Lesy a vodstva", [addNewLayer("wms_lesvoda", service_wms_zabaged, "0,1,2,9,53,54,55,56,57,58,113,171,172,173,174,175,176,177,178,179", 201)]); layerTogglers.wms_orto = addLayerToggler(groupTogglerWMS, "Ortofoto ČUZK", [addNewLayer("wms_orto", service_wms_orto, "GR_ORTFOTORGB", 200)]); layerTogglers.wms_katastr = addLayerToggler(groupTogglerWMS, "Katastrální mapa", [addNewLayer("wms_katastr", service_wms_katastr, "hranice_parcel,dalsi_p_mapy,RST_KN")]); layerTogglers.wms_budovy = addLayerToggler(groupTogglerWMS, "Adresní místa 1a", [addNewLayer("wms_budovy", service_wms_inspire, "AD.Addresses.Text.AddressNumber,AD.Addresses.ByPrefixNumber.TypOfBuilding.2,AD.Addresses.ByPrefixNumber.TypOfBuilding.1", 0)]); layerTogglers.wms_budovy_b = addLayerToggler(groupTogglerWMS, "Adresní místa 1b", [addNewLayer("wms_budovy_b", service_wms_inspire, "AD.Addresses.Text.AddressAreaName,AD.Addresses.Text.ThoroughfareName")]); addGroupVisibilityToggler(); Waze.map.events.register("addlayer", null, setZOrdering(layerTogglers)); Waze.map.events.register("removelayer", null, setZOrdering(layerTogglers)); if (localStorage.WMSLayers) { var JSONStorageOptions = JSON.parse(localStorage.WMSLayers); for (var key in layerTogglers) { if (JSONStorageOptions[key]) { document.getElementById(layerTogglers[key].htmlItem).click(); } } } var saveWMSLayersOptions = function() { if (localStorage) { var JSONStorageOptions = {}; for (var key in layerTogglers) { JSONStorageOptions[key] = document.getElementById(layerTogglers[key].htmlItem).checked; } localStorage.WMSLayers = JSON.stringify(JSONStorageOptions); } }; window.addEventListener("beforeunload", saveWMSLayersOptions, false); } addNewLayer = function(id, service, serviceLayers, zIndex) { var newLayer = {}; newLayer.uniqueName = "_" + id; newLayer.zIndex = (typeof zIndex === 'undefined') ? 0 : zIndex; switch(service.type) { case "WMS": projection = "EPSG:900913"; case "WMS_3857": projection = "EPSG:3857"; newLayer.layer = new OpenLayers.Layer.WMS( id, service.url, { layers: serviceLayers , transparent: "true", format: "image/png" }, { tileSize: new OL.Size(512,512), isBaseLayer: false, visibility: false, transitionEffect: "resize", attribution: service.attribution, uniqueName: newLayer.uniqueName, projection: new unsafeWindow.OpenLayers.Projection(projection) } ); break; default: newLayer.layer = null; } return newLayer; }; addGroupToggler = function(isDefault, layerSwitcherGroupItemName, layerGroupVisibleName) { var group; if (isDefault === true) { group = document.getElementById(layerSwitcherGroupItemName).parentElement.parentElement; } else { var layerGroupsList = document.getElementsByClassName("list-unstyled togglers")[0]; group = document.createElement("li"); group.className = "group"; var togglerContainer = document.createElement("div"); togglerContainer.className = "controls-container main toggler"; var checkbox = document.createElement("input"); checkbox.className = "toggle"; checkbox.id = layerSwitcherGroupItemName; checkbox.type = "checkbox"; checkbox.checked = "true"; var label = document.createElement("label"); label.htmlFor = checkbox.id; var labelText = document.createElement("span"); labelText.className = "label-text"; var togglerChildrenList = document.createElement("ul"); togglerChildrenList.className = "children"; togglerContainer.appendChild(checkbox); labelText.appendChild(document.createTextNode(layerGroupVisibleName)); label.appendChild(labelText); togglerContainer.appendChild(label); group.appendChild(togglerContainer); group.appendChild(togglerChildrenList); layerGroupsList.appendChild(group); } return group; }; addLayerToggler = function(groupToggler, layerName, layerArray) { var layerToggler = {}; var layerShortcut = layerName.replace(/ /g, "_").replace(".", ""); layerToggler.htmlItem = "layer-switcher-item_" + layerShortcut; layerToggler.layerArray = layerArray; var layer_container = groupToggler.getElementsByClassName("children")[0]; var layerGroupCheckbox = groupToggler.getElementsByClassName("controls-container main toggler")[0].getElementsByClassName("toggle")[0]; var toggler = document.createElement("li"); var togglerContainer = document.createElement("div"); togglerContainer.className = "controls-container toggler"; var checkbox = document.createElement("input"); checkbox.type = "checkbox"; checkbox.id = layerToggler.htmlItem; checkbox.className = "toggle"; checkbox.disabled = !layerGroupCheckbox.checked; togglerContainer.appendChild(checkbox); var label = document.createElement("label"); label.htmlFor = checkbox.id; var labelText2 = document.createElement("span"); labelText2.className = "label-text"; labelText2.appendChild(document.createTextNode(" " + layerName)); label.appendChild(labelText2); togglerContainer.appendChild(label); toggler.appendChild(togglerContainer); layer_container.appendChild(toggler); for (var i = 0; i < layerArray.length; i++){ checkbox.addEventListener("click", layerTogglerEventHandler(layerArray[i].layer)); layerGroupCheckbox.addEventListener("click", layerTogglerGroupEventHandler(checkbox, layerArray[i].layer)); } registerKeyShortcut("WMS " + layerName, layerKeyShortcutEventHandler(layerGroupCheckbox, checkbox), layerShortcut); return layerToggler; }; addGroupVisibilityToggler = function() { var layerGroupsList = Array.filter(Array.prototype.slice.call(document.getElementsByClassName("list-unstyled togglers")[0].childNodes), function(e) {return e.nodeType == 1 && e.tagName == "LI";}); for (i = 0; i < layerGroupsList.length; i++) { var togglerContainer = Array.filter(Array.prototype.slice.call(layerGroupsList[i].childNodes), function(e) {return e.nodeType == 1 && e.tagName == "DIV";})[0]; var togglerChildrenList = Array.filter(Array.prototype.slice.call(layerGroupsList[i].childNodes), function(e) {return e.nodeType == 1 && e.tagName == "UL";})[0]; var aControlWindow = document.createElement("a"); aControlWindow.href = "#"; aControlWindow.className = "fa fa-window-minimize pull-right"; togglerContainer.appendChild(aControlWindow); aControlWindow.addEventListener("click", layersEventHandler(Array.filter(Array.prototype.slice.call(togglerChildrenList.childNodes), function(e) {return e.nodeType == 1 && e.tagName == "LI";}))); } }; function registerKeyShortcut(actionName, callback, keyName) { I18n.translations[I18n.locale].keyboard_shortcuts.groups['default'].members[keyName] = actionName; Waze.accelerators.addAction(keyName, {group: 'default'}); Waze.accelerators.events.register(keyName, null, callback); Waze.accelerators._registerShortcuts({[""]: keyName}); } function layerTogglerEventHandler(layer) { return function() { if (this.checked) { Waze.map.addLayer(layer); layer.setVisibility(this.checked); } else { layer.setVisibility(this.checked); Waze.map.removeLayer(layer); } }; } function layerKeyShortcutEventHandler(groupCheckbox, checkbox) { return function() { if (!groupCheckbox.disabled) { checkbox.click(); } }; } function layerTogglerGroupEventHandler(checkbox, layer) { return function() { if (this.checked) { if (checkbox.checked) { Waze.map.addLayer(layer); layer.setVisibility(this.checked & checkbox.checked); } } else { if (checkbox.checked) { layer.setVisibility(this.checked & checkbox.checked); Waze.map.removeLayer(layer); } } checkbox.disabled = !this.checked; }; } function layersEventHandler(childList) { return function () { if (this.className == "fa fa-window-maximize pull-right"){ this.className = "fa fa-window-minimize pull-right"; for (j = 0; j < childList.length; j++) { childList[j].style.display = ""; } } else{ this.className = "fa fa-window-maximize pull-right"; for (j = 0; j < childList.length; j++) { childList[j].style.display = "none"; } } }; } function setZOrdering(layerTogglers) { return function() { for (var key in layerTogglers) { for (j = 0; j < layerTogglers[key].layerArray.length; j++) { if (layerTogglers[key].layerArray[j].zIndex > 0) { var l = Waze.map.getLayersBy("uniqueName", layerTogglers[key].layerArray[j].uniqueName); if (l.length > 0) { l[0].setZIndex(layerTogglers[key].layerArray[j].zIndex); } } } } }; } init(); })();