var $jscomp = $jscomp || {}; $jscomp.scope = {}; $jscomp.ASSUME_ES5 = !1; $jscomp.ASSUME_NO_NATIVE_MAP = !1; $jscomp.ASSUME_NO_NATIVE_SET = !1; $jscomp.SIMPLE_FROUND_POLYFILL = !1; $jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function (a, b, c) { a != Array.prototype && a != Object.prototype && (a[b] = c.value); }; $jscomp.getGlobal = function (a) { return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a; }; $jscomp.global = $jscomp.getGlobal(this); $jscomp.polyfill = function (a, b, c, d) { if (b) { c = $jscomp.global; a = a.split("."); for (d = 0; d < a.length - 1; d++) { var e = a[d]; e in c || (c[e] = {}); c = c[e]; } a = a[a.length - 1]; d = c[a]; b = b(d); b != d && null != b && $jscomp.defineProperty(c, a, { configurable: !0, writable: !0, value: b }); } }; $jscomp.polyfill( "Number.parseFloat", function (a) { return a || parseFloat; }, "es6", "es3" ); $jscomp.polyfill( "Number.parseInt", function (a) { return a || parseInt; }, "es6", "es3" ); $jscomp.arrayIteratorImpl = function (a) { var b = 0; return function () { return b < a.length ? { done: !1, value: a[b++] } : { done: !0 }; }; }; $jscomp.arrayIterator = function (a) { return { next: $jscomp.arrayIteratorImpl(a) }; }; $jscomp.SYMBOL_PREFIX = "jscomp_symbol_"; $jscomp.initSymbol = function () { $jscomp.initSymbol = function () {}; $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); }; $jscomp.SymbolClass = function (a, b) { this.$jscomp$symbol$id_ = a; $jscomp.defineProperty(this, "description", { configurable: !0, writable: !0, value: b }); }; $jscomp.SymbolClass.prototype.toString = function () { return this.$jscomp$symbol$id_; }; $jscomp.Symbol = (function () { function a(c) { if (this instanceof a) throw new TypeError("Symbol is not a constructor"); return new $jscomp.SymbolClass($jscomp.SYMBOL_PREFIX + (c || "") + "_" + b++, c); } var b = 0; return a; })(); $jscomp.initSymbolIterator = function () { $jscomp.initSymbol(); var a = $jscomp.global.Symbol.iterator; a || (a = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("Symbol.iterator")); "function" != typeof Array.prototype[a] && $jscomp.defineProperty(Array.prototype, a, { configurable: !0, writable: !0, value: function () { return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this)); }, }); $jscomp.initSymbolIterator = function () {}; }; $jscomp.initSymbolAsyncIterator = function () { $jscomp.initSymbol(); var a = $jscomp.global.Symbol.asyncIterator; a || (a = $jscomp.global.Symbol.asyncIterator = $jscomp.global.Symbol("Symbol.asyncIterator")); $jscomp.initSymbolAsyncIterator = function () {}; }; $jscomp.iteratorPrototype = function (a) { $jscomp.initSymbolIterator(); a = { next: a }; a[$jscomp.global.Symbol.iterator] = function () { return this; }; return a; }; $jscomp.iteratorFromArray = function (a, b) { $jscomp.initSymbolIterator(); a instanceof String && (a += ""); var c = 0, d = { next: function () { if (c < a.length) { var e = c++; return { value: b(e, a[e]), done: !1 }; } d.next = function () { return { done: !0, value: void 0 }; }; return d.next(); }, }; d[Symbol.iterator] = function () { return d; }; return d; }; $jscomp.polyfill( "Array.prototype.values", function (a) { return a ? a : function () { return $jscomp.iteratorFromArray(this, function (a, c) { return c; }); }; }, "es8", "es3" ); $jscomp.polyfill( "Number.isNaN", function (a) { return a ? a : function (a) { return "number" === typeof a && isNaN(a); }; }, "es6", "es3" ); $jscomp.owns = function (a, b) { return Object.prototype.hasOwnProperty.call(a, b); }; $jscomp.assign = "function" == typeof Object.assign ? Object.assign : function (a, b) { for (var c = 1; c < arguments.length; c++) { var d = arguments[c]; if (d) for (var e in d) $jscomp.owns(d, e) && (a[e] = d[e]); } return a; }; $jscomp.polyfill( "Object.assign", function (a) { return a || $jscomp.assign; }, "es6", "es3" ); var netgis = netgis || {}; netgis.Attribution = function (a) { this.config = a; this.layers = this.client = null; this.items = []; this.initElements(a); this.initConfig(a); }; netgis.Attribution.Config = { prefix: "NetGIS" }; netgis.Attribution.prototype.initElements = function (a) { this.container = document.createElement("section"); this.container.className = "netgis-attribution netgis-text-a"; var b = this; window.setTimeout(function () { b.update(); }, 100); }; netgis.Attribution.prototype.initConfig = function (a) { if (a && (a.attribution && a.attribution.prefix && this.items.push(a.attribution.prefix), (a = a.layers))) for (var b = 0; b < a.length; b++) { var c = a[b], d = c.attribution; d && 0 !== d.length && c.active && this.items.push(d); } }; netgis.Attribution.prototype.attachTo = function (a) { a.appendChild(this.container); a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onContextUpdate.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onEditLayerChange.bind(this)); }; netgis.Attribution.prototype.update = function () { var a = "© " + this.items.join(", "); this.appendix && (a += ", " + this.appendix); this.container.innerHTML = a; }; netgis.Attribution.prototype.add = function (a) { for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) return; this.items.push(a); this.update(); }; netgis.Attribution.prototype.remove = function (a) { for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) { this.items.splice(b, 1); break; } this.update(); }; netgis.Attribution.prototype.onMapLayerToggle = function (a) { a = a.detail; for (var b = this.config.layers, c = null, d = 0; d < b.length; d++) { var e = b[d]; e.id === a.id && (c = e.attribution); } c && (a.on ? this.add(c) : this.remove(c)); }; netgis.Attribution.prototype.onContextUpdate = function (a) { this.initConfig(a.detail.context.config); this.update(); }; netgis.Attribution.prototype.onContextUpdate_01 = function (a) { config.attribution && config.attribution.prefix && this.items.push(config.attribution.prefix); this.layers = []; for (var b = 0; b < a.layers.length; b++) { var c = a.layers[b]; c.attribution && 0 < c.attribution.length && (this.layers[c.id] = c.attribution); } for (b = 0; b < a.layers.length; b++) if (((c = a.layers[b]), c.active)) this.onLayerShow({ id: c.id }); }; netgis.Attribution.prototype.onLayerShow = function (a) { if ((a = this.layers[a.id])) { for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) return; this.items.push(a); this.update(); } }; netgis.Attribution.prototype.onLayerHide = function (a) { if ((a = this.layers[a.id])) { for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) { this.items.splice(b, 1); break; } this.update(); } }; netgis.Attribution.prototype.onEditLayerChange = function (a) { a = a.detail.geojson.area; for (var b = 0; b < this.items.length; b++) if (-1 < this.items[b].search("Zeichnungsfl\u00e4che: ")) { this.items.splice(b, 1); break; } this.appendix = a && 0 < a ? "Zeichnungsfl\u00e4che: " + netgis.util.formatArea(a, !0) + "" : null; this.update(); }; netgis = netgis || {}; netgis.Client = function (a, b) { b || (b = {}); a = this.initLegacyConfig(b, a); this.container = this.initContainer(a); this.debug = !1; netgis.util.isString(b) ? netgis.util.isJSON(b, !1) ? ((b = JSON.parse(b)), this.init(this.container, b)) : (this.showLoader(!0), netgis.util.request(b, this.onConfigResponse.bind(this))) : this.init(this.container, b); }; netgis.Client.Config = { loading_text: "Geoportal Client wird geladen..." }; netgis.Client.Output = { id: "netgis-storage" }; netgis.Client.prototype.init = function (a, b) { this.config = b; this.initParams(b); this.initConfig(b); this.initElements(a); this.initEvents(); this.initModules(b); this.initOutput(b); a = new netgis.ContextMenu(); a.attachTo(this.container); this.modules.contextmenu = a; this.popup = new netgis.Popup(); this.popup.attachTo(this.container); }; netgis.Client.prototype.initLegacyConfig = function (a, b) { var c = netgis.config; if (!c) return b; c.MAP_CONTAINER_ID && (b = c.MAP_CONTAINER_ID); a.modules || (a.modules = { menu: !0, map: !0, controls: !0, attribution: !0, legend: !0, layertree: !0, info: !0, searchplace: !0, geolocation: !0, }); a.map || (a.map = {}); (!c.INITIAL_CENTER_X && 0 !== c.INITIAL_CENTER_X) || (!c.INITIAL_CENTER_Y && 0 !== c.INITIAL_CENTER_Y) || (a.map.center = [c.INITIAL_CENTER_X, c.INITIAL_CENTER_Y]); a.map.scalebar = !0; c.INITIAL_SCALE && (a.map.scale = c.INITIAL_SCALE); c.MAP_SCALES && (a.map.scales = c.MAP_SCALES); c.MAP_EXTENT && (a.map.extent = c.MAP_EXTENT); c.MAX_HISTORY && (a.map.max_view_history = c.MAX_HISTORY); a.attribution = { prefix: "GeoPortal" }; c.MAP_PROJECTIONS && (a.projections = c.MAP_PROJECTIONS); c.MAP_PROJECTION && (a.map.projection = c.MAP_PROJECTION); a.controls = { buttons: [ { id: "zoom_in", icon: "", title: "Zoom +" }, { id: "zoom_out", icon: "", title: "Zoom -" }, { id: "geolocation", icon: "", title: "Ger\u00e4testandort" }, { id: "zoom_home", icon: "", title: "Anfangsausdehung" }, { id: "legend", icon: "", title: "Legende" }, ], }; a.folders || (a.folders = [{ id: "bg", title: "Hintergrund", parent: null, radio: !0 }]); a.layers || (a.layers = []); if (c.URL_BACKGROUND_HYBRID) { var d = c.URL_BACKGROUND_HYBRID; -1 !== d.indexOf("{x}") || (-1 !== d.indexOf("{y}") && -1 !== d.indexOf("{-y}")) || -1 !== d.indexOf("{z}") || (d += "/{z}/{x}/{-y}.jpeg"); d = { id: "bg_hybrid", active: !0, folder: "bg", order: 1, title: "Hybrid", type: "TMS", url: d, projection: "EPSG:25832", extent: "map", scales: "map", transparency: 0, }; a.layers.push(d); } c.URL_BACKGROUND_AERIAL && ((d = c.URL_BACKGROUND_AERIAL), (d = { id: "bg_aerial", folder: "bg", order: 1, title: "Luftbild", type: "WMS", url: d, query: !1, transparency: 0, }), a.layers.push(d)); c.URL_HEIGHT_REQUEST && ((d = c.URL_HEIGHT_REQUEST), -1 === d.indexOf("{x}") && -1 === d.indexOf("{y}") && (d += "&coord={x},{y}"), (d = { id: "dem_hidden", title: "Digitales H\u00f6henmodell", hidden: !0, active: !0, query: !0, type: "HIDDEN", query_url: d, }), a.layers.push(d)); a.layertree || (a.layertree = {}); a.layertree.title = "Ebenen"; a.info || (a.info = {}); a.info.default_format = "text/html"; c.URL_FEATURE_INFO_PROXY && 0 < c.URL_FEATURE_INFO_PROXY.length && (a.info.proxy = c.URL_FEATURE_INFO_PROXY); a.menu || ((a.menu = { header: "GeoPortal", compact: !0, items: [ { title: "Tools", items: [ { id: "view", title: "Betrachten" }, { id: "zoom_box", title: "Zoom-Rechteck", }, { id: "measure_line", title: "Strecke messen", }, { id: "measure_area", title: "Fl\u00e4che messen", }, { id: "measure_clear", title: "Messung l\u00f6schen", }, ], }, { id: "layertree", title: "Ebenen" }, ], }), c.MAP_SCALES && 0 < c.MAP_SCALES.length && a.menu.items.unshift({ title: "Ansicht", items: [ { id: "view_prev", title: "Vorherige" }, { id: "view_next", title: "N\u00e4chste" }, { id: "scales", title: "Ma\u00dfstab", items: [], }, ], }), c.URL_USAGE_TERMS && 0 < c.URL_USAGE_TERMS.length && a.menu.items.unshift({ title: "Info", items: [ { url: c.URL_USAGE_TERMS, title: "Nutzungsbedingungen", }, ], })); c.URL_SEARCH_REQUEST && ((d = c.URL_SEARCH_REQUEST), -1 === d.indexOf("{query}") && (d += "?outputFormat=json&resultTarget=web&searchEPSG=4326&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={query}&name_startsWith={query}"), c.URL_SEARCH_PROXY && 0 < c.URL_SEARCH_PROXY.length && (d = c.URL_SEARCH_PROXY + "?" + d), a.menu.items.unshift({ id: "searchplace", title: "Suche" }), (a.searchplace = { title: "Suche...", url: d })); a.wmc || (a.wmc = {}); if (c.URL_WMC_REQUEST) { d = c.URL_WMC_REQUEST; if (-1 === d.indexOf("{id}")) { var e = "mobilemap2"; c.CONF_FILE_NAME && 0 < c.CONF_FILE_NAME.length && (e = c.CONF_FILE_NAME); d += "?confFileName=" + e + "&epsg=25832&withHierarchy=1&wmc_id={id}"; } c.URL_WMC_PROXY && 0 < c.URL_WMC_PROXY.length && (d = c.URL_WMC_PROXY + "?" + d); a.wmc.url = d; } c.URL_LAYERS_REQUEST && ((d = c.URL_LAYERS_REQUEST), -1 === d.indexOf("{ids}") && (d += "?languageCode=de&resultTarget=web&maxResults=40&resourceIds={ids}"), c.URL_LAYERS_PROXY && 0 < c.URL_LAYERS_PROXY.length && (d = c.URL_LAYERS_PROXY + "?" + d), (a.wmc.layers_url = d)); return b; }; netgis.Client.prototype.initContainer = function (a) { netgis.util.isString(a) && (a = document.getElementById(a)); a.classList.add("netgis-client", "netgis-font"); return a; }; netgis.Client.prototype.initParams = function (a) { var b = window.location.search.substr(1); b = b.split("&"); this.params = {}; for (var c = 0; c < b.length; c++) { var d = b[c].split("="), e = d[0].toLowerCase(); d = d[1]; e && "" !== e && (this.params[e] = d); } for (e in this.params) switch (((d = this.params[e]), e)) { case "wmc_id": a.wmc && (a.wmc.id = d); break; case "layerid": a && a.wmc && a.wmc.layers_url && ((b = a.wmc.layers_url), (b = netgis.util.replace(b, "{ids}", d)), netgis.util.request(b, this.onContextResponseLayer.bind(this))); } }; netgis.Client.prototype.initConfig = function (a) { a && a.wmc && a.wmc.url && this.requestContextWMC(a.wmc.url, a.wmc.id); a && a.ows && a.ows.url && this.requestContextOWS(a.ows.url); }; netgis.Client.prototype.initElements = function (a) { if (a.hasAttribute("data-lon")) { var b = Number.parseFloat(a.getAttribute("data-lon")); this.config.map.center_lonlat || (this.config.map.center_lonlat = []); this.config.map.center_lonlat[0] = b; } a.hasAttribute("data-lat") && ((b = Number.parseFloat(a.getAttribute("data-lat"))), this.config.map.center_lonlat || (this.config.map.center_lonlat = []), (this.config.map.center_lonlat[1] = b)); a.hasAttribute("data-zoom") && ((b = Number.parseFloat(a.getAttribute("data-zoom"))), (this.config.map.zoom = b)); a.hasAttribute("data-bounds") && ((b = a.getAttribute("data-bounds")), (this.config.tools.bounds = b)); a.hasAttribute("data-editable") && ((a = "true" === a.getAttribute("data-editable")), this.config.tools || (this.config.tools = {}), (this.config.tools.editable = a)); }; netgis.Client.prototype.initOutput = function (a) { var b; if (a.output && a.output.id) { var c = a.output.id; console.warn('config[ "output" ][ "id" ] is deprecated, use config[ "tools" ][ "output_id" ] instead'); } a.tools && (a.tools.output_id && (c = a.tools.output_id), a.tools.output_name && (b = a.tools.output_name)); if (c) { if ((a = document.getElementById(c)) && a.value && 0 < a.value.length) { var d = JSON.parse(a.value); netgis.util.invoke(this.container, netgis.Events.MAP_EDIT_LAYER_LOADED, { geojson: d }); } this.output = a; } this.output || ((this.output = document.createElement("input")), (this.output.className = "netgis-storage"), this.output.setAttribute("type", "hidden"), c && this.output.setAttribute("id", c), b && this.output.setAttribute("name", b), this.container.appendChild(this.output)); }; netgis.Client.prototype.initModules = function (a) { this.modules = {}; if ((a = a.modules)) a.map && this.addModule("map", netgis.Map), a.controls && this.addModule("controls", netgis.Controls), a.attribution && this.addModule("attribution", netgis.Attribution), a.legend && this.addModule("legend", netgis.Legend), a.geolocation && this.addModule("geolocation", netgis.Geolocation), a.info && this.addModule("info", netgis.Info), a.menu && this.addModule("menu", netgis.Menu), a.layertree && this.addModule("layertree", netgis.LayerTree), a.searchplace && this.addModule("searchplace", netgis.SearchPlace), a.searchparcel && this.addModule("searchparcel", netgis.SearchParcel), a.toolbox && this.addModule("toolbox", netgis.Toolbox), a["import"] && this.addModule("import", netgis.Import), a["export"] && this.addModule("export", netgis.Export), a.timeslider && this.addModule("timeslider", netgis.TimeSlider), a.plugins && this.addModule("plugins", netgis.Plugins); }; netgis.Client.prototype.initEvents = function () { this.container.addEventListener(void 0, function (a) { console.error("undefined event invoked", a); }); for (var a in netgis.Events) this.container.addEventListener(netgis.Events[a], this.handleEvent.bind(this)); this.container.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onMapEditLayerChange.bind(this)); }; netgis.Client.prototype.showLoader = function (a) { this.loader || ((this.loader = document.createElement("div")), (this.loader.className = "netgis-loader netgis-color-e netgis-text-a"), (this.loader.innerHTML = ""), this.config && this.config.client && this.config.client.loading_text && (this.loader.innerHTML += "

" + this.config.client.loading_text + "

"), this.container.appendChild(this.loader)); !1 === a ? (this.loader.classList.add("netgis-fade"), (this.loaderTimeout = window.setTimeout( function () { this.loader.classList.add("netgis-hide"); this.loaderTimeout = null; }.bind(this), 600 ))) : (this.loader.classList.remove("netgis-hide"), this.loader.classList.remove("netgis-fade"), this.loaderTimeout && (window.clearTimeout(this.loaderTimeout), (this.loaderTimeout = null))); }; netgis.Client.prototype.handleEvent = function (a) { var b = a.type; a = a.detail; !0 === this.debug && console.info("EVENT:", b, a); }; netgis.Client.prototype.addModule = function (a, b) { b = new b(this.config); b.attachTo && b.attachTo(this.container); return (this.modules[a] = b); }; netgis.Client.prototype.isMobile = function () { return netgis.util.isMobile(this.container); }; netgis.Client.prototype.onConfigResponse = function (a) { a = JSON.parse(a); this.init(this.container, a); this.showLoader(!1); }; netgis.Client.prototype.requestContextWMC = function (a, b) { if (-1 < a.indexOf("{id}")) if (b) a = netgis.util.replace(a, "{id}", b); else { console.warn("No WMC id set in config for url", a); return; } new netgis.WMC(this.config).requestContext(a, this.onContextResponseWMC.bind(this)); this.showLoader(!0); }; netgis.Client.prototype.onContextResponseWMC = function (a) { console.info("WMC Response:", a); for (var b = 0; b < a.config.layers.length; b++) this.config.layers.push(a.config.layers[b]); a.config.map.bbox && (this.config.map.bbox = a.config.map.bbox); netgis.util.invoke(this.container, netgis.Events.CLIENT_CONTEXT_RESPONSE, { context: a }); this.showLoader(!1); }; netgis.Client.prototype.onContextResponseLayer = function (a) { var b = JSON.parse(a); console.info("Layer Response:", b); a = new netgis.WMC(); b = b.wms.srv[0]; a = a.parseServiceLayer(b.id.toString(), b, null, b.layer[0], null); this.config.layers.push(a); netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_CREATE, a); }; netgis.Client.prototype.requestContextOWS = function (a) { console.info("Request OWS:", a); netgis.util.request(a, this.onContextResponseOWS.bind(this)); }; netgis.Client.prototype.onContextResponseOWS = function (a) { a = JSON.parse(a); console.info("OWS Response:", a); a = netgis.OWS.read(a, this); console.info("OWS Config:", a); }; netgis.Client.prototype.onIconbarIconClick = function (a) { switch (a.detail.id) { case "home": a = this.config.layers; for (var b = 0; b < a.length; b++) { var c = a[b], d = c.id; !0 === c.active ? (this.modules.map.addLayer(d, c), this.modules.layertree.tree.setItemChecked(d, !0)) : (this.modules.map.removeLayer(d), this.modules.layertree.tree.setItemChecked(d, !1)); } } }; netgis.Client.prototype.onIconbarItemClick = function (a) { a = a.detail; for (var b = this.config.layers, c = 0; c < b.length; c++) { var d = b[c], e = d.id; "background" !== d.folder && (e === a.id ? (this.modules.map.addLayer(e, d), this.modules.layertree.tree.setItemChecked(e, !0)) : (this.modules.map.removeLayer(e), this.modules.layertree.tree.setItemChecked(e, !1))); } }; netgis.Client.prototype.onSwitcherButtonClick = function (a) { a = a.detail; for (var b = this.config.switcher.buttons, c = this.config.layers, d = 0; d < b.length; d++) { var e = b[d].id; if (e === a.id) for (var f = 0; f < c.length; f++) { var g = c[f]; g.id === e && (this.modules.map.addLayer(e, g), this.modules.layertree.tree.setItemChecked(e, !0)); } else this.modules.map.removeLayer(e), this.modules.layertree.tree.setItemChecked(e, !1); } 0 === this.modules.switcher.getIndex(a.id) && this.modules.switcher.shift(1, 0); }; netgis.Client.prototype.onGeolocationToggle = function (a) { this.modules.map.setGeolocMarkerVisible(a.detail.on); }; netgis.Client.prototype.onGeolocationChange = function (a) { a = a.detail; this.modules.map.zoomLonLat(a.lon, a.lat, this.config.geolocation.zoom); this.modules.map.setGeolocMarkerLonLat(a.lon, a.lat); }; netgis.Client.prototype.onMapEditLayerChange = function (a) { a = JSON.stringify(a.detail.geojson); this.output.value = a; }; netgis.Client.handleCommand = function (a, b) { var c = b.split(":"); b = c[0]; switch (b.toUpperCase()) { case netgis.Commands.PLUGIN: b = c[1]; if (!b) { console.error("missing second command parameter id", c); break; } netgis.util.invoke(a, netgis.Events.PLUGIN_TOGGLE, { id: b }); break; case netgis.Commands.LAYERTREE: netgis.util.isMobile() ? netgis.util.invoke(a, netgis.Events.LAYERTREE_TOGGLE, { on: !0 }) : netgis.util.invoke(a, netgis.Events.LAYERTREE_TOGGLE, null); break; case netgis.Commands.SEARCHPLACE: netgis.util.isMobile() ? netgis.util.invoke(a, netgis.Events.SEARCHPLACE_TOGGLE, { on: !0 }) : netgis.util.invoke(a, netgis.Events.SEARCHPLACE_TOGGLE, null); break; case netgis.Commands.SEARCHPARCEL: netgis.util.isMobile() ? netgis.util.invoke(a, netgis.Events.SEARCHPARCEL_TOGGLE, { on: !0 }) : netgis.util.invoke(a, netgis.Events.SEARCHPARCEL_TOGGLE, null); break; case netgis.Commands.TOOLBOX: netgis.util.isMobile() ? netgis.util.invoke(a, netgis.Events.TOOLBOX_TOGGLE, { on: !0 }) : netgis.util.invoke(a, netgis.Events.TOOLBOX_TOGGLE, null); break; case netgis.Commands.LEGEND: netgis.util.isMobile() ? netgis.util.invoke(a, netgis.Events.LEGEND_TOGGLE, { on: !0 }) : netgis.util.invoke(a, netgis.Events.LEGEND_TOGGLE, null); break; case netgis.Commands.VIEW_PREV: netgis.util.invoke(a, netgis.Events.MAP_VIEW_PREV, null); break; case netgis.Commands.VIEW_NEXT: netgis.util.invoke(a, netgis.Events.MAP_VIEW_NEXT, null); break; case netgis.Commands.VIEW: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW }); break; case netgis.Commands.ZOOM_BOX: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.ZOOM_BOX }); break; case netgis.Commands.ZOOM_SCALE: c = Number.parseInt(a.innerText.split(":")[1]); netgis.util.invoke(a, netgis.Events.MAP_ZOOM_SCALE, { scale: c, anim: !0 }); break; case netgis.Commands.MEASURE_LINE: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.MEASURE_LINE }); break; case netgis.Commands.MEASURE_AREA: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.MEASURE_AREA }); break; case netgis.Commands.MEASURE_CLEAR: netgis.util.invoke(a, netgis.Events.MEASURE_CLEAR, null); break; case netgis.Commands.DRAW_POINTS: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DRAW_POINTS }); break; case netgis.Commands.DRAW_LINES: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DRAW_LINES }); break; case netgis.Commands.DRAW_POLYGONS: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DRAW_POLYGONS }); break; case netgis.Commands.MODIFY_FEATURES: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.MODIFY_FEATURES }); break; case netgis.Commands.DELETE_FEATURES: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DELETE_FEATURES }); break; case netgis.Commands.BUFFER_FEATURES: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES_DYNAMIC }); break; case netgis.Commands.CUT_FEATURES: netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES }); break; case netgis.Commands.IMPORT_LAYER: netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_SHOW, null); break; case netgis.Commands.EXPORT: netgis.util.invoke(a, netgis.Events.EXPORT_SHOW, null); break; case netgis.Commands.GEOLOCATION: netgis.util.invoke(a, netgis.Events.GEOLOCATION_SHOW_OPTIONS, null); break; default: console.error("unhandled command id", b); } }; netgis = netgis || {}; netgis.Commands = { PLUGIN: "PLUGIN", LAYERTREE: "LAYERTREE", SEARCHPLACE: "SEARCHPLACE", SEARCHPARCEL: "SEARCHPARCEL", TOOLBOX: "TOOLBOX", LEGEND: "LEGEND", VIEW_PREV: "VIEW_PREV", VIEW_NEXT: "VIEW_NEXT", VIEW: "VIEW", ZOOM_BOX: "ZOOM_BOX", ZOOM_SCALE: "ZOOM_SCALE", MEASURE_LINE: "MEASURE_LINE", MEASURE_AREA: "MEASURE_AREA", MEASURE_CLEAR: "MEASURE_CLEAR", DRAW_POINTS: "DRAW_POINTS", DRAW_LINES: "DRAW_LINES", DRAW_POLYGONS: "DRAW_POLYGONS", MODIFY_FEATURES: "MODIFY_FEATURES", DELETE_FEATURES: "DELETE_FEATURES", BUFFER_FEATURES: "BUFFER_FEATURES", CUT_FEATURES: "CUT_FEATURES", SNAP_TOGGLE: "SNAP_TOGGLE", IMPORT_LAYER: "IMPORT_LAYER", EXPORT: "EXPORT", GEOLOCATION: "GEOLOCATION", }; netgis = netgis || {}; netgis.ContextMenu = function () { this.initElements(); }; netgis.ContextMenu.prototype.initElements = function () { this.container = document.createElement("div"); this.container.className = "netgis-contextmenu netgis-shadow-large netgis-color-e netgis-hide"; }; netgis.ContextMenu.prototype.attachTo = function (a) { a.appendChild(this.container); a.addEventListener(netgis.Events.CONTEXTMENU_SHOW, this.onContextMenuShow.bind(this)); a.addEventListener("click", this.onParentClick.bind(this)); a.addEventListener("pointerup", this.onParentClick.bind(this)); a.addEventListener("scroll", this.onParentScroll.bind(this), !0); a.addEventListener("keydown", this.onParentKeyDown.bind(this)); }; netgis.ContextMenu.prototype.clear = function () { this.container.innerHTML = ""; }; netgis.ContextMenu.prototype.addButton = function (a, b) { var c = document.createElement("button"); c.className = "netgis-button netgis-clip-text netgis-hover-d"; c.innerHTML = b; c.setAttribute("type", "button"); c.setAttribute("data-id", a); c.addEventListener("click", this.onButtonClick.bind(this)); this.container.appendChild(c); return c; }; netgis.ContextMenu.prototype.addCheckbox = function (a, b, c) { var d = document.createElement("label"); d.className = "netgis-noselect netgis-hover-d"; var e = document.createElement("input"); e.setAttribute("type", "checkbox"); e.setAttribute("title", b); e.setAttribute("data-id", a); e.checked = c; e.addEventListener("change", this.onCheckboxChange.bind(this)); d.appendChild(e); a = document.createElement("span"); a.className = "netgis-clip-text"; a.innerHTML = b; d.appendChild(a); this.container.appendChild(d); return e; }; netgis.ContextMenu.prototype.addSlider = function (a, b, c, d, e, f) { var g = document.createElement("label"); g.className = "netgis-noselect netgis-hover-d"; var h = document.createElement("span"); h.className = "netgis-clip-text"; h.innerHTML = b; g.appendChild(h); h = document.createElement("span"); g.appendChild(h); c || 0 === c || (c = 50); d || 0 === d || (d = 0); e || 0 === e || (e = 100); f || (f = 1); var k = document.createElement("input"); k.setAttribute("type", "range"); k.setAttribute("min", d); k.setAttribute("max", e); k.setAttribute("step", f); k.setAttribute("value", c); k.setAttribute("data-id", a); k.setAttribute("data-title", b); k.setAttribute("title", b + " " + c); k.addEventListener("change", this.onSliderChange.bind(this)); k.addEventListener("input", this.onSliderChange.bind(this)); h.appendChild(k); this.container.appendChild(g); return k; }; netgis.ContextMenu.prototype.setVisible = function (a) { a ? this.container.classList.remove("netgis-hide") : this.container.classList.add("netgis-hide"); }; netgis.ContextMenu.prototype.setPosition = function (a, b) { var c = this.container.parentNode.getBoundingClientRect(), d = this.container.getBoundingClientRect(); a + d.width > c.width && (a -= d.width); b + d.height > c.height && (b -= d.height); this.container.style.left = a + "px"; this.container.style.top = b + "px"; }; netgis.ContextMenu.prototype.onContextMenuShow = function (a) { a = a.detail; this.clear(); for (var b = 0; b < a.items.length; b++) { var c = a.items[b]; switch (c.type) { case "slider": this.addSlider(c.id, c.title, c.val, c.min, c.max); } } this.setVisible(!0); this.setPosition(a.x, a.y); }; netgis.ContextMenu.prototype.onContextMenu = function (a) { a.preventDefault(); var b = a.clientX; a = a.clientY; this.setVisible(!0); this.setPosition(b, a); return !1; }; netgis.ContextMenu.prototype.onParentClick = function (a) { this.container.contains(a.target) || this.setVisible(!1); }; netgis.ContextMenu.prototype.onParentScroll = function (a) { this.setVisible(!1); }; netgis.ContextMenu.prototype.onParentKeyDown = function (a) { 27 === (a.keyCode || a.which) && this.setVisible(!1); }; netgis.ContextMenu.prototype.onButtonClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); this.setVisible(!1); netgis.util.invoke(a, netgis.Events.CONTEXTMENU_BUTTON_CLICK, { id: b }); netgis.Client.handleCommand(a, b); }; netgis.ContextMenu.prototype.onCheckboxChange = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); netgis.util.invoke(a, netgis.Events.CONTEXTMENU_CHECKBOX_CHANGE, { id: b, checked: a.checked }); }; netgis.ContextMenu.prototype.onSliderChange = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"), c = Number.parseFloat(a.value), d = a.getAttribute("data-title"); a.setAttribute("title", d + " " + c); netgis.util.invoke(a, netgis.Events.CONTEXTMENU_SLIDER_CHANGE, { id: b, val: c }); }; netgis = netgis || {}; netgis.Controls = function (a) { this.config = a; this.initElements(a); this.initConfig(a); }; netgis.Controls.Config = { buttons: [] }; netgis.Controls.prototype.initElements = function (a) { this.container = document.createElement("section"); this.container.className = "netgis-controls netgis-color-e netgis-text-a netgis-shadow netgis-round"; if (a && a.modules && !0 === a.modules.geolocation) { this.popupGeoloc = new netgis.Popup({ direction: "right" }); this.popupGeoloc.container.style.width = "60mm"; this.popupGeoloc.setHeader("Ger\u00e4te-Standort"); a = document.createElement("label"); a.className = "netgis-hover-d netgis-clip-text netgis-clickable netgis-noselect"; var b = document.createElement("input"); b.setAttribute("type", "checkbox"); b.addEventListener("change", this.onInputGeolocActiveChange.bind(this)); a.appendChild(b); this.inputGeolocActive = b; b = document.createElement("span"); b.innerHTML = "Aktiviert"; a.appendChild(b); this.popupGeoloc.wrapper.appendChild(a); a = document.createElement("label"); a.className = "netgis-hover-d netgis-clip-text netgis-clickable netgis-noselect"; b = document.createElement("input"); b.setAttribute("type", "checkbox"); b.addEventListener("change", this.onInputGeolocCenterChange.bind(this)); a.appendChild(b); this.inputGeolocCenter = b; b = document.createElement("span"); b.innerHTML = "Zentriert"; a.appendChild(b); this.popupGeoloc.wrapper.appendChild(a); } }; netgis.Controls.prototype.initConfig = function (a) { if ((a = a.controls)) if ((a = a.buttons)) for (var b = 0; b < a.length; b++) { var c = a[b]; this.addButton(c.id, c.icon, c.title); } }; netgis.Controls.prototype.attachTo = function (a) { a.appendChild(this.container); this.popupGeoloc && this.popupGeoloc.attachTo(a); a.addEventListener(netgis.Events.GEOLOCATION_SHOW_OPTIONS, this.onGeolocShowOptions.bind(this)); a.addEventListener(netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, this.onGeolocToggleActive.bind(this)); a.addEventListener(netgis.Events.GEOLOCATION_TOGGLE_CENTER, this.onGeolocToggleCenter.bind(this)); a.addEventListener("pointerdown", this.onParentPointerDown.bind(this)); }; netgis.Controls.prototype.addButton = function (a, b, c) { var d = document.createElement("button"); d.setAttribute("type", "button"); d.setAttribute("data-id", a); d.className = "netgis-hover-a"; d.innerHTML = b; d.title = c; d.addEventListener("pointerdown", this.onButtonClick.bind(this)); this.container.appendChild(d); return d; }; netgis.Controls.prototype.onButtonClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); switch (b) { case "zoom_in": netgis.util.invoke(a, netgis.Events.MAP_ZOOM, { delta: 1 }); break; case "zoom_out": netgis.util.invoke(a, netgis.Events.MAP_ZOOM, { delta: -1 }); break; case "zoom_home": netgis.util.invoke(a, netgis.Events.MAP_ZOOM_HOME, null); break; default: netgis.Client.handleCommand(a, b); } }; netgis.Controls.prototype.onGeolocShowOptions = function (a) { a = this.container.getElementsByTagName("button"); for (var b = null, c = 0; c < a.length; c++) { var d = a[c].getAttribute("data-id"); if (d && d.toUpperCase() === netgis.Commands.GEOLOCATION) { b = a[c]; break; } } b && (this.popupGeoloc.isVisible() ? this.popupGeoloc.hide() : (this.popupGeoloc.show(), (a = b.getBoundingClientRect()), this.popupGeoloc.setPosition(a.x + 4, a.y + 0.3 * a.height))); }; netgis.Controls.prototype.onParentPointerDown = function (a) { netgis.util.insideElement(this.container, a.clientX, a.clientY) || (this.popupGeoloc && this.popupGeoloc.hide()); }; netgis.Controls.prototype.onInputGeolocActiveChange = function (a) { a = a.currentTarget; netgis.util.invoke(a, netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, { on: a.checked }); }; netgis.Controls.prototype.onInputGeolocCenterChange = function (a) { a = a.currentTarget; netgis.util.invoke(a, netgis.Events.GEOLOCATION_TOGGLE_CENTER, { on: a.checked }); }; netgis.Controls.prototype.onGeolocToggleActive = function (a) { a.target !== this.inputGeolocActive && (this.inputGeolocActive.checked = a.detail.on); }; netgis.Controls.prototype.onGeolocToggleCenter = function (a) { a.target !== this.inputGeolocCenter && (this.inputGeolocCenter.checked = a.detail.on); }; netgis = netgis || {}; netgis.Events = { CLIENT_CONTEXT_RESPONSE: "client-context-response", CLIENT_SET_MODE: "client-set-mode", PLUGIN_TOGGLE: "plugin-toggle", CONTROLS_BUTTON_CLICK: "controls-button-click", MAP_ZOOM: "map-zoom", MAP_ZOOM_HOME: "map-zoom-home", MAP_ZOOM_LONLAT: "map-zoom-lonlat", MAP_ZOOM_SCALE: "map-zoom-scale", MAP_ZOOM_LAYER: "map-zoom-layer", MAP_ZOOM_LEVEL: "map-zoom-level", MAP_LAYER_CREATE: "map-layer-create", MAP_LAYER_TOGGLE: "map-layer-toggle", MAP_LAYER_TRANSPARENCY: "map-layer-transparency", MAP_LAYER_ORDER: "map-layer-order", MAP_LAYER_DELETE: "map-layer-delete", MAP_VIEW_CHANGE: "map-view-change", MAP_VIEW_NEXT: "map-view-next", MAP_VIEW_PREV: "map-view-prev", MAP_CLICK: "map-click", MAP_FEATURE_ENTER: "map-feature-enter", MAP_FEATURE_CLICK: "map-feature-click", MAP_FEATURE_LEAVE: "map-feature-leave", MAP_SNAP_TOGGLE: "map-snap-toggle", MAP_EDIT_LAYER_CHANGE: "map-edit-layer-change", MAP_EDIT_LAYER_LOADED: "map-edit-layer-loaded", MAP_COPY_FEATURE_TO_EDIT: "map-copy-feature-to-edit", PANEL_TOGGLE: "panel-toggle", PANEL_RESIZE: "panel-resize", WINDOW_TOGGLE: "window-toggle", WINDOW_RESIZE: "window-resize", TREE_ITEM_CHANGE: "tree-item-change", TREE_ITEM_SLIDER_CHANGE: "tree-item-slider-change", TREE_ITEM_ORDER_CHANGE: "tree-item-order-change", TREE_BUTTON_CLICK: "tree-button-click", LAYERTREE_TOGGLE: "layertree-toggle", LEGEND_TOGGLE: "legend-toggle", GEOLOCATION_SHOW_OPTIONS: "geolocation-show-options", GEOLOCATION_TOGGLE_ACTIVE: "geolocation-toggle-active", GEOLOCATION_TOGGLE_CENTER: "geolocation-toggle-center", GEOLOCATION_CHANGE: "geolocation-change", TOOLBOX_TOGGLE: "toolbox-toggle", TOOLBOX_BUTTON_CLICK: "toolbox-button-click", MENU_BUTTON_CLICK: "menu-button-click", MENU_CHECKBOX_CHANGE: "menu-checkbox-change", MENU_SELECT_CHANGE: "menu-select-change", CONTEXTMENU_SHOW: "contextmenu-show", CONTEXTMENU_BUTTON_CLICK: "contextmenu-button-click", CONTEXTMENU_CHECKBOX_CHANGE: "contextmenu-checkbox-change", CONTEXTMENU_SLIDER_CHANGE: "contextmenu-slider-change", SEARCH_CHANGE: "search-change", SEARCH_SELECT: "search-select", SEARCH_CLEAR: "search-clear", SEARCHPLACE_TOGGLE: "searchplace-toggle", SEARCHPARCEL_TOGGLE: "searchparcel-toggle", SEARCHPARCEL_RESET: "searchparcel-reset", SEARCHPARCEL_PARCELS_RESPONSE: "searchparcel-parcels-response", SEARCHPARCEL_ITEM_ENTER: "searchparcel-item-enter", SEARCHPARCEL_ITEM_LEAVE: "searchparcel-item-leave", SEARCHPARCEL_ITEM_CLICK: "searchparcel-item-click", SEARCHPARCEL_ITEM_IMPORT: "searchparcel-item-import", MEASURE_CLEAR: "measure-clear", SELECT_MULTI_TOGGLE: "select-multi-toggle", DRAW_BUFFER_TOGGLE: "draw-buffer-toggle", DRAW_BUFFER_CHANGE: "draw-buffer-change", BUFFER_CHANGE: "buffer-change", BUFFER_ACCEPT: "buffer-accept", IMPORT_LAYER_SHOW: "import-layer-show", IMPORT_LAYER_ACCEPT: "import-layer-accept", IMPORT_LAYER_PREVIEW: "import-layer-preview", IMPORT_LAYER_PREVIEW_FEATURES: "import-layer-preview-features", IMPORT_GEOPORTAL_SUBMIT: "import-geoportal-submit", EXPORT_SHOW: "export-show", EXPORT_BEGIN: "export-begin", EXPORT_END: "export-end", TIMESLIDER_SHOW: "timeslider-show", TIMESLIDER_HIDE: "timeslider-hide", TIMESLIDER_SELECT: "timeslider-select", }; netgis = netgis || {}; netgis.Export = function (a) { this.config = a; this.initElements(a); this.initSections(); }; netgis.Export.Config = { title: "Export", logo: "", gif_worker: "/libs/gifjs/0.2.0/gif.worker.js", default_filename: "Export", default_margin: 10, }; netgis.Export.prototype.initElements = function (a) { a = a["export"]; this.modal = new netgis.Modal(a.title ? a.title : "Export"); this.modal.container.classList.add("netgis-export"); this.tabs = new netgis.Tabs(["PDF", "JPEG", "PNG", "GIF", "GeoJSON"]); this.tabs.container.style.position = "absolute"; this.tabs.container.style.left = "0mm"; this.tabs.container.style.right = "0mm"; this.tabs.container.style.top = "12mm"; this.tabs.container.style.bottom = "0mm"; this.tabs.attachTo(this.modal.content); }; netgis.Export.prototype.initSections = function () { this.sections = {}; var a = 0; this.sections.pdf = this.tabs.getContentSection(a); a += 1; this.addInputNumber(this.sections.pdf, "Breite (Pixel):", 1600, 0); this.addInputNumber(this.sections.pdf, "H\u00f6he (Pixel):", 900, 0); this.addInputNumber(this.sections.pdf, "Seitenr\u00e4nder (Millimeter):", 10, 0); this.addCheckbox(this.sections.pdf, "Querformat", !0); this.addButton( this.sections.pdf, "Exportieren", this.onExportClickPDF.bind(this) ); this.sections.jpeg = this.tabs.getContentSection(a); a += 1; this.addInputNumber(this.sections.jpeg, "Breite (Pixel):", 1600, 0); this.addInputNumber(this.sections.jpeg, "H\u00f6he (Pixel):", 900, 0); this.addCheckbox(this.sections.jpeg, "Querformat", !0); this.addButton( this.sections.jpeg, "Exportieren", this.onExportClickJPEG.bind(this) ); this.sections.png = this.tabs.getContentSection(a); a += 1; this.addInputNumber(this.sections.png, "Breite (Pixel):", 1600, 0); this.addInputNumber(this.sections.png, "H\u00f6he (Pixel):", 900, 0); this.addCheckbox(this.sections.png, "Querformat", !0); this.addButton( this.sections.png, "Exportieren", this.onExportClickPNG.bind(this) ); this.sections.gif = this.tabs.getContentSection(a); a += 1; this.addInputNumber(this.sections.gif, "Breite (Pixel):", 1600, 0); this.addInputNumber(this.sections.gif, "H\u00f6he (Pixel):", 900, 0); this.addCheckbox(this.sections.gif, "Querformat", !0); this.addButton( this.sections.gif, "Exportieren", this.onExportClickGIF.bind(this) ); this.sections.geojson = this.tabs.getContentSection(a); this.addCheckbox(this.sections.geojson, "Nicht-Editierbare Geometrien einbeziehen", !1); this.addButton( this.sections.geojson, "Exportieren", this.onExportClickGeoJSON.bind(this) ); }; netgis.Export.prototype.attachTo = function (a) { a.appendChild(this.modal.container); a.addEventListener(netgis.Events.EXPORT_SHOW, this.onExportShow.bind(this)); a.addEventListener(netgis.Events.EXPORT_END, this.onExportEnd.bind(this)); }; netgis.Export.prototype.addText = function (a, b) { var c = document.createElement("div"); c.innerHTML = b; a.appendChild(c); return c; }; netgis.Export.prototype.addButton = function (a, b, c) { var d = document.createElement("button"); d.className = "netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow"; d.setAttribute("type", "button"); d.innerHTML = b; c && (d.onclick = c); a.appendChild(d); return d; }; netgis.Export.prototype.addInputText = function (a, b, c) { var d = document.createElement("label"); d.innerHTML = b; var e = document.createElement("input"); e.setAttribute("type", "text"); d.appendChild(e); if (c) { b = "list-" + netgis.util.stringToID(b); var f = document.createElement("datalist"); f.setAttribute("id", b); for (var g = 0; g < c.length; g++) { var h = document.createElement("option"); h.setAttribute("value", c[g]); f.appendChild(h); } a.appendChild(f); e.setAttribute("list", b); } a.appendChild(d); return e; }; netgis.Export.prototype.addInputNumber = function (a, b, c, d, e) { var f = document.createElement("label"); f.innerHTML = b; b = document.createElement("input"); b.setAttribute("type", "number"); (d || 0 === d) && b.setAttribute("min", d); e && b.setAttribute("max", e); b.setAttribute("value", c); f.appendChild(b); a.appendChild(f); return b; }; netgis.Export.prototype.addCheckbox = function (a, b, c) { var d = document.createElement("label"), e = document.createElement("input"); e.setAttribute("type", "checkbox"); e.checked = c; d.appendChild(e); c = document.createElement("span"); c.innerHTML = b; d.appendChild(c); a.appendChild(d); return e; }; netgis.Export.prototype.onExportShow = function (a) { this.modal.show(); }; netgis.Export.prototype.onExportClickPDF = function (a) { var b = this.sections.pdf.getElementsByTagName("input"); b = { format: "pdf", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), padding: Number.parseInt(b[2].value), landscape: b[3].checked, }; netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b); }; netgis.Export.prototype.onExportClickJPEG = function (a) { var b = this.sections.pdf.getElementsByTagName("input"); b = { format: "jpeg", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), landscape: b[3].checked, }; netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b); }; netgis.Export.prototype.onExportClickPNG = function (a) { var b = this.sections.pdf.getElementsByTagName("input"); b = { format: "png", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), landscape: b[3].checked, }; netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b); }; netgis.Export.prototype.onExportClickGIF = function (a) { var b = this.sections.pdf.getElementsByTagName("input"); b = { format: "gif", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), landscape: b[3].checked, }; netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b); }; netgis.Export.prototype.onExportClickGeoJSON = function (a) { var b = { format: "geojson", nonEdits: this.sections.geojson.getElementsByTagName("input")[0].checked }; netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b); }; netgis.Export.prototype.onExportEnd = function (a) { this.modal.hide(); }; netgis = netgis || {}; netgis.Geolocation = function (a) { this.config = a; this.center = this.active = !1; }; netgis.Geolocation.Config = { marker_color: "#3480eb", marker_title: "Geolocation", timeout: 1e4 }; netgis.Geolocation.prototype.initConfig = function (a) {}; netgis.Geolocation.prototype.attachTo = function (a) { this.container = a; a.addEventListener(netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, this.onGeolocToggleActive.bind(this)); a.addEventListener(netgis.Events.GEOLOCATION_TOGGLE_CENTER, this.onGeolocToggleCenter.bind(this)); }; netgis.Geolocation.prototype.setActive = function (a, b) { var c = this.config.geolocation; a ? navigator.geolocation ? ((this.watch = navigator.geolocation.watchPosition( this.onPositionChange.bind(this), this.onPositionError.bind(this), { timeout: c && c.timeout ? 1e3 * c.timeout : 1e4, maximumAge: 0, enableHighAccuracy: !0 } )), b || netgis.util.invoke(this.container, netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, { on: !0 })) : this.error("Geolocation not supported by this device!") : (this.watch && (navigator.geolocation.clearWatch(this.watch), (this.watch = null)), b || netgis.util.invoke(this.container, netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, { on: !1 })); this.active = a; }; netgis.Geolocation.prototype.isActive = function () { return this.active; }; netgis.Geolocation.prototype.error = function (a) { console.error(a); this.watch && (navigator.geolocation.clearWatch(this.watch), (this.watch = null)); netgis.util.invoke(this.container, netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, { on: !1 }); }; netgis.Geolocation.prototype.onActiveChange = function (a) { this.setActive(a.currentTarget.checked); }; netgis.Geolocation.prototype.onCenterChange = function (a) {}; netgis.Geolocation.prototype.onPositionChange = function (a) { netgis.util.invoke(this.container, netgis.Events.GEOLOCATION_CHANGE, { lon: a.coords.longitude, lat: a.coords.latitude, center: this.center, }); }; netgis.Geolocation.prototype.onPositionError = function (a) { this.error("Geolocation: " + a.message + " (" + a.code + ")"); }; netgis.Geolocation.prototype.onGeolocToggleActive = function (a) { a.target !== this.container && this.setActive(a.detail.on); }; netgis.Geolocation.prototype.onGeolocToggleCenter = function (a) { a.target !== this.container && (this.center = a.detail.on); }; netgis = netgis || {}; netgis.Import = function (a) { this.config = a; this.initElements(a); this.initSections(a); this.initPreview(); }; netgis.Import.Config = { title: "Import Layer", preview: !0, wms_options: [], wfs_options: [], wfs_proxy: "", geopackage_lib: "/libs/geopackage/4.2.3/", geoportal_tab: !0, geoportal_search_url: "", geoportal_autocomplete: !0, }; netgis.Import.prototype.initElements = function (a) { a = a["import"]; this.modal = new netgis.Modal(a.title ? a.title : "Import"); this.modal.container.classList.add("netgis-import"); var b = "WMS WFS GeoJSON GML GeoPackage Spatialite Shapefile".split(" "); a.geoportal_tab && b.unshift("Geoportal"); this.tabs = new netgis.Tabs(b); this.tabs.container.style.position = "absolute"; this.tabs.container.style.left = "0mm"; this.tabs.container.style.right = "0mm"; this.tabs.container.style.top = "12mm"; this.tabs.container.style.bottom = "0mm"; this.tabs.attachTo(this.modal.content); }; netgis.Import.prototype.initSections = function (a) { this.sections = {}; var b = 0; a["import"] && !0 === a["import"].geoportal_tab && ((this.sections.geoportal = this.tabs.getContentSection(b)), (b += 1), this.sections.geoportal.classList.add("netgis-geoportal"), (this.geoportalSearch = new netgis.Search("Thema, Schlagwort...")), this.geoportalSearch.container.addEventListener( netgis.Events.SEARCH_CHANGE, this.onGeoportalSearchChange.bind(this) ), this.geoportalSearch.container.addEventListener( netgis.Events.SEARCH_CLEAR, this.onGeoportalSearchClear.bind(this) ), this.geoportalSearch.attachTo(this.sections.geoportal), (a = document.createElement("span")), (a.innerHTML = "Suche im Datenkatalog:"), this.geoportalSearch.label.insertBefore(a, this.geoportalSearch.label.firstChild), (this.geoportalLoader = document.createElement("div")), (this.geoportalLoader.className = "netgis-loader netgis-text-a netgis-hide"), (this.geoportalLoader.innerHTML = ""), this.sections.geoportal.appendChild(this.geoportalLoader), (this.geoportalResults = new netgis.Tree()), this.geoportalResults.container.addEventListener( netgis.Events.TREE_ITEM_CHANGE, this.onGeoportalTreeItemChange.bind(this) ), this.geoportalResults.attachTo(this.sections.geoportal), (this.geoportalSubmit = this.addButton( this.sections.geoportal, "Hinzuf\u00fcgen", this.onGeoportalSubmit.bind(this) ))); this.sections.wms = this.tabs.getContentSection(b); b += 1; this.addInputText(this.sections.wms, "WMS-URL:", this.config["import"].wms_options); this.addButton( this.sections.wms, "Dienst laden", this.onWMSLoadClick.bind(this) ); this.addInputText(this.sections.wms, "Bezeichnung:"); this.addInputSelect(this.sections.wms, "Ebene:"); this.addInputSelect(this.sections.wms, "Format:"); this.addButton( this.sections.wms, "Hinzuf\u00fcgen", this.onWMSAcceptClick.bind(this) ); this.showDetailsWMS(!1); this.sections.wfs = this.tabs.getContentSection(b); b += 1; this.addInputText(this.sections.wfs, "WFS-URL:", this.config["import"].wfs_options); this.addButton( this.sections.wfs, "Dienst laden", this.onWFSLoadClick.bind(this) ); this.addInputText(this.sections.wfs, "Bezeichnung:"); this.addInputSelect(this.sections.wfs, "Ebene:"); this.addInputSelect(this.sections.wfs, "Format:"); this.addButton( this.sections.wfs, "Hinzuf\u00fcgen", this.onWFSAcceptClick.bind(this) ); this.showDetailsWFS(!1); this.sections.geojson = this.tabs.getContentSection(b); b += 1; this.addInputFile(this.sections.geojson, "GeoJSON-Datei:", ".geojson,.json"); this.addText( this.sections.geojson, "

Unterst\u00fctzte Koordinatensysteme:

" ); this.addButton( this.sections.geojson, "Datei laden", this.onGeoJSONAcceptClick.bind(this) ); this.sections.gml = this.tabs.getContentSection(b); b += 1; this.addInputFile(this.sections.gml, "GML-Datei:", ".gml,.xml"); this.addText( this.sections.gml, "

Unterst\u00fctzte Koordinatensysteme:

" ); this.addButton( this.sections.gml, "Datei laden", this.onGMLAcceptClick.bind(this) ); this.sections.geopackage = this.tabs.getContentSection(b); b += 1; this.addInputFile(this.sections.geopackage, "GeoPackage-Datei:", ".gpkg"); this.addText( this.sections.geopackage, "

Unterst\u00fctzte Koordinatensysteme:

" ); this.addButton( this.sections.geopackage, "Datei laden", this.onGeoPackageAcceptClick.bind(this) ); this.sections.spatialite = this.tabs.getContentSection(b); b += 1; this.addInputFile(this.sections.spatialite, "Spatialite-Datei:", ".sqlite"); this.addText( this.sections.spatialite, "

Unterst\u00fctzte Koordinatensysteme:

" ); this.addButton( this.sections.spatialite, "Datei laden", this.onSpatialiteAcceptClick.bind(this) ); this.sections.shapefile = this.tabs.getContentSection(b); this.addInputFile(this.sections.shapefile, "Shapefile-Zip-Datei:", ".zip"); this.addText( this.sections.shapefile, "

Unterst\u00fctzte Koordinatensysteme:

" ); this.addButton( this.sections.shapefile, "Datei laden", this.onShapefileAcceptClick.bind(this) ); }; netgis.Import.prototype.initPreview = function () { this.preview = new netgis.Modal("Vorschau"); this.preview.attachTo(this.modal.content); this.previewMapContainer = document.createElement("div"); this.previewMapContainer.className = "netgis-preview-map"; this.preview.content.appendChild(this.previewMapContainer); if (ol) { var a = this.config.map; a = { projection: a.projection, center: a.centerLonLat ? ol.proj.fromLonLat(a.centerLonLat) : a.center, zoom: a.zoom, }; this.previewMap = new ol.Map({ target: this.previewMapContainer, view: new ol.View(a), pixelRatio: 1, moveTolerance: 3, controls: [], }); this.previewMap.getView().padding = [10, 10, 10, 10]; this.previewMap.addLayer(new ol.layer.Tile({ source: new ol.source.OSM() })); } this.previewTree = new netgis.Tree(); this.previewTree.container.classList.add("netgis-preview-tree"); this.previewTree.attachTo(this.preview.content); this.previewTree.container.addEventListener( netgis.Events.TREE_ITEM_CHANGE, this.onPreviewTreeItemChange.bind(this) ); this.previewSubmit = document.createElement("button"); this.previewSubmit.setAttribute("type", "button"); this.previewSubmit.className = "netgis-import-submit netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow"; this.previewSubmit.innerHTML = "Hinzuf\u00fcgen"; this.previewSubmit.addEventListener("click", this.onPreviewSubmitClick.bind(this)); this.preview.content.appendChild(this.previewSubmit); }; netgis.Import.prototype.attachTo = function (a) { a.appendChild(this.modal.container); a.addEventListener(netgis.Events.IMPORT_LAYER_SHOW, this.onImportShow.bind(this)); a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES, this.onImportPreviewFeatures.bind(this)); }; netgis.Import.prototype.addText = function (a, b) { var c = document.createElement("div"); c.innerHTML = b; a.appendChild(c); return c; }; netgis.Import.prototype.addButton = function (a, b, c) { var d = document.createElement("button"); d.className = "netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow"; d.setAttribute("type", "button"); d.innerHTML = b; c && (d.onclick = c); a.appendChild(d); return d; }; netgis.Import.prototype.addInputText = function (a, b, c) { var d = document.createElement("label"); d.innerHTML = b; var e = document.createElement("input"); e.setAttribute("type", "text"); d.appendChild(e); if (c) { b = "list-" + netgis.util.stringToID(b); var f = document.createElement("datalist"); f.setAttribute("id", b); for (var g = 0; g < c.length; g++) { var h = document.createElement("option"); h.setAttribute("value", c[g]); f.appendChild(h); } a.appendChild(f); e.setAttribute("list", b); } a.appendChild(d); return e; }; netgis.Import.prototype.addInputSelect = function (a, b, c) { c = document.createElement("label"); c.innerHTML = b; b = document.createElement("select"); c.appendChild(b); a.appendChild(c); return b; }; netgis.Import.prototype.addInputFile = function (a, b, c) { var d = document.createElement("label"); d.innerHTML = b; b = document.createElement("input"); b.setAttribute("type", "file"); b.setAttribute("accept", c); d.appendChild(b); a.appendChild(d); return b; }; netgis.Import.prototype.getLayerOrder = function () { return 1e4; }; netgis.Import.prototype.showDetailsWMS = function (a) { var b = this.sections.wms, c = b.getElementsByTagName("label"); b = b.getElementsByTagName("button"); a ? (c[1].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"), b[1].classList.remove("netgis-hide")) : (c[1].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"), b[1].classList.add("netgis-hide")); }; netgis.Import.prototype.showDetailsWFS = function (a) { var b = this.sections.wfs, c = b.getElementsByTagName("label"); b = b.getElementsByTagName("button"); a ? (c[1].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"), b[1].classList.remove("netgis-hide")) : (c[1].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"), b[1].classList.add("netgis-hide")); }; netgis.Import.prototype.submitImportLayer = function (a) { !0 === this.config["import"].preview ? netgis.util.invoke(this.modal.container, netgis.Events.IMPORT_LAYER_PREVIEW, a) : (this.config.layers.push(a), netgis.util.invoke(this.modal.container, netgis.Events.IMPORT_LAYER_ACCEPT, a), this.modal.hide()); }; netgis.Import.prototype.onImportShow = function (a) { this.modal.show(); this.tabs.updateHeaderScroll(); }; netgis.Import.prototype.onWMSLoadClick = function (a) { this.showDetailsWMS(!1); a = this.sections.wms.getElementsByTagName("input")[0].value; a = a.trim(); if (!(1 > a.length)) { var b = netgis.util.parseURL(a); a = b.base; b = b.parameters; b.push("request=GetCapabilities"); b = b.join("&"); -1 === b.search("service=") && (b += "&service=WMS"); netgis.util.request(a + "?" + b, this.onWMSCapsResponse.bind(this)); } }; netgis.Import.prototype.onWMSCapsResponse = function (a) { var b = new DOMParser().parseFromString(a, "text/xml"), c = b.documentElement; b = b.getElementsByTagName("parsererror"); for (var d = 0; d < b.length; d++) console.error("WMS caps parser error:", b[d].textContent); 0 < b.length && alert(0 < a.length ? a : b[0].textContent); a = this.sections.wms; var e = a.getElementsByTagName("input"); a = a.getElementsByTagName("select"); b = a[0]; a = a[1]; for (d = b.options.length - 1; 0 <= d; d--) b.options.remove(d); for (d = a.options.length - 1; 0 <= d; d--) a.options.remove(d); switch (c.nodeName) { default: case "HTML": console.warn("could not detect WMS service", c); break; case "WMS_Capabilities": case "WMT_MS_Capabilities": c.getAttribute("version"); d = c.getElementsByTagName("Service")[0].getElementsByTagName("Title")[0].textContent; e[1].value = d; d = c.getElementsByTagName("Layer"); for (var f = [], g = 0; g < d.length; g++) { e = d[g]; var h = e.getElementsByTagName("Name")[0].textContent, k = e.getElementsByTagName("Title")[0].textContent; f.push({ name: h, title: k }); e = document.createElement("option"); e.text = k; e.value = h; b.options.add(e); } c = c.getElementsByTagName("GetMap")[0].getElementsByTagName("Format"); b = []; for (d = 0; d < c.length; d++) (e = c[d]), (f = e.textContent), -1 !== f.search("image") && (b.push(f), (e = document.createElement("option")), (e.text = f), (e.value = f), a.options.add(e)); } this.showDetailsWMS(!0); }; netgis.Import.prototype.onWMSAcceptClick = function (a) { a = this.sections.wms; var b = a.getElementsByTagName("input"), c = a.getElementsByTagName("select"), d = "import_" + netgis.util.getTimeStamp(!0), e = b[0].value; b = c[0].selectedOptions[0].innerText; var f = c[0].value; c = c[1].value; e = netgis.util.replace(e, "request=", "oldrequest="); e = netgis.util.replace(e, "Request=", "oldrequest="); var g = netgis.util.parseURL(e); e = g.base; g = g.parameters; g = g.join("&"); -1 === g.search("service=") && (g += "&service=WMS"); e = e + "?" + g; g = { id: d, folder: null, active: !0, query: !0, order: this.getLayerOrder(), type: netgis.LayerTypes.WMS, url: e, title: b, name: f, format: c, tiled: !0, }; this.config.layers.push(g); netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_ACCEPT, g); this.modal.hide(); }; netgis.Import.prototype.onWFSLoadClick = function (a) { this.showDetailsWFS(!1); var b = this.sections.wfs.getElementsByTagName("input")[0].value; b = b.trim(); if (!(1 > b.length)) { var c = b.indexOf("?"); a = -1 < c ? b.substr(0, c) : b; var d = ["request=GetCapabilities"]; if (-1 < c) for (b = b.substr(c + 1), b = b.split("&"), c = 0; c < b.length; c++) { var e = b[c]; e = e.toLowerCase(); -1 < e.search("service") ? d.push(e) : -1 < e.search("version") ? d.push(e) : -1 < e.search("request") || d.push(e); } d = d.join("&"); -1 === d.search("service=") && (d += "&service=WFS"); a = a + "?" + d; this.config["import"].wfs_proxy && (a = this.config["import"].wfs_proxy + a); netgis.util.request(a, this.onWFSCapsResponse.bind(this)); } }; netgis.Import.prototype.onWFSCapsResponse = function (a) { var b = new DOMParser().parseFromString(a, "text/xml"), c = b.documentElement; b = b.getElementsByTagName("parsererror"); for (var d = 0; d < b.length; d++) console.error("WFS caps parser error:", b[d].textContent); 0 < b.length && alert(0 < a.length ? a : b[0].textContent); a = this.sections.wfs; var e = a.getElementsByTagName("input"); a = a.getElementsByTagName("select"); b = a[0]; a = a[1]; for (d = b.options.length - 1; 0 <= d; d--) b.options.remove(d); for (d = a.options.length - 1; 0 <= d; d--) a.options.remove(d); switch (c.nodeName) { default: case "HTML": console.error("could not detect WFS service", c); break; case "WFS_Capabilities": case "wfs:WFS_Capabilities": c.getAttribute("version"); d = c.getElementsByTagName("ows:ServiceIdentification")[0].getElementsByTagName("ows:Title")[0].textContent; e[1].value = d; d = c.getElementsByTagName("FeatureType"); for (var f = [], g = 0; g < d.length; g++) { e = d[g]; var h = e.getElementsByTagName("Name")[0].textContent, k = e.getElementsByTagName("Title")[0].textContent; f.push({ name: h, title: k }); e = document.createElement("option"); e.text = k; e.value = h; b.options.add(e); } c = c.getElementsByTagName("ows:Operation"); b = null; for (e = 0; e < c.length; e++) if ("GetFeature" === c[e].getAttribute("name")) { b = c[e]; break; } c = null; if (b) for (b = b.getElementsByTagName("ows:Parameter"), e = 0; e < b.length; e++) if (((d = b[e]), "outputFormat" === d.getAttribute("name"))) { b = d.getElementsByTagName("ows:Value"); for (d = 0; d < b.length; d++) (e = b[d]), (f = e.textContent), (e = document.createElement("option")), (e.text = f), (e.value = f), a.options.add(e), -1 < f.search("json") && (c = f); break; } c && (a.value = c); } this.showDetailsWFS(!0); }; netgis.Import.prototype.onWFSAcceptClick = function (a) { a = this.sections.wfs; var b = a.getElementsByTagName("input"), c = a.getElementsByTagName("select"), d = "import_" + netgis.util.getTimeStamp(!0); b = b[0].value; var e = c[0].selectedOptions[0].innerText, f = c[0].value; c = c[1].value; b = netgis.util.replace(b, "request=", "oldrequest="); b = netgis.util.replace(b, "Request=", "oldrequest="); this.config["import"].wfs_proxy && (b = this.config["import"].wfs_proxy + b); d = { id: d, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: e, type: netgis.LayerTypes.WFS, url: b, name: f, format: c, }; this.config.layers.push(d); netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_ACCEPT, d); this.modal.hide(); }; netgis.Import.prototype.onGeoJSONAcceptClick = function (a) { if ((a = this.sections.geojson.getElementsByTagName("input")[0].files[0])) { var b = new FileReader(); b.title = a.name; b.onload = this.onGeoJSONLoad.bind(this); b.readAsText(a); } else alert("No file selected!"); }; netgis.Import.prototype.onGeoJSONLoad = function (a) { var b = a.target; a = b.title; b = b.result; a = { id: "import_" + netgis.util.getTimeStamp(!0), folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: a, type: netgis.LayerTypes.GEOJSON, data: b, }; this.submitImportLayer(a); }; netgis.Import.prototype.onGMLAcceptClick = function (a) { if ((a = this.sections.gml.getElementsByTagName("input")[0].files[0])) { var b = new FileReader(); b.title = a.name; b.onload = this.onGMLLoad.bind(this); b.readAsText(a); } else alert("No file selected!"); }; netgis.Import.prototype.onGMLLoad = function (a) { var b = a.target; a = b.result; var c = "import_" + netgis.util.getTimeStamp(!0); b = b.title; a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.GML, data: a, }; this.submitImportLayer(a); }; netgis.Import.prototype.onGeoPackageAcceptClick = function (a) { if ((a = this.sections.geopackage.getElementsByTagName("input")[0].files[0])) { var b = new FileReader(); b.title = a.name; b.onload = this.onGeoPackageLoad.bind(this); b.readAsArrayBuffer(a); } else alert("No file selected!"); }; netgis.Import.prototype.onGeoPackageLoad = function (a) { var b = a.target; a = b.result; var c = "import_" + netgis.util.getTimeStamp(!0); b = b.title; a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.GEOPACKAGE, data: a, }; this.submitImportLayer(a); }; netgis.Import.prototype.onSpatialiteAcceptClick = function (a) { if ((a = this.sections.spatialite.getElementsByTagName("input")[0].files[0])) { var b = new FileReader(); b.title = a.name; b.onload = this.onSpatialiteLoad.bind(this); b.readAsArrayBuffer(a); } else alert("No file selected!"); }; netgis.Import.prototype.onSpatialiteLoad = function (a) { var b = a.target; a = b.result; var c = "import_" + netgis.util.getTimeStamp(!0); b = b.title; a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.SPATIALITE, data: a, }; this.submitImportLayer(a); }; netgis.Import.prototype.onShapefileAcceptClick = function (a) { if ((a = this.sections.shapefile.getElementsByTagName("input")[0].files[0])) { var b = new FileReader(); b.title = a.name; b.onload = this.onShapefileLoad.bind(this); b.readAsArrayBuffer(a); } else alert("No file selected!"); }; netgis.Import.prototype.onShapefileLoad = function (a) { var b = a.target; a = b.result; var c = "import_" + netgis.util.getTimeStamp(!0); b = b.title; a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.SHAPEFILE, data: a, }; this.submitImportLayer(a); }; /* Import feature*/ netgis.Import.prototype.onImportPreviewFeatures = function (a) { var b = a.detail, c = b.layer; this.previewTree.clear(); a = this.previewMap.getLayers().getArray(); for (var d = 1; d < a.length; d++) this.previewMap.removeLayer(a[d]); if (ol) { a = this.config.styles["import"]; a = new ol.style.Style({ fill: new ol.style.Fill({ color: a.fill }), stroke: new ol.style.Stroke({ color: a.stroke, width: a.width }), }); c.setStyle(a); this.previewMap.addLayer(c); var e = this.previewTree.addFolder(null, b.id, b.title); a = c.getSource().getFeatures(); if (0 === a.length) { var f = this; c.getSource().on("addfeature", function (a) { f.featureLoadTimeout && window.clearTimeout(f.featureLoadTimeout); f.featureLoadTimeout = window.setTimeout(function () { var a = c.getSource().getFeatures(); f.updatePreviewFeatures(a, e, c, b); f.featureLoadTimeout = null; }, 100); }); } else this.updatePreviewFeatures(a, e, c, b); } else console.error("import preview only supported with OL map renderer", c); }; netgis.Import.prototype.updatePreviewFeatures = function (a, b, c, d) { for (var e = 0; e < a.length; e++) { var f = a[e], g = f.getId(), h = f.getProperties(); g || ((g = e + 1), f.setId(g)); var k = null, l; for (l in h) switch (l.toLowerCase()) { case "name": k = h[l]; break; case "title": k = h[l]; break; case "id": k = h[l]; break; case "gid": k = h[l]; break; case "oid": k = h[l]; break; case "objectid": k = h[l]; } k || (k = g); h = f.getGeometry(); if (h instanceof ol.geom.Polygon || h instanceof ol.geom.MultiPolygon) k += " (" + netgis.util.formatArea(h.getArea()) + ")"; else if (h instanceof ol.geom.LineString) k += " (" + netgis.util.formatArea(h.getLength()) + ")"; else if (h instanceof ol.geom.MultiLineString) { f = 0; h = h.getLineStrings(); for (var m = 0; m < h.length; m++) f += h[m].getLength(); k += " (" + netgis.util.formatArea(f) + ")"; } this.previewTree.addCheckbox(b, g, "Feature " + k, !0); } this.previewTree.setFolderOpen(d.id, !0); this.previewTree.updateFolderChecks(); this.preview.show(); this.previewMap.updateSize(); this.previewMap.getView().fit(c.getSource().getExtent()); }; netgis.Import.prototype.onPreviewSubmitClick = function (a) { var b = this.previewTree.container.getElementsByClassName("netgis-folder")[0]; a = b.getAttribute("data-id"); b = b.getElementsByTagName("span")[0].innerText; for ( var c = this.previewTree.container.getElementsByTagName("input"), d = this.previewMap.getLayers().getArray()[1].getSource(), e = [], f = 1; f < c.length; f++ ) { var g = c[f]; g.checked && ((g = g.getAttribute("data-id")), (g = d.getFeatureById(g)), e.push(g)); } c = new ol.format.GeoJSON().writeFeaturesObject(e); d = this.previewMap.getView().getProjection().getCode(); c.crs = { type: "name", properties: { name: "urn:ogc:def:crs:" + d.replace(":", "::") } }; a = { id: a, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.GEOJSON, data: c, }; this.config.layers.push(a); netgis.util.invoke(this.preview.container, netgis.Events.IMPORT_LAYER_ACCEPT, a); this.preview.hide(); this.modal.hide(); }; netgis.Import.prototype.onPreviewTreeItemChange = function (a) { a = a.detail; var b = this.previewMap.getLayers().getArray()[1].getSource().getFeatureById(a.id); a.checked ? b.setStyle(null) : b.setStyle(new ol.style.Style({})); }; netgis.Import.prototype.onGeoportalSearchKeyUp = function (a) { switch (a.keyCode) { case 13: break; case 27: break; default: this.onGeoportalSearchChange(); } }; netgis.Import.prototype.onGeoportalSearchChange = function (a) { a = a.detail.query; if (0 < a.length) { this.geoportalLoader.classList.remove("netgis-hide"); a = netgis.util.replace(a, " ", ","); var b = this.config["import"].geoportal_search_url; b = netgis.util.replace(b, "{query}", window.encodeURIComponent(a)); netgis.util.request(b, this.onGeoportalSearchResponse.bind(this)); this.geoportalSearch.showClearButton(!0); } }; netgis.Import.prototype.onGeoportalSearchClear = function (a) { this.geoportalResults.clear(); }; netgis.Import.prototype.onGeoportalSearchResponse = function (a) { function b(a) { if (a && a.layer) for (var c = 0; c < a.layer.length; c++) b(a.layer[c]); else a && e.push(a); return e.length; } a = JSON.parse(a); this.geoportalResults.clear(); this.geoportalDataRaw = a = a.wms.srv; this.geoportalData = []; for (var c = 0; c < a.length; c++) { var d = a[c]; var e = []; var f = b(d); f = this.geoportalResults.addFolder(null, c, d.title + " (" + f + ")"); f.setAttribute("title", d["abstract"]); for (var g = 0; g < e.length; g++) this.geoportalResults.addCheckbox(f, g, e[g].title); d.children = e; this.geoportalData.push(d); } this.geoportalLoader.classList.add("netgis-hide"); }; netgis.Import.prototype.onGeoportalTreeItemChange = function (a) { a = this.geoportalResults.container.getElementsByClassName("netgis-item"); for (var b = 0, c = 0; c < a.length; c++) a[c].getElementsByTagName("input")[0].checked && (b += 1); this.geoportalSubmit.getElementsByClassName("netgis-count")[0].innerHTML = 0 === b ? "" : " (" + b + ")"; }; netgis.Import.prototype.onGeoportalSubmit = function (a) { a = this.geoportalResults.container.getElementsByClassName("netgis-item"); for (var b = 0, c = 0; c < a.length; c++) { var d = a[c], e = d.getElementsByTagName("input")[0]; if (e.checked) { b += 1; e = e.getAttribute("data-id"); d = d.parentNode.parentNode.parentNode.getAttribute("data-id"); var f = this.geoportalData[d], g = f.children[e], h = f.title; f = f.getMapUrl; var k = g.name; g = g.title; d = "geoportal_" + d; e = d + "_" + e; netgis.util.invoke(this.sections.geoportal, netgis.Events.IMPORT_GEOPORTAL_SUBMIT, { folder: { id: d, title: h }, layer: { id: e, url: f, name: k, title: g }, }); } } 0 < b && this.modal.hide(); }; netgis = netgis || {}; netgis.Info = function (a) { this.config = a; this.queryLayers = {}; this.popup = new netgis.Popup(); this.popup.setHeader("Abfrage"); this.initConfig(a); }; netgis.Info.Config = { default_format: "text/plain", proxy: "" }; netgis.Info.prototype.initConfig = function (a) { a = a.layers; for (var b = a.length - 1; 0 <= b; b--) { var c = a[b]; !0 === c.active && this.isLayerQueryable(c) ? (this.queryLayers[c.id] = c) : this.queryLayers[c.id] && delete this.queryLayers[c.id]; } }; netgis.Info.prototype.attachTo = function (a) { this.popup.attachTo(a); a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onClientContextResponse.bind(this)); a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_CREATE, this.onMapLayerCreate.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_DELETE, this.onMapLayerDelete.bind(this)); a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT, this.onImportLayerAccept.bind(this)); a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT, this.onImportGeoportalSubmit.bind(this)); a.addEventListener(netgis.Events.MAP_CLICK, this.onMapClick.bind(this)); a.addEventListener(netgis.Events.MAP_FEATURE_CLICK, this.onMapFeatureClick.bind(this)); }; netgis.Info.prototype.isLayerQueryable = function (a) { var b = !1; if (!0 === a.query) b = !0; else if (!1 !== a.query) switch (a.type) { case netgis.LayerTypes.WMS: case netgis.LayerTypes.WMST: b = !0; } return b; }; netgis.Info.prototype.addSection = function (a, b, c) { this.popup.addContent( [ !0 === c ? "
" : "
", "", a, "
", b, "
", ].join("") ); }; netgis.Info.prototype.onClientContextResponse = function (a) { this.initConfig(a.detail.context.config); }; netgis.Info.prototype.onClientSetMode = function (a) { this.popup.hide(); }; netgis.Info.prototype.onMapLayerToggle = function (a) { var b = a.detail; a = b.id; if (b.on) { b = this.config.layers; for (var c = null, d = 0; d < b.length; d++) if (b[d].id === a) { c = b[d]; break; } c && this.isLayerQueryable(c) && (this.queryLayers[a] = c); } else delete this.queryLayers[a]; }; netgis.Info.prototype.onMapLayerCreate = function (a) { a = a.detail; this.isLayerQueryable(a) && (this.queryLayers[a.id] = a); }; netgis.Info.prototype.onMapLayerDelete = function (a) { delete this.queryLayers[a.detail.id]; }; netgis.Info.prototype.onImportLayerAccept = function (a) { a = a.detail; this.isLayerQueryable(a) && (this.queryLayers[a.id] = a); }; netgis.Info.prototype.onImportGeoportalSubmit = function (a) {}; netgis.Info.prototype.onMapClick = function (a) { a = a.detail; if (a.mode === netgis.Modes.SEARCH_PARCEL) this.popup.clearContent(), this.popup.hide(); else if (a.mode === netgis.Modes.VIEW) { var b = this.config.info; this.popup.container !== a.overlay && this.popup.attachTo(a.overlay); this.popup.clearContent(); var c = 0, d; for (d in this.queryLayers) { var e = this.queryLayers[d]; if (a.info && a.info[d]) { var f = a.info[d]; b.proxy && 0 < b.proxy.length && (f = b.proxy + f); netgis.util.request(f, this.onLayerResponseWMS.bind(this), { title: e.title }); c += 1; } else { if (!e.query_url || "" === e.query_url) switch (e.type) { case netgis.LayerTypes.WMS: case netgis.LayerTypes.WMST: f = e.url; var g = [ "SERVICE=WMS", "VERSION=1.1.1", "REQUEST=GetFeatureInfo", "STYLES=", "LAYERS=" + window.encodeURIComponent(e.name), "QUERY_LAYERS=" + window.encodeURIComponent(e.name), "BBOX=" + a.view.bbox.join(","), "SRS=" + a.view.projection, "WIDTH=" + a.view.width, "HEIGHT=" + a.view.height, "X=" + Math.round(a.pixel[0]), "Y=" + Math.round(a.pixel[1]), "INFO_FORMAT=" + (b && b.default_format ? b.default_format : "text/plain"), ]; f = f + (-1 === f.indexOf("?") ? "?" : "") + g.join("&"); b.proxy && 0 < b.proxy.length && (f = b.proxy + f); netgis.util.request(f, this.onLayerResponseWMS.bind(this), { title: e.title }); c += 1; } (f = e.query_url) && "" !== f && ((f = netgis.util.replace(f, "{bbox}", a.view.bbox.join(","))), (f = netgis.util.replace(f, "{proj}", a.view.projection)), (f = netgis.util.replace(f, "{width}", a.view.width)), (f = netgis.util.replace(f, "{height}", a.view.height)), (f = netgis.util.replace(f, "{x}", a.coords[0])), (f = netgis.util.replace(f, "{y}", a.coords[1])), (f = netgis.util.replace(f, "{px}", a.pixel[0])), (f = netgis.util.replace(f, "{py}", a.pixel[1])), (f = netgis.util.replace(f, "{lon}", a.lon)), (f = netgis.util.replace(f, "{lat}", a.lat)), b.proxy && 0 < b.proxy.length && (f = b.proxy + f), netgis.util.request(f, this.onLayerResponseWMS.bind(this), { title: e.title }), (c += 1)); } } 0 < c ? (this.popup.showLoader(), this.popup.show()) : this.popup.hide(); } }; netgis.Info.prototype.onMapFeatureClick = function (a) { var b = a.detail, c = b.properties; if (b.mode === netgis.Modes.SEARCH_PARCEL) this.popup.clearContent(), this.popup.hide(); else { a = null; var d = [], e = "geometry fill fill-opacity stroke stroke-opacity stroke-width styleUrl".split(" "); for (g in c) if (!(-1 < e.indexOf(g))) { var f = c[g]; d.push([g, f]); a || ("name" === g && "" !== f ? (a = f) : "title" === g && "" !== f ? (a = f) : "id" === g && f && (a = f)); } !a && b.id && (a = b.id); a = a ? 'Feature "' + a + '"' : "Feature"; "geolocation" === b.id && (((a = this.config.geolocation.marker_title) && "" !== a) || (a = "Geolocation"), d.push(["L\u00e4ngengrad (Lon.)", b.lon]), d.push(["Breitengrad (Lat.)", b.lat])); b = []; if (0 < d.length) { b.push(""); for (c = 0; c < d.length; c++) { f = d[c]; var g = f[0]; f = f[1]; b.push(""); b.push(""); b.push(""); b.push(""); } b.push("
" + g + "" + f + "
"); } else b.push("Keine Eigenschaften vorhanden..."); b = b.join(""); this.addSection(a, b, !1); !this.popup.isVisible() && this.popup.show(); } }; netgis.Info.prototype.onLayerResponseWMS = function (a, b, c) { b = b.title; if ((c = c.getResponseHeader("Content-Type"))) switch (c.split(";")[0]) { case "text/plain": a = "
" + a + "
"; } this.popup.hideLoader(); this.addSection(b, a, !1); }; netgis = netgis || {}; netgis.LayerID = { EDITABLE: "editable-layer", NON_EDITABLE: "non-editable-layer" }; netgis = netgis || {}; netgis.LayerTree = function (a) { this.config = a; this.importFolder = null; this.initElements(a); this.initFolders(); this.initConfig(a); }; netgis.LayerTree.Config = { open: !1, title: "Layers", buttons: [] }; netgis.LayerTree.Folders = []; netgis.LayerTree.prototype.initElements = function (a) { a = a.layertree; this.panel = new netgis.Panel("Layers"); this.tree = new netgis.Tree(a.draggable); this.tree.attachTo(this.panel.content); this.tree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE, this.onTreeItemChange.bind(this)); this.tree.container.addEventListener(netgis.Events.TREE_ITEM_SLIDER_CHANGE, this.onTreeItemSliderChange.bind(this)); this.tree.container.addEventListener(netgis.Events.TREE_ITEM_ORDER_CHANGE, this.onTreeItemOrderChange.bind(this)); !0 === a.draggable && (this.panel.content.addEventListener("dragover", this.onDragOver.bind(this)), this.panel.content.addEventListener("drop", this.onDragDrop.bind(this))); }; netgis.LayerTree.prototype.initFolders = function () { this.editFolder = this.tree.addFolder(null, "edit-folder", "Zeichnung", !0, !0); this.tree.addCheckbox(this.editFolder, netgis.LayerID.EDITABLE, "Editierbar"); this.tree.setItemChecked(netgis.LayerID.EDITABLE, !0); this.tree.addCheckbox(this.editFolder, netgis.LayerID.NON_EDITABLE, "Nicht-Editierbar"); this.tree.setItemChecked(netgis.LayerID.NON_EDITABLE, !0); this.editFolder.classList.add("netgis-hide"); }; netgis.LayerTree.prototype.initConfig = function (a, b) { var c = a.layertree; c && c.title && this.panel.setTitle(c.title); var d = a.folders, e = {}; if (d) { for (var f = 0; f < d.length; f++) { var g = d[f], h = this.tree.addFolder(null, g.id, g.title, b, !1, g.draggable); e[g.id] = h; !0 === g.open && this.tree.setFolderOpen(g.id, !0); } for (f = 0; f < d.length; f++) (g = d[f]), (h = g.id), (g = g.parent), -1 === g && (g = null), "" === g && (g = null), g && this.tree.setFolderParent(e[h], e[g]); } if ((b = a.layers)) for (f = 0; f < b.length; f++) { var k = b[f]; g = e[k.folder] ? e[k.folder] : null; h = k.id ? k.id : f.toString(); var l = !1; if (g) for (var m = 0; m < d.length; m++) { var n = d[m]; n.id === k.folder && (l = n.radio); } m = k.title; n = ''; a.layertree && a.layertree.query_icon && (n = a.layertree.query_icon); (!0 === k.query || (k.query_url && "" !== k.query_url)) && n && "" !== n && (m += '' + n + ""); h = !0 === l ? this.tree.addRadioButton(g, h, m, k.active, this.createDefaultDetails(k, !0, !1)) : this.tree.addCheckbox(g, h, m, k.active, !1, this.createDefaultDetails(k, !0, !0)); h.addEventListener("contextmenu", this.onTreeItemMenu.bind(this)); !0 === k.hidden && h.classList.add("netgis-hide"); } this.tree.updateFolderChecks(); if (c && c.buttons) for (a = a.layertree.buttons, f = 0; f < a.length; f++) (d = a[f]), this.tree.addButton(null, d.id, d.title, this.onTreeButtonClick.bind(this)); c && !0 === c.open && this.panel.show(); }; netgis.LayerTree.prototype.attachTo = function (a) { this.panel.attachTo(a); a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onClientContextResponse.bind(this)); a.addEventListener(netgis.Events.LAYERTREE_TOGGLE, this.onLayerTreeToggle.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_CREATE, this.onMapLayerCreate.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT, this.onImportLayerAccept.bind(this)); a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT, this.onImportGeoportalSubmit.bind(this)); a.addEventListener(netgis.Events.CONTEXTMENU_SLIDER_CHANGE, this.onContextMenuSliderChange.bind(this)); a.addEventListener(netgis.Events.MAP_EDIT_LAYER_LOADED, this.onMapEditLayerChange.bind(this)); a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onMapEditLayerChange.bind(this)); }; netgis.LayerTree.prototype.createDefaultDetails = function (a, b, c) { var d = []; !0 === b && d.push({ title: " Transparenz:", type: "slider", val: a.transparency ? Math.round(100 * a.transparency) : 0, }); !0 === c && d.push({ title: " Entfernen", type: "button", callback: this.onTreeItemDeleteClick.bind(this), }); return d; }; netgis.LayerTree.prototype.onTreeItemChange = function (a) { var b = a.detail; netgis.util.invoke(a.target, netgis.Events.MAP_LAYER_TOGGLE, { id: b.id, on: b.checked }); }; netgis.LayerTree.prototype.onClientContextResponse = function (a) { this.initConfig(a.detail.context.config, !0); }; netgis.LayerTree.prototype.onLayerTreeToggle = function (a) { this.panel.toggle(); }; netgis.LayerTree.prototype.onTreeButtonClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); netgis.Client.handleCommand(a, b); }; netgis.LayerTree.prototype.onMapLayerCreate = function (a) { this.addLayerItem(a.detail, null); }; netgis.LayerTree.prototype.onMapLayerToggle = function (a) { a = a.detail; this.tree.setItemChecked(a.id, a.on, !0); this.tree.updateFolderChecks(); }; netgis.LayerTree.prototype.onImportLayerAccept = function (a) { a = a.detail; this.importFolder || (this.importFolder = this.tree.addFolder(null, "_import", "Import", !0, !1)); this.addLayerItem(a, this.importFolder); this.tree.updateFolderChecks(); }; netgis.LayerTree.prototype.addLayerItem = function (a, b) { var c = a.title, d = ''; config = this.config; config.layertree && config.layertree.query_icon && (d = config.layertree.query_icon); (!0 === a.query || (a.query_url && "" !== a.query_url)) && d && "" !== d && (c += '' + d + ""); this.tree .addCheckbox(b, a.id, c, !0, !0, this.createDefaultDetails(a, !0, !0)) .addEventListener("contextmenu", this.onTreeItemMenu.bind(this)); }; netgis.LayerTree.prototype.onImportGeoportalSubmit = function (a) { a = a.detail; var b = a.folder.id, c = this.tree.getFolder(b); c || (c = this.tree.addFolder(null, b, a.folder.title, !0, !1)); var d = a.layer.id; b = { id: d, folder: b, title: a.layer.title, active: !0, type: netgis.LayerTypes.WMS, url: a.layer.url, name: a.layer.name, order: 1e4, transparency: 0, }; this.config.layers.push(b); this.tree.addCheckbox(c, d, a.layer.title, !1, !1, this.createDefaultDetails(b, !0, !0)); this.tree.setItemChecked(d, !0, !1); }; netgis.LayerTree.prototype.onTreeItemMenu = function (a) { a.preventDefault(); return !1; }; netgis.LayerTree.prototype.onContextMenuSliderChange = function (a) { var b = a.detail; a = 0.01 * b.val; var c = null; 0 === b.id.indexOf("layer_trans_") && (c = b.id.split("layer_trans_")[1]); b = this.config.layers; for (var d = 0; d < b.length; d++) { var e = b[d]; if (e.id === c) { e.transparency = a; break; } } netgis.util.invoke(this.tree.container, netgis.Events.MAP_LAYER_TRANSPARENCY, { id: c, transparency: a }); }; netgis.LayerTree.prototype.onTreeItemSliderChange = function (a) { var b = a.detail; a = b.id; b = 0.01 * b.val; for (var c = this.config.layers, d = 0; d < c.length; d++) { var e = c[d]; if (e.id === a) { e.transparency = b; break; } } netgis.util.invoke(this.tree.container, netgis.Events.MAP_LAYER_TRANSPARENCY, { id: a, transparency: b }); }; netgis.LayerTree.prototype.onTreeItemOrderChange = function (a) { a = a.detail.items; for (var b = this.config.layers, c = a.length, d = 0; d < a.length; d++) { for (var e = a[d].getElementsByTagName("input")[0].getAttribute("data-id"), f = 0; f < b.length; f++) { var g = b[f]; g.id === e && ((g.order = c), netgis.util.invoke(this.tree.container, netgis.Events.MAP_LAYER_ORDER, { id: e, order: c })); } c--; } }; netgis.LayerTree.prototype.onTreeItemDeleteClick = function (a) { a = a.currentTarget.parentNode.parentNode.parentNode.parentNode .getElementsByTagName("input")[0] .getAttribute("data-id"); netgis.util.invoke(this.tree.container, netgis.Events.MAP_LAYER_DELETE, { id: a }); this.tree.removeItem(a); }; netgis.LayerTree.prototype.onMapEditLayerChange = function (a) { this.editFolder.classList.remove("netgis-hide"); }; netgis.LayerTree.prototype.onDragOver = function (a) { a.preventDefault(); }; netgis.LayerTree.prototype.onDragDrop = function (a) { a = this.tree.dragElement; "summary" === a.nodeName.toLowerCase() && (a = a.parentNode.parentNode); a.parentNode.removeChild(a); 0 < this.tree.container.childNodes.length ? this.tree.container.insertBefore(a, this.tree.container.childNodes[0]) : this.tree.container.appendChild(a); netgis.util.invoke(this.tree.container, netgis.Events.TREE_ITEM_ORDER_CHANGE, { items: this.tree.container.getElementsByClassName("netgis-item"), }); }; netgis = netgis || {}; netgis.LayerTypes = { TMS: "TMS", XYZ: "XYZ", OSM: "OSM", WMTS: "WMTS", WMS: "WMS", WMST: "WMST", GEOJSON: "GEOJSON", VTILES: "VTILES", WFS: "WFS", GML: "GML", KML: "KML", GEOPACKAGE: "GEOPACKAGE", SPATIALITE: "SPATIALITE", SHAPEFILE: "SHAPEFILE", WKT: "WKT", HIDDEN: "HIDDEN", }; netgis = netgis || {}; netgis.Legend = function (a) { this.config = a; this.initElements(); this.initConfig(a); }; netgis.Legend.Config = { open: !1 }; netgis.Legend.prototype.initElements = function () { this.panel = new netgis.Panel("Legende"); this.panel.content.classList.add("netgis-legend"); }; netgis.Legend.prototype.initConfig = function (a) { var b = a.legend; b && !0 === b.open && this.show(); a = a.layers; for (b = 0; b < a.length; b++) { var c = a[b]; !0 === c.active ? this.addLayerLegend(c.id) : this.removeLayerLegend(c.id); } }; netgis.Legend.prototype.attachTo = function (a) { this.panel.attachTo(a); a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onClientContextResponse.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_CREATE, this.onMapLayerCreate.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_DELETE, this.onMapLayerDelete.bind(this)); a.addEventListener(netgis.Events.LEGEND_TOGGLE, this.onLegendToggle.bind(this)); }; netgis.Legend.prototype.show = function () { this.panel.show(); }; netgis.Legend.prototype.hide = function () { this.panel.hide(); }; netgis.Legend.prototype.addSection = function (a, b, c, d) { this.panel.content.innerHTML = [ !0 === d ? "
" : "
", "", b, "
", c, "
", ].join("") + this.panel.content.innerHTML; }; netgis.Legend.prototype.addLayerLegend = function (a) { for (var b = null, c = this.config.layers, d = 0; d < c.length; d++) { var e = c[d]; if (e.id === a) { b = e; break; } } if (b) { c = b.legend; if (!c || "" === c) switch (b.type) { case netgis.LayerTypes.WMS: case netgis.LayerTypes.WMST: (c = b.url) && -1 === c.indexOf("?") && (c += "?"), (c += [ "service=WMS&version=1.1.0&request=GetLegendGraphic&format=image/png", "layer=" + b.name, ].join("&")); } c && "" !== c && this.addSection(a, b.title, "", !0); } }; netgis.Legend.prototype.removeLayerLegend = function (a) { for (var b = this.panel.content.getElementsByTagName("details"), c = 0; c < b.length; c++) { var d = b[c]; d.getAttribute("data-id") === a && d.parentNode.removeChild(d); } }; netgis.Legend.prototype.onClientContextResponse = function (a) { this.initConfig(a.detail.context.config); }; netgis.Legend.prototype.onMapLayerToggle = function (a) { a = a.detail; a.on ? this.addLayerLegend(a.id) : this.removeLayerLegend(a.id); }; netgis.Legend.prototype.onMapLayerCreate = function (a) { this.addLayerLegend(a.detail.id); }; netgis.Legend.prototype.onMapLayerDelete = function (a) { this.removeLayerLegend(a.detail.id); }; netgis.Legend.prototype.onLegendToggle = function (a) { this.panel.toggle(); }; netgis = netgis || {}; netgis.Map = function (a) { this.config = a; this.mode = null; this.interactions = {}; this.layers = {}; this.viewHistory = []; this.viewIndex = -1; this.viewFromHistory = !1; this.viewHistoryMax = 20; this.paddingBuffer = 40; this.hoverBounds = this.hoverFeature = null; this.selectedFeatures = []; this.sketchFeatures = []; this.snap = null; this.snapFeatures = new ol.Collection(); this.drawError = this.selectReset = this.selectMultiple = this.editEventsSilent = !1; this.initElements(); a.map && (this.initMap(a), this.initLayers(), this.initOverlays(), this.initInteractions(), this.initConfig(a), this.setPadding(0, 0, 0, 0), this.setMode(netgis.Modes.VIEW)); }; netgis.Map.Config = { projection: "EPSG:25832", center: [329766.1782104631, 5513621.076679279], center_lonlat: [7, 50], zoom: 14, min_zoom: 5, max_zoom: 19, extent: [293315.97, 5423948.96, 464350.97, 5644103.06], bbox: [293315.97, 5423948.96, 464350.97, 5644103.06], scales: [500, 1e3, 3e3, 5e3, 8e3, 1e4, 15e3, 25e3, 5e4, 1e5, 15e4, 25e4, 5e5, 1e6, 15e5, 2e6], scale: 1e5, scalebar: !0, max_view_history: 20, }; netgis.Map.Projections = [["EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"]]; netgis.Map.Layers = []; netgis.Map.Measure = { line_color: "rgba( 255, 0, 0, 1.0 )", line_width: 3, line_dash: [5, 10], area_fill: "rgba( 255, 0, 0, 0.3 )", point_radius: 4, point_fill: "rgba( 255, 255, 255, 1.0 )", point_stroke: "rgba( 0, 0, 0, 1.0 )", text_color: "#871d33", text_back: "rgba( 255, 255, 255, 0.7 )", }; netgis.Map.Tools = { editable: !0, output_id: "", interactive_render: !0, select_multi_reset: !0, buffer: { default_radius: 300, default_segments: 3 }, snapping: { show: !0, active: !0, tolerance: 10 }, bounds: void 0, bounds_message: "Out of bounds!", show_bounds: !0, }; netgis.Map.Styles = { draw: { fill: "rgba( 255, 0, 0, 0.5 )", stroke: "#ff0000", width: 3, radius: 6, viewport_labels: !0 }, non_edit: { fill: "rgba( 80, 80, 80, 0.5 )", stroke: "#666666", width: 3, radius: 6, viewport_labels: !0 }, select: { fill: "rgba( 0, 127, 255, 0.5 )", stroke: "#007fff", width: 3, radius: 6 }, sketch: { fill: "rgba( 0, 127, 0, 0.5 )", stroke: "#007f00", width: 3, radius: 6 }, error: { fill: "rgba( 255, 0, 0, 0.5 )", stroke: "#ff0000", width: 3, radius: 6 }, bounds: { fill: "rgba( 0, 0, 0, 0.0 )", stroke: "#000000", width: 3, radius: 6 }, modify: { fill: "rgba( 255, 127, 0, 0.5 )", stroke: "#ff7f00", width: 3, radius: 6 }, parcel: { fill: "rgba( 127, 0, 0, 0.0 )", stroke: "rgba( 127, 0, 0, 1.0 )", width: 1.5 }, import: { fill: "rgba( 0, 127, 255, 0.2 )", stroke: "rgba( 0, 127, 255, 1.0 )", width: 1.5 }, }; netgis.Map.prototype.initElements = function () { this.container = document.createElement("div"); this.container.setAttribute("tabindex", -1); this.container.className = "netgis-map"; this.container.addEventListener("pointerleave", this.onPointerLeave.bind(this)); this.container.addEventListener("click", this.onContainerClick.bind(this)); this.container.addEventListener("contextmenu", this.onRightClick.bind(this)); this.container.addEventListener("keydown", this.onKeyDown.bind(this)); this.container.addEventListener("keyup", this.onKeyUp.bind(this)); }; netgis.Map.prototype.initMap = function (a) { var b = a.map; "undefined" !== typeof proj4 ? (a.projections && 0 < a.projections.length && proj4.defs(a.projections), proj4.defs("urn:ogc:def:crs:OGC:1.3:CRS84", proj4.defs("EPSG:4326")), ol.proj.proj4.register(proj4)) : ((a.projections && 0 < a.projections.length) || b.projection) && console.error("map projections configured but no proj4 js library found", a.projections, b.projection); a = void 0; b.center_lonlat && (a = ol.proj.fromLonLat(b.center_lonlat, b.projection)); !a && b.center && (a = b.center); var c = void 0; if (b.zoom || 0 === b.zoom) c = b.zoom; void 0 === c && void 0 !== b.min_zoom && (c = b.min_zoom); void 0 === c && (c = 0); this.view = new ol.View({ projection: b.projection, center: a, minZoom: b.min_zoom, maxZoom: b.max_zoom, zoom: c }); b.default_scale && console.error("config[ 'map' ][ 'default_scale' ] is deprecated, use config[ 'map' ][ 'scale' ] instead"); b.scale && this.view.setResolution(this.getResolutionFromScale(b.scale)); this.map = new ol.Map({ target: this.container, view: this.view, pixelRatio: 1, moveTolerance: b.move_tolerance || 0 === b.move_tolerance ? b.move_tolerance : 7, controls: [], }); if ( b.scalebar && ((this.scalebar = new ol.control.ScaleLine({ bar: !0 })), this.map.addControl(this.scalebar), (a = b.scales) && 0 < a.length) ) for ( this.scalebarSelect = document.createElement("select"), this.scalebarSelect.addEventListener("change", this.onScalebarSelectChange.bind(this)), this.scalebar.element.appendChild(this.scalebarSelect), c = 0; c < a.length; c++ ) { var d = a[c], e = document.createElement("option"); e.innerHTML = "1:" + d; e.setAttribute("value", d); this.scalebarSelect.appendChild(e); } this.map.on("moveend", this.onMapMoveEnd.bind(this)); this.map.on("pointermove", this.onPointerMove.bind(this)); this.map.on("click", this.onPointerClick.bind(this)); if (b) { var f = b.extent; b.bbox && (f = b.bbox); if (f) { var g = this; window.setTimeout(function () { g.map.updateSize(); g.view.fit(f); }, 10); } } }; netgis.Map.prototype.initLayers = function () { this.measureLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 6e4, style: this.styleMeasure.bind(this), }); this.map.addLayer(this.measureLayer); var a = this.config.tools; if ( a && ((this.nonEditLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 5e4, style: this.styleNonEdit.bind(this), updateWhileAnimating: a && a.interactive_render ? a.interactive_render : !1, updateWhileInteracting: a && a.interactive_render ? a.interactive_render : !1, })), this.map.addLayer(this.nonEditLayer), (this.editLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 5e4, style: this.styleEdit.bind(this), updateWhileAnimating: a && a.interactive_render ? a.interactive_render : !1, updateWhileInteracting: a && a.interactive_render ? a.interactive_render : !1, })), this.map.addLayer(this.editLayer), this.editLayer.getSource().on("addfeature", this.onEditLayerAdd.bind(this)), this.editLayer.getSource().on("changefeature", this.onEditLayerChange.bind(this)), this.editLayer.getSource().on("removefeature", this.onEditLayerRemove.bind(this)), (this.previewLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 55e3, style: this.styleSketch.bind(this), })), this.map.addLayer(this.previewLayer), (this.boundsLayer = null), (a = a.bounds)) ) { a = netgis.util.replace(a, "'", '"'); var b = new ol.format.GeoJSON().readFeatures(a); a = null; this.config.tools.show_bounds && this.config.styles.bounds && (a = this.createStyle(this.config.styles.bounds)); this.boundsLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: b }), style: a, zIndex: 6e4, }); this.map.addLayer(this.boundsLayer); } this.geolocLayer = null; this.config.modules && !0 === this.config.modules.geolocation && ((a = this.config.geolocation), a || (a = netgis.Geolocation.Config), (a = [ new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: "#ffffff" }), radius: 8 }), }), new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: a.marker_color ? a.marker_color : "#ff0000" }), radius: 5, }), }), ]), (b = new ol.Feature({ geometry: new ol.geom.Point(ol.proj.fromLonLat([7, 50], this.view.getProjection())) })), b.setId("geolocation"), (this.geolocLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [b] }), style: a, zIndex: 66e3, })), this.map.addLayer(this.geolocLayer), this.geolocLayer.setVisible(!1)); }; netgis.Map.prototype.initOverlays = function () { var a = document.createElement("div"); a.className = "netgis-map-overlay"; this.popupOverlay = new ol.Overlay({ id: "popup", element: a, positioning: "center-center" }); this.map.addOverlay(this.popupOverlay); }; netgis.Map.prototype.initInteractions = function () { this.interactions[netgis.Modes.VIEW] = [ new ol.interaction.DragPan(), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.ZOOM_BOX] = [ new ol.interaction.DragZoom({ condition: function (a) { return 0 === a.originalEvent.button; }, out: !1, className: "netgis-zoom-box", }), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.MEASURE_LINE] = [ new ol.interaction.DragPan(), new ol.interaction.Modify({ source: this.measureLayer.getSource(), deleteCondition: ol.events.condition.doubleClick, style: this.styleMeasure.bind(this), }), new ol.interaction.Draw({ type: "LineString", source: this.measureLayer.getSource(), style: this.styleMeasure.bind(this), }), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.PinchZoom(), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.MEASURE_AREA] = [ new ol.interaction.DragPan(), new ol.interaction.Modify({ source: this.measureLayer.getSource(), deleteCondition: ol.events.condition.doubleClick, style: this.styleMeasure.bind(this), }), new ol.interaction.Draw({ type: "Polygon", source: this.measureLayer.getSource(), style: this.styleMeasure.bind(this), }), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.PinchZoom(), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.MEASURE_LINE][2].on("drawstart", this.onMeasureLineBegin.bind(this)); this.interactions[netgis.Modes.MEASURE_AREA][2].on("drawstart", this.onMeasureAreaBegin.bind(this)); if (this.config.tools && !0 === this.config.tools.editable) { var a = this.config.tools.bounds ? !0 : !1; this.interactions[netgis.Modes.DRAW_POINTS] = [ new ol.interaction.Draw({ type: "Point", source: this.editLayer.getSource(), style: this.styleSketch.bind(this), geometryFunction: a ? this.onDrawPointsUpdateGeom.bind(this) : void 0, }), new ol.interaction.DragPan(), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.DRAW_POINTS][0].on("drawend", this.onDrawBufferEnd.bind(this)); if (a) this.interactions[netgis.Modes.DRAW_POINTS][0].on("drawend", this.onDrawPointsEnd.bind(this)); this.interactions[netgis.Modes.DRAW_LINES] = [ new ol.interaction.Draw({ type: "LineString", source: this.editLayer.getSource(), style: this.styleSketch.bind(this), geometryFunction: a ? this.onDrawLinesUpdateGeom.bind(this) : void 0, }), new ol.interaction.DragPan(), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.DRAW_LINES][0].on("drawend", this.onDrawBufferEnd.bind(this)); if (a) this.interactions[netgis.Modes.DRAW_LINES][0].on("drawend", this.onDrawLinesEnd.bind(this)); this.interactions[netgis.Modes.DRAW_POLYGONS] = [ new ol.interaction.Draw({ type: "Polygon", source: this.editLayer.getSource(), style: this.styleSketch.bind(this), geometryFunction: a ? this.onDrawPolygonsUpdateGeom.bind(this) : void 0, }), new ol.interaction.DragPan(), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; if (a) this.interactions[netgis.Modes.DRAW_POLYGONS][0].on("drawend", this.onDrawPolygonsEnd.bind(this)); this.interactions[netgis.Modes.MODIFY_FEATURES] = [ new ol.interaction.DragPan(), new ol.interaction.Modify({ source: this.editLayer.getSource(), deleteCondition: ol.events.condition.doubleClick, style: this.styleModify.bind(this), }), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.DELETE_FEATURES] = [ new ol.interaction.DragPan(), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.CUT_FEATURES_DRAW] = [ new ol.interaction.Draw({ type: "Polygon", style: this.styleSketch.bind(this) }), new ol.interaction.DragPan(), new ol.interaction.DragPan({ condition: function (a) { return 1 === a.originalEvent.button; }, }), new ol.interaction.MouseWheelZoom(), ]; this.interactions[netgis.Modes.CUT_FEATURES_DRAW][0].on("drawend", this.onCutFeaturesDrawEnd.bind(this)); } }; netgis.Map.prototype.initConfig = function (a) { var b = a.map; b && (b.bbox && this.zoomBBox(a.map.bbox), !b.zoom || b.extent || b.scale || this.view.setZoom(a.map.zoom), b.max_view_history && (this.viewHistoryMax = b.max_view_history)); if ((a = a.layers)) for (b = a.length - 1; 0 <= b; b--) { var c = a[b]; !0 === c.active && this.addLayer(c.id, c); } }; netgis.Map.prototype.attachTo = function (a) { a.appendChild(this.container); a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onClientContextResponse.bind(this)); a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this)); a.addEventListener(netgis.Events.PANEL_TOGGLE, this.onPanelToggle.bind(this)); a.addEventListener(netgis.Events.PANEL_RESIZE, this.onPanelResize.bind(this)); a.addEventListener(netgis.Events.MAP_EDIT_LAYER_LOADED, this.onEditLayerLoaded.bind(this)); a.addEventListener(netgis.Events.MAP_ZOOM, this.onMapZoom.bind(this)); a.addEventListener(netgis.Events.MAP_ZOOM_HOME, this.onMapZoomHome.bind(this)); a.addEventListener(netgis.Events.MAP_ZOOM_LONLAT, this.onMapZoomLonLat.bind(this)); a.addEventListener(netgis.Events.MAP_ZOOM_SCALE, this.onMapZoomScale.bind(this)); a.addEventListener(netgis.Events.MAP_ZOOM_LAYER, this.onMapZoomLayer.bind(this)); a.addEventListener(netgis.Events.MAP_ZOOM_LEVEL, this.onMapZoomLevel.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_CREATE, this.onMapLayerCreate.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_TRANSPARENCY, this.onMapLayerTransparency.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_ORDER, this.onMapLayerOrder.bind(this)); a.addEventListener(netgis.Events.MAP_LAYER_DELETE, this.onMapLayerDelete.bind(this)); a.addEventListener(netgis.Events.MAP_SNAP_TOGGLE, this.onMapSnapToggle.bind(this)); a.addEventListener(netgis.Events.MAP_VIEW_PREV, this.onMapViewPrev.bind(this)); a.addEventListener(netgis.Events.MAP_VIEW_NEXT, this.onMapViewNext.bind(this)); a.addEventListener(netgis.Events.GEOLOCATION_TOGGLE_ACTIVE, this.onGeolocToggleActive.bind(this)); a.addEventListener(netgis.Events.GEOLOCATION_CHANGE, this.onGeolocChange.bind(this)); a.addEventListener(netgis.Events.MEASURE_CLEAR, this.onMeasureClear.bind(this)); a.addEventListener(netgis.Events.SELECT_MULTI_TOGGLE, this.onSelectMultiToggle.bind(this)); a.addEventListener(netgis.Events.DRAW_BUFFER_TOGGLE, this.onDrawBufferToggle.bind(this)); a.addEventListener(netgis.Events.DRAW_BUFFER_CHANGE, this.onDrawBufferChange.bind(this)); a.addEventListener(netgis.Events.BUFFER_CHANGE, this.onBufferChange.bind(this)); a.addEventListener(netgis.Events.BUFFER_ACCEPT, this.onBufferAccept.bind(this)); a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT, this.onImportLayerAccept.bind(this)); a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW, this.onImportLayerPreview.bind(this)); a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT, this.onImportGeoportalSubmit.bind(this)); a.addEventListener(netgis.Events.MAP_COPY_FEATURE_TO_EDIT, this.onCopyFeatureToEdit.bind(this)); a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_ENTER, this.onSearchParcelItemEnter.bind(this)); a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_LEAVE, this.onSearchParcelItemLeave.bind(this)); a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_CLICK, this.onSearchParcelItemClick.bind(this)); a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_IMPORT, this.onSearchParcelItemImport.bind(this)); a.addEventListener(netgis.Events.EXPORT_BEGIN, this.onExportBegin.bind(this)); a.addEventListener(netgis.Events.TIMESLIDER_SHOW, this.onTimeSliderShow.bind(this)); a.addEventListener(netgis.Events.TIMESLIDER_HIDE, this.onTimeSliderHide.bind(this)); a.addEventListener(netgis.Events.TIMESLIDER_SELECT, this.onTimeSliderSelect.bind(this)); }; netgis.Map.prototype.setMode = function (a) { switch (this.mode) { case netgis.Modes.VIEW: this.container.classList.remove("netgis-clickable"); break; case netgis.Modes.MODIFY_FEATURES: this.editLayer.setStyle(this.styleEdit.bind(this)); break; case netgis.Modes.DRAW_POINTS: case netgis.Modes.DRAW_LINES: this.previewLayer.getSource().clear(); this.container.classList.remove("netgis-not-allowed"); this.container.removeAttribute("title"); break; case netgis.Modes.DRAW_POLYGONS: this.container.classList.remove("netgis-not-allowed"); this.container.removeAttribute("title"); break; case netgis.Modes.BUFFER_FEATURES: this.clearSketchFeatures(); break; case netgis.Modes.BUFFER_FEATURES_EDIT: this.clearSketchFeatures(); this.selectedFeatures = []; this.redrawVectorLayers(); break; case netgis.Modes.BUFFER_FEATURES_DYNAMIC: this.clearSketchFeatures(); this.selectedFeatures = []; this.redrawVectorLayers(); break; case netgis.Modes.CUT_FEATURES: a !== netgis.Modes.CUT_FEATURES_DRAW && ((this.selectedFeatures = []), this.redrawVectorLayers()); break; case netgis.Modes.CUT_FEATURES_DRAW: (this.selectedFeatures = []), this.redrawVectorLayers(); } this.map.getInteractions().clear(); this.mode && this.container.classList.remove("netgis-mode-" + this.mode); var b = this.interactions[a]; b || (console.warn("no interactions found for mode", a), (b = this.interactions[netgis.Modes.VIEW])); for (var c = 0; c < b.length; c++) this.map.addInteraction(b[c]); b = this.config.tools && this.config.tools.editable; switch (a) { case netgis.Modes.DRAW_POINTS: case netgis.Modes.DRAW_LINES: b && (this.setSnapping(this.drawSnapOn), this.onDrawBufferToggle({ detail: { on: this.drawBufferOn, radius: this.drawBufferRadius, segments: this.drawBufferSegments }, })); break; case netgis.Modes.DRAW_POLYGONS: b && this.setSnapping(this.drawSnapOn); break; case netgis.Modes.MODIFY_FEATURES: b && (this.setSnapping(this.drawSnapOn), this.editLayer.setStyle(this.styleModify.bind(this))); } this.container.classList.add("netgis-mode-" + a); this.mode = a; }; netgis.Map.prototype.addLayer = function (a, b) { var c = this.createLayer(b); c && (c.set("id", a), this.map.addLayer(c), (this.layers[a] = c), b.order && c.setZIndex(b.order), b.transparency && c.setOpacity(1 - b.transparency), b.style && c.setStyle(this.createStyle(b.style)), b.min_zoom && c.setMinZoom(b.min_zoom - 1e-4), b.max_zoom && c.setMaxZoom(b.max_zoom), c instanceof ol.layer.Vector && this.addSnapLayer(c), b.type === netgis.LayerTypes.WMST && netgis.util.invoke(this.container, netgis.Events.TIMESLIDER_SHOW, { layer: a, title: b.title, url: b.url, name: b.name, })); return c; }; netgis.Map.prototype.isLayerQueryable = function (a) { var b = !1; if (!0 === a.query) b = !0; else if (!1 !== a.query) switch (a.type) { case netgis.LayerTypes.WMS: case netgis.LayerTypes.WMST: b = !0; } return b; }; netgis.Map.prototype.getQueryableLayers = function (a) { var b = [], c = this.config.layers; if (c) for (var d = 0; d < c.length; d++) { var e = c[d], f = this.layers[e.id]; f && ((a && f instanceof ol.layer.Vector) || (this.isLayerQueryable(e) && b.push(e))); } return b; }; netgis.Map.prototype.createLayer = function (a) { switch (a.type) { case netgis.LayerTypes.HIDDEN: break; case netgis.LayerTypes.TMS: case netgis.LayerTypes.XYZ: var b = this.createLayerTMS(a.url, a.projection, a.extent, a.scales, a.resolutions); break; case netgis.LayerTypes.OSM: b = this.createLayerTMS("https://{a-c}.tile.openstreetmap.de/{z}/{x}/{y}.png"); break; case netgis.LayerTypes.WMTS: b = this.createLayerWMTS(a.url, a.name); break; case netgis.LayerTypes.WMS: b = this.createLayerWMS(a.url, a.name, a.format, a.tiled, a.username, a.password); break; case netgis.LayerTypes.WMST: b = this.createLayerWMST(a.url, a.name, a.format, a.tiled, a.username, a.password); break; case netgis.LayerTypes.GEOJSON: (b = a.data) && netgis.util.isString(b) && (b = JSON.parse(b)); b = this.createLayerGeoJSON(b ? b : a.url); break; case netgis.LayerTypes.WFS: b = this.createLayerWFS( a.url, a.name, this.view.getProjection().getCode(), a.format, a.username, a.password ); break; case netgis.LayerTypes.VTILES: b = this.createLayerVectorTiles(a.url, a.extent, a.min_zoom, a.max_zoom); break; case netgis.LayerTypes.GML: b = this.createLayerGML(a.data); break; case netgis.LayerTypes.KML: b = this.createLayerKML(a.url); break; case netgis.LayerTypes.GEOPACKAGE: b = this.createLayerGeoPackage(a.data); break; case netgis.LayerTypes.SPATIALITE: b = this.createLayerSpatialite(a.data); break; case netgis.LayerTypes.SHAPEFILE: b = this.createLayerShapefile(a.data); break; case netgis.LayerTypes.WKT: b = this.createLayerWKT(a.data); break; default: console.error("unknown layer type", a.type); } return b; }; netgis.Map.prototype.removeLayer = function (a) { var b = this.layers[a]; b instanceof ol.layer.Vector && this.removeSnapLayer(b); for (var c = 0; c < this.config.layers.length; c++) { var d = this.config.layers[c]; d.id === a && d.type === netgis.LayerTypes.WMST && netgis.util.invoke(this.container, netgis.Events.TIMESLIDER_HIDE, null); } this.map.removeLayer(b); delete this.layers[a]; }; netgis.Map.prototype.setLayerOrder = function (a, b) { this.layers[a].setZIndex(b); }; netgis.Map.prototype.createStyle = function (a) { var b = a.radius ? a.radius : 3, c = a.width ? a.width : 1, d = a.fill ? a.fill : "gray", e = a.stroke ? a.stroke : "black"; return function (a) { return new ol.style.Style({ image: new ol.style.Circle({ radius: b - c, fill: new ol.style.Fill({ color: d }) }), fill: new ol.style.Fill({ color: d }), stroke: new ol.style.Stroke({ color: e, width: c }), }); }; }; netgis.Map.prototype.styleMeasure = function (a) { var b = a.getGeometry(), c = this.config.measure; c || (c = netgis.Map.Measure); var d = new ol.style.Style({ fill: new ol.style.Fill({ color: c.area_fill }), stroke: new ol.style.Stroke({ color: c.line_color, width: c.line_width, lineDash: c.line_dash }), }); b instanceof ol.geom.Polygon ? ((b = b.getArea()), d.setText( new ol.style.Text({ text: [netgis.util.formatArea(b, !0), "4mm sans-serif"], font: "Arial", fill: new ol.style.Fill({ color: c.text_color }), backgroundFill: new ol.style.Fill({ color: c.text_back }), padding: [2, 4, 2, 4], overflow: !0, }) )) : b instanceof ol.geom.LineString && (this.mode === netgis.Modes.MEASURE_LINE || this.mode === netgis.Modes.VIEW) && ((b = b.getLength()), d.setText( new ol.style.Text({ text: [netgis.util.formatDistance(b), "4mm sans-serif"], font: "Arial", fill: new ol.style.Fill({ color: c.text_color }), backgroundFill: new ol.style.Fill({ color: c.text_back }), padding: [2, 4, 2, 4], overflow: !0, }) )); return c.point_radius && 0 < c.point_radius ? ((b = this.getGeometryPoints(a)), (a = new ol.style.Style({ image: new ol.style.Circle({ radius: 1.25 * c.point_radius, fill: new ol.style.Fill({ color: c.point_stroke }), }), geometry: b, })), (c = new ol.style.Style({ image: new ol.style.Circle({ radius: c.point_radius, fill: new ol.style.Fill({ color: c.point_fill }) }), geometry: b, })), [d, a, c]) : d; }; netgis.Map.prototype.styleEdit = function (a) { var b, c; this.config && this.config.styles && (this.config.styles.draw && (b = this.config.styles.draw), this.config.styles.select && (c = this.config.styles.select)); b || (b = netgis.Map.Styles.draw); c || (c = netgis.Map.Styles.select); var d = a.getGeometry(), e = this.hoverFeature === a; -1 < this.selectedFeatures.indexOf(a) && (e = !0); var f = e ? c.fill : b.fill, g = e ? c.stroke : b.stroke; c = new ol.style.Style({ image: new ol.style.Circle({ radius: e ? c.radius : b.radius, fill: new ol.style.Fill({ color: g }) }), fill: new ol.style.Fill({ color: f }), stroke: new ol.style.Stroke({ color: g, width: b.width }), }); e && c.setZIndex(1); if (d instanceof ol.geom.Polygon || d instanceof ol.geom.MultiPolygon) { e = d.getArea(); if (!e || 0 >= e) return c; !0 === b.viewport_labels && ((b = this.view.calculateExtent(this.map.getSize())), (f = ol.geom.Polygon.fromExtent(b)), (b = new jsts.io.OL3Parser()), (d = b.read(d)), (f = b.read(f)), (d = d.intersection(f)), (d = b.write(d)), c.setGeometry(d)); e = netgis.util.formatArea(e, !0); (a = a.getProperties().title) && (e = a + "\n" + e); c.setText( new ol.style.Text({ text: e, font: "4mm Arial, sans-serif", fill: new ol.style.Fill({ color: g }), backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }), padding: [2, 4, 2, 4], }) ); } return c; }; netgis.Map.prototype.styleNonEdit = function (a) { var b, c; this.config && this.config.styles && (this.config.styles.non_edit && (b = this.config.styles.non_edit), this.config.styles.select && (c = this.config.styles.select)); b || (b = netgis.Map.Styles.non_edit); c || (c = netgis.Map.Styles.select); var d = a.getGeometry(), e = this.hoverFeature === a; -1 < this.selectedFeatures.indexOf(a) && (e = !0); var f = e ? c.fill : b.fill, g = e ? c.stroke : b.stroke; c = new ol.style.Style({ image: new ol.style.Circle({ radius: e ? c.radius : b.radius, fill: new ol.style.Fill({ color: g }) }), fill: new ol.style.Fill({ color: f }), stroke: new ol.style.Stroke({ color: g, width: b.width }), }); e && c.setZIndex(1); if (d instanceof ol.geom.Polygon) { e = d.getArea(); if (!e || 0 >= e) return c; !0 === b.viewport_labels && ((b = this.map.getView().calculateExtent(this.map.getSize())), (f = ol.geom.Polygon.fromExtent(b)), (b = new jsts.io.OL3Parser()), (d = b.read(d)), (f = b.read(f)), (d = d.intersection(f)), (d = b.write(d)), c.setGeometry(d)); e = netgis.util.formatArea(e, !0); (a = a.getProperties().title) && (e = a + "\n" + e); c.setText( new ol.style.Text({ text: e, font: "4mm Arial, sans-serif", fill: new ol.style.Fill({ color: g }), backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }), padding: [2, 4, 2, 4], }) ); } return c; }; netgis.Map.prototype.styleSketch = function (a) { var b, c; this.config && this.config.styles && (this.config.styles.sketch && (b = this.config.styles.sketch), this.config.styles.error && (c = this.config.styles.error)); b || (b = netgis.Map.Styles.sketch); c || (c = netgis.Map.Styles.error); this.drawError && c && (b = c); var d = a.getGeometry(); c = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.fill }) }), fill: new ol.style.Fill({ color: b.fill }), stroke: new ol.style.Stroke({ color: b.stroke, width: b.width }), }); d instanceof ol.geom.Polygon && ((d = d.getArea()), c.setText( new ol.style.Text({ text: [netgis.util.formatArea(d, !0), "4mm sans-serif"], font: "Arial", fill: new ol.style.Fill({ color: b.stroke }), backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }), padding: [2, 4, 2, 4], }) )); a = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }), geometry: this.getGeometryPoints(a), }); return [c, a]; }; netgis.Map.prototype.styleModify = function (a) { var b; this.config && this.config.styles && this.config.styles.modify && (b = this.config.styles.modify); b || (b = netgis.Map.Styles.modify); var c = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }), fill: new ol.style.Fill({ color: b.fill }), stroke: new ol.style.Stroke({ color: b.stroke, width: b.width }), }), d = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }), geometry: this.getGeometryPoints(a), }); a = a.getGeometry(); a instanceof ol.geom.Polygon && ((a = a.getArea()), c.setText( new ol.style.Text({ text: [netgis.util.formatArea(a, !0), "4mm sans-serif"], font: "Arial", fill: new ol.style.Fill({ color: b.stroke }), backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }), padding: [2, 4, 2, 4], }) )); return [c, d]; }; netgis.Map.prototype.styleHover = function (a) { var b; this.config && this.config.styles && this.config.styles.select && (b = this.config.styles.select); b || (b = netgis.Map.Styles.select); return new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }), fill: new ol.style.Fill({ color: b.fill }), stroke: new ol.style.Stroke({ color: b.stroke, width: b.width }), zIndex: 1, }); }; netgis.Map.prototype.getGeometryPoints = function (a) { var b = a.getGeometry(); if (b instanceof ol.geom.LineString) return new ol.geom.MultiPoint(b.getCoordinates()); if (b instanceof ol.geom.Polygon) { a = []; b = b.getCoordinates(); for (var c = 0; c < b.length; c++) for (var d = b[c], e = 0; e < d.length; e++) a.push(d[e]); return new ol.geom.MultiPoint(a); } if (b instanceof ol.geom.MultiPolygon) { a = []; for (var f = b.getPolygons(), g = 0; g < f.length; g++) for (b = f[g].getCoordinates(), c = 0; c < b.length; c++) for (d = b[c], e = 0; e < d.length; e++) a.push(d[e]); return new ol.geom.MultiPoint(a); } if (b instanceof ol.geom.MultiLineString) { a = []; f = b.getPolygons(); for (g = 0; g < f.length; g++) for (b = f[g].getCoordinates(), c = 0; c < b.length; c++) for (d = b[c], e = 0; e < d.length; e++) a.push(d[e]); return new ol.geom.MultiPoint(a); } return b; }; netgis.Map.prototype.redrawVectorLayers = function () { this.map.getLayers().forEach(function (a, b, c) { (a instanceof ol.layer.Vector || a instanceof ol.layer.VectorTile) && a.setStyle(a.getStyle()); }); }; netgis.Map.prototype.setSnapping = function (a) { var b = this.config.tools.snapping; a ? ((this.snap = new ol.interaction.Snap({ features: this.snapFeatures, pixelTolerance: b.tolerance ? b.tolerance : 10, })), this.map.addInteraction(this.snap), this.snapFeatures.changed()) : this.snap && (this.map.removeInteraction(this.snap), (this.snap = null)); this.drawSnapOn = a; }; netgis.Map.prototype.setDrawTrace = function (a) {}; netgis.Map.prototype.addSnapLayer = function (a) { a = a.getSource().getFeatures(); for (var b = 0; b < a.length; b++) this.snapFeatures.push(a[b]); }; netgis.Map.prototype.removeSnapLayer = function (a) { a = a.getSource().getFeatures(); for (var b = 0; b < a.length; b++) this.snapFeatures.remove(a[b]); }; netgis.Map.prototype.setDrawBuffer = function (a, b, c) { if (a) { var d = this.createBufferFeature(new ol.geom.Point(this.view.getCenter()), b, c); this.previewLayer.getSource().addFeature(d); this.drawBufferRadius = b; this.drawBufferSegments = c; } else this.previewLayer.getSource().clear(); this.drawBufferOn = a; }; netgis.Map.prototype.createLayerTMS = function (a, b, c, d, e) { "map" === d && (this.config.map && this.config.map.scales ? (d = this.config.map.scales) : (console.error("TMS layer references map scales, but none given in config,", a), (d = void 0))); "map" === c && (this.config.map && this.config.map.extent ? (c = this.config.map.extent) : (console.error("TMS layer references map 'extent', but none given in config 'map',", a), (c = void 0))); if (b && c && (d || e)) { if (d) for (e = [], b = 0; b < d.length; b++) e.unshift(this.getResolutionFromScale(d[b])); c = new ol.source.TileImage({ crossOrigin: null, projection: this.view.getProjection(), tileGrid: new ol.tilegrid.TileGrid({ extent: c, origin: c ? [c[0], c[1]] : [0, 0], resolutions: e }), tileUrlFunction: function (b) { if (null !== b) { var c = a; c = netgis.util.replace(c, "{z}", b[0]); c = netgis.util.replace(c, "{x}", b[1]); c = netgis.util.replace(c, "{y}", b[2]); return (c = netgis.util.replace(c, "{-y}", -b[2] - 1)); } }, }); c = new ol.layer.Tile({ source: c }); } else c = new ol.layer.Tile({ source: new ol.source.XYZ({ url: a, crossOrigin: "anonymous" }) }); return c; }; netgis.Map.prototype.createLayerWMS = function (a, b, c, d, e, f) { "image/tiff" === c && (console.error( "WMS layer format 'image/tiff' detected but not supported in OL, reverting to 'image/png' for '" + a + "'" ), (c = "image/png")); a = { url: a, params: { LAYERS: b, FORMAT: c ? c : "image/png", TRANSPARENT: "true" }, hidpi: !1 }; e && f && (a.imageLoadFunction = function (a, b) { var c = new XMLHttpRequest(); c.open("GET", b); c.setRequestHeader("Authorization", "Basic " + window.btoa(e + ":" + f)); c.onload = function () { a.getImage().src = b; }; c.send(); }); d ? ((d = new ol.source.TileWMS(a)), (d = new ol.layer.Tile({ source: d }))) : ((d = new ol.source.ImageWMS(a)), (d = new ol.layer.Image({ source: d }))); return d; }; netgis.Map.prototype.createLayerWMST = function (a, b, c, d, e, f) { "image/tiff" === c && (console.error( "WMST layer format 'image/tiff' detected but not supported in OL, reverting to 'image/png' for '" + a + "'" ), (c = "image/png")); a = { url: a, params: { LAYERS: b, FORMAT: c ? c : "image/png", TRANSPARENT: "true", VERSION: "1.1.1" }, hidpi: !1, }; e && f && (a.imageLoadFunction = function (a, b) { var c = new XMLHttpRequest(); c.open("GET", b); c.setRequestHeader("Authorization", "Basic " + window.btoa(e + ":" + f)); c.onload = function () { a.getImage().src = b; }; c.send(); }); d ? ((d = new ol.source.TileWMS(a)), (d = new ol.layer.Tile({ source: d }))) : ((d = new ol.source.ImageWMS(a)), (d = new ol.layer.Image({ source: d }))); return d; }; netgis.Map.prototype.createLayerWMTS = function (a) { for (var b = [], c = this.client.config.map.scales, d = this.client.config.map.extent, e = 0; e < c.length; e++) b.unshift(this.getResolutionFromScale(c[e])); b = new ol.source.TileImage({ crossOrigin: null, projection: this.view.getProjection(), tileGrid: new ol.tilegrid.TileGrid({ extent: d, origin: [d[0], d[1]], resolutions: b }), tileUrlFunction: function (b) { if (null !== b) { var c = a; c = netgis.util.replace(c, "{z}", b[0]); c = netgis.util.replace(c, "{x}", b[1]); c = netgis.util.replace(c, "{y}", b[2]); return (c = netgis.util.replace(c, "{-y}", -b[2])); } }, }); return new ol.layer.Tile({ source: b }); }; netgis.Map.prototype.createLayerWMTS_01 = function (a, b) { for ( var c = this.view.getProjection().getExtent(), d = ol.extent.getWidth(c) / 256, e = Array(14), f = Array(14), g = 0; 14 > g; ++g ) (e[g] = d / Math.pow(2, g)), (f[g] = g); source = new ol.source.WMTS({ url: a, params: { LAYER: b, FORMAT: "image/png", TRANSPARENT: "true", VERSION: "1.1.1" }, layer: b, format: "image/jpeg", matrixSet: "UTM32", tileGrid: new ol.tilegrid.WMTS({ origin: ol.extent.getTopLeft(c), resolutions: e, matrixIds: f }), }); }; netgis.Map.prototype.createLayerGeoJSON = function (a) { if (netgis.util.isObject(a)) { var b = new ol.format.GeoJSON(), c = b.readProjection(a); a = b.readFeatures(a, { featureProjection: this.view.getProjection() }); c = c.getCode(); switch (c) { case "EPSG:3857": case "EPSG:4326": case this.view.getProjection().getCode(): break; default: console.warn("unsupported import projection '" + c + "'"); } var d = new ol.layer.Vector({ source: new ol.source.Vector({ features: a }) }); return d; } if (netgis.util.isString(a)) { d = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }); var e = this; netgis.util.request(a, function (a) { a = JSON.parse(a); a = e.createLayerGeoJSON(a); d.getSource().addFeatures(a.getSource().getFeatures()); }); return d; } }; netgis.Map.prototype.createLayerGML = function (a) { console.warn("GML support is experimental!"); var b = []; a = new DOMParser().parseFromString(a, "text/xml").getElementsByTagName("gml:featureMember"); for (var c = 0; c < a.length; c++) { for (var d = {}, e = a[c].children[0], f = 0; f < e.attributes.length; f++) { var g = e.attributes[f]; d[g.nodeName] = g.nodeValue; } for (f = 0; f < e.children.length; f++) if (((g = e.children[f]), "ogr:geometryProperty" !== g.nodeName)) { var h = g.nodeName.split(":"); d[h[h.length - 1]] = g.innerHTML; } e = e.getElementsByTagName("ogr:geometryProperty")[0].children[0]; (f = e.getAttribute("srsName")) && "EPSG:4326" !== f && f !== this.projection && console.warn("unsupported import projection:", f); switch (e.nodeName) { case "gml:Polygon": d.geometry = this.gmlParsePolygon(e, f); break; case "gml:MultiPolygon": d.geometry = this.gmlParseMultiPolygon(e, f); } d = new ol.Feature(d); b.push(d); } return new ol.layer.Vector({ source: new ol.source.Vector({ features: b }) }); }; netgis.Map.prototype.gmlParsePolygon = function (a, b) { var c = []; a = a.getElementsByTagName("gml:LinearRing"); for (var d = 0; d < a.length; d++) { var e = a[d].getElementsByTagName("gml:coordinates")[0].innerHTML; c.push(this.gmlParseCoordinates(e, b)); } return new ol.geom.Polygon(c); }; netgis.Map.prototype.gmlParseMultiPolygon = function (a, b) { var c = []; a = a.getElementsByTagName("gml:polygonMember"); for (var d = 0; d < a.length; d++) { var e = a[d].getElementsByTagName("gml:Polygon")[0]; c.push(this.gmlParsePolygon(e, b)); } return new ol.geom.MultiPolygon(c); }; netgis.Map.prototype.gmlParseCoordinates = function (a, b) { a = a.split(" "); for (var c = 0; c < a.length; c++) { a[c] = a[c].split(","); for (var d = 0; d < a[c].length; d++) a[c][d] = Number.parseFloat(a[c][d]); b && (a[c] = ol.proj.transform(a[c], b, this.view.getProjection())); } return a; }; netgis.Map.prototype.createLayerGeoPackage = function (a) { var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }), c = this; a = new Uint8Array(a); window.GeoPackage.setSqljsWasmLocateFile(function (a) { return c.config["import"].geopackage_lib + a; }); window.GeoPackage.GeoPackageAPI.open(a).then(function (a) { for (var d = [], f = new ol.format.GeoJSON(), g = a.getFeatureTables(), h = 0; h < g.length; h++) for (var k = a.queryForGeoJSONFeaturesInTable(g[h]), l = 0; l < k.length; l++) { var m = f.readGeometry(k[l].geometry, { featureProjection: c.view.getProjection() }); m = new ol.Feature({ geometry: m }); d.push(m); } b.getSource().addFeatures(d); }); return b; }; netgis.Map.prototype.createLayerSpatialite = function (a) { var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }), c = this; window.initSqlJs().then(function (d) { var e = [], f = new Uint8Array(a); d = new d.Database(f); var g = d.exec( "SELECT name FROM sqlite_schema WHERE type = 'table' \n\t\t\t\t\tAND name NOT LIKE 'sqlite_%' \n\t\t\t\t\tAND name NOT LIKE 'sql_%' \n\t\t\t\t\tAND name NOT LIKE 'idx_%' \n\t\t\t\t\tAND name NOT LIKE 'spatial_ref_sys%' \n\t\t\t\t\tAND name NOT LIKE 'spatialite_%' \n\t\t\t\t\tAND name NOT LIKE 'geometry_columns%' \n\t\t\t\t\tAND name NOT LIKE 'views_%' \n\t\t\t\t\tAND name NOT LIKE 'virts_%' \n\t\t\t\t\tAND name NOT LIKE 'SpatialIndex' \n\t\t\t\t\tAND name NOT LIKE 'KNN%' \n\t\t\t\t\tAND name NOT LIKE 'ElementaryGeometries' \n\t\t\t\t;" ); f = g[0].values; for (var h = 0; h < f.length; h++) { g = d.exec("SELECT * FROM " + f[h][0]); var k = g[0]; g = null; for (var l = 0; l < k.columns.length; l++) { if ("geometry" === k.columns[l].toLowerCase()) { g = l; break; } if ("geom" === k.columns[l].toLowerCase()) { g = l; break; } } if (null !== g) for (k = k.values, l = 0; l < k.length; l++) { var m = k[l][g], n = new Uint8Array(m.length - 43 - 1 + 5); n[0] = m[1]; n[1] = m[39]; n[2] = m[40]; n[3] = m[41]; n[4] = m[42]; for (var p = m.length - 43 - 1, q = 0; q < p; q++) n[5 + q] = m[43 + q]; m = new ol.format.WKB().readGeometry(n, { featureProjection: c.view.getProjection() }); e.push(new ol.Feature({ geometry: m })); } } b.getSource().addFeatures(e); }); return b; }; netgis.Map.prototype.createLayerShapefile = function (a) { var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }), c = this; shp(a).then(function (a) { var d = new ol.format.GeoJSON(); d.readProjection(a); a = d.readFeatures(a, { featureProjection: c.view.getProjection() }); b.getSource().addFeatures(a); }); return b; }; netgis.Map.prototype.createLayerWKT = function (a) { for (var b = new ol.format.WKT(), c = [], d = 0; d < a.length; d++) { var e = a[d], f = b.readGeometry(e.geometry), g = e.properties; g.geometry = f; g.wkt = e.geometry; f = new ol.Feature(g); f.setId(e.id); c.push(f); } return new ol.layer.Vector({ source: new ol.source.Vector({ features: c }) }); }; netgis.Map.prototype.createLayerWFS = function (a, b, c, d, e, f) { "?" !== a[a.length - 1] && (a += "?"); a += "service=WFS&version=1.1.0&request=GetFeature"; c || (c = this.view.getProjection().getCode()); d = d ? netgis.util.replace(d, " ", "+") : "application/json"; var g = new ol.source.Vector({ format: new ol.format.GeoJSON(), strategy: ol.loadingstrategy.bbox, loader: function (h, k, n, p, q) { h = a + "&typename=" + b + "&srsname=" + c + "&bbox=" + h.join(",") + "," + c + "&outputFormat=" + d; var l = new XMLHttpRequest(); l.open("GET", h); e && f && l.setRequestHeader("Authorization", "Basic " + window.btoa(e + ":" + f)); l.onerror = function () { console.error("WFS request error"); q(); }; l.onload = function () { if (200 === l.status) { g.clear(); var a = g.getFormat().readFeatures(l.responseText); g.addFeatures(a); p(a); } else console.error("WFS request status", l.status), q(); }; l.send(); }, }), h = new ol.layer.Vector({ source: g }), k = this; g.on("featuresloadstart", function (a) { k.removeSnapLayer(h); }); g.on("featuresloadend", function (a) { window.setTimeout(function () { k.addSnapLayer(h); }, 10); }); return h; }; netgis.Map.prototype.createLayerVectorTiles = function (a, b, c, d) { return new ol.layer.VectorTile({ extent: b, source: new ol.source.VectorTile({ format: new ol.format.MVT(), overlaps: !0, url: a, minZoom: c, maxZoom: d }), }); }; netgis.Map.prototype.createLayerKML = function (a) { var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }), c = this; netgis.util.request(a, function (a) { a = new ol.format.KML().readFeatures(a, { featureProjection: c.view.getProjection() }); for (var d = 0; d < a.length; d++) { var f = a[d], g = f.getProperties(), h = { fill: "rgba( 127, 127, 127, 0.5 )", stroke: "rgba( 127, 127, 127, 1.0 )", radius: 5, width: 3 }, k; for (k in g) { var l = g[k]; switch (k) { case "fill": h.fill = l; break; case "fill-opacity": h["fill-opacity"] = l; break; case "stroke": h.stroke = l; break; case "stroke-opacity": h["stroke-opacity"] = l; break; case "stroke-width": h.width = l; } } h["fill-opacity"] && ((g = netgis.util.hexToRGB(h.fill)), (g = "rgba(" + g.join(",") + "," + h["fill-opacity"] + ")"), (h.fill = g)); h["stroke-opacity"] && ((g = netgis.util.hexToRGB(h.stroke)), (g = "rgba(" + g.join(",") + "," + h["stroke-opacity"] + ")"), (h.stroke = g)); h = new ol.style.Style({ image: new ol.style.Circle({ radius: h.radius, fill: new ol.style.Fill({ color: h.stroke }) }), fill: new ol.style.Fill({ color: h.fill }), stroke: new ol.style.Stroke({ color: h.stroke, width: h.width }), }); f.setStyle(h); } b.getSource().addFeatures(a); }); return b; }; netgis.Map.prototype.createBufferFeature = function (a, b, c) { a = this.createBufferGeometry(a, b, c); return new ol.Feature({ geometry: a }); }; netgis.Map.prototype.createBufferGeometry = function (a, b, c) { var d = new jsts.io.OL3Parser(); a = d.read(a).buffer(b, c); if (this.boundsLayer) for (b = this.boundsLayer.getSource().getFeatures(), c = 0; c < b.length; c++) { var e = d.read(b[c].getGeometry()); a.intersects(e) && (a = a.intersection(e)); } return d.write(a); }; netgis.Map.prototype.splitMultiPolygons = function (a) { a = a.getSource(); for (var b = a.getFeatures(), c = [], d = [], e = 0; e < b.length; e++) { var f = b[e], g = f.getGeometry(); if (g instanceof ol.geom.MultiPolygon) { g = g.getPolygons(); for (var h = 0; h < g.length; h++) { var k = new ol.Feature({ geometry: g[h] }); d.push(k); } c.push(f); } } for (e = 0; e < c.length; e++) a.removeFeature(c[e]); a.addFeatures(d); }; netgis.Map.prototype.clearSketchFeatures = function () { for (var a = this.editLayer.getSource(), b = 0; b < this.sketchFeatures.length; b++) a.removeFeature(this.sketchFeatures[b]); this.sketchFeatures = []; }; netgis.Map.prototype.updateDrawBufferPreview = function () { if (!1 !== this.config.tools.editable) { var a = this.interactions[this.mode][0].getOverlay().getSource().getFeatures(); if (!(1 > a.length)) { var b = this.previewLayer.getSource().getFeatures()[0]; b && ((a = a[0].getGeometry()), (a = this.createBufferGeometry(a, this.drawBufferRadius, this.drawBufferSegments)), b.setGeometry(a)); } } }; netgis.Map.prototype.isPointInsideLayer = function (a, b) { a = a.getSource().getFeatures(); for (var c = 0; c < a.length; c++) if (a[c].getGeometry().intersectsCoordinate(b)) return !0; return !1; }; netgis.Map.prototype.isGeomInsideLayer = function (a, b) { var c = b.getCoordinates(); if (b instanceof ol.geom.LineString) { if (2 > c.length) return !1; } else if (b instanceof ol.geom.Polygon && ((c = c[0]), 4 > c.length || 0 >= b.getArea())) return !1; c = new jsts.io.OL3Parser(); b = c.read(b); a = a.getSource().getFeatures(); for (var d = 0; d < a.length; d++) { var e = a[d].getGeometry(); if (c.read(e).contains(b)) return !0; } return !1; }; netgis.Map.prototype.getScaleFromResolution = function (a) { return Math.round(2834.6472 * a); }; netgis.Map.prototype.getResolutionFromScale = function (a) { var b = 39.3701 * ol.proj.Units.METERS_PER_UNIT[this.view.getProjection().getUnits()]; return 1 / (this.normalizeScale(a) * b * 72); }; netgis.Map.prototype.normalizeScale = function (a) { return 1 < a ? 1 / a : a; }; netgis.Map.prototype.updateEditOutput = function () { var a = this.editLayer.getSource().getFeatures(), b = this.view.getProjection().getCode(), c = new ol.format.GeoJSON().writeFeaturesObject(a, { dataProjection: b, featureProjection: b }); c.crs = { type: "name", properties: { name: "urn:ogc:def:crs:" + b.replace(":", "::") } }; for (var d = (b = 0); d < a.length; d++) { var e = a[d].getGeometry(); e instanceof ol.geom.Polygon && (b += e.getArea()); } c.area = b; netgis.util.invoke(this.container, netgis.Events.MAP_EDIT_LAYER_CHANGE, { geojson: c }); }; netgis.Map.prototype.updateSnapFeatures = function () { this.snapFeatures.clear(); var a = this; this.map.getLayers().forEach(function (b, c, d) { c = b.get("id"); c !== netgis.Client.Layers.PARCEL_DISTRICTS && c !== netgis.Client.Layers.PARCEL_FIELDS && c !== netgis.Client.Layers.PARCEL_FEATURES && b instanceof ol.layer.Vector && a.addSnapLayer(b); }); }; netgis.Map.prototype.zoom = function (a) { this.view.animate({ zoom: this.view.getZoom() + a, duration: 200 }); }; netgis.Map.prototype.zoomLevel = function (a) { this.view.animate({ zoom: a, center: this.view.getCenter(), duration: 300 }); }; netgis.Map.prototype.zoomCoords = function (a, b, c) { this.view.animate({ zoom: c, center: [a, b], duration: 500 }); }; netgis.Map.prototype.zoomLonLat = function (a, b, c) { this.view.animate({ zoom: c, center: ol.proj.fromLonLat([a, b], this.view.getProjection()), duration: 500 }); }; netgis.Map.prototype.zoomExtentLonLat = function (a, b, c, d) { a = ol.proj.fromLonLat([a, b], this.view.getProjection()); c = ol.proj.fromLonLat([c, d], this.view.getProjection()); this.view.fit([a[0], a[1], c[0], c[1]]); }; netgis.Map.prototype.zoomExtent = function (a, b, c, d) { this.view.fit([a, b, c, d]); }; netgis.Map.prototype.zoomBBox = function (a, b) { this.view.fit(a, { duration: b }); }; netgis.Map.prototype.zoomScale = function (a, b) { b ? this.view.animate({ resolution: this.getResolutionFromScale(a), duration: 500 }) : this.view.setResolution(this.getResolutionFromScale(a)); }; netgis.Map.prototype.zoomFeature = function (a, b) { a = this.layers[a].getSource().getFeatureById(b); this.view.fit(a.getGeometry().getExtent(), { duration: 500 }); }; netgis.Map.prototype.zoomFeatures = function (a) { if (a && !(1 > a.length)) { for (var b = a[0].getGeometry().getExtent(), c = 1; c < a.length; c++) b = ol.extent.extend(b, a[c].getGeometry().getExtent()); this.view.fit(b, { duration: 0, padding: this.view.padding }); } }; netgis.Map.prototype.addViewHistory = function (a, b) { if (0 < this.viewHistory.length) { var c = this.viewHistory[this.viewHistory.length - 1], d = !0; 10 < Math.abs(a[0] - c.center[0]) && (d = !1); 10 < Math.abs(a[1] - c.center[1]) && (d = !1); 0.1 < Math.abs(b - c.zoom) && (d = !1); if (!0 === d) return; } this.viewHistory.push({ center: a, zoom: b }); this.viewHistory.length > this.viewHistoryMax && this.viewHistory.shift(); this.viewIndex = this.viewHistory.length - 1; }; netgis.Map.prototype.gotoViewHistory = function (a) { if (!(1 > this.viewHistory.length)) { var b = this.viewHistory.length - 1; 0 > a && (a = b); a > b && (a = 0); a !== this.viewIndex && ((b = this.viewHistory[a]), (this.viewIndex = a), (this.viewFromHistory = !0), this.view.setCenter(b.center), this.view.setZoom(b.zoom)); } }; netgis.Map.prototype.setPadding = function (a, b, c, d) { var e = this.paddingBuffer; this.view.padding = [a + e, b + e, c + e, d + e]; }; netgis.Map.prototype.exportImage = function (a, b, c, d, e) { var f = this, g = this.container, h = this.map, k = this.config["export"], l = new Image(); l.onload = function () { var m = document.createElement("div"); m.style.position = "fixed"; m.style.top = "0px"; m.style.left = "0px"; m.style.width = b + "px"; m.style.height = c + "px"; m.style.background = "white"; m.style.zIndex = -1; m.style.opacity = 0; m.style.pointerEvents = "none"; g.appendChild(m); h.setTarget(m); h.once("rendercomplete", function () { var n = document.createElement("canvas"); n.width = b; n.height = c; var p = n.getContext("2d"); p.webkitImageSmoothingEnabled = !1; p.mozImageSmoothingEnabled = !1; p.imageSmoothingEnabled = !1; Array.prototype.forEach.call(document.querySelectorAll(".ol-layer canvas"), function (a) { if (0 < a.width) { var b = a.parentNode.style.opacity; p.globalAlpha = "" === b ? 1 : Number(b); b = a.style.transform .match(/^matrix\(([^\(]*)\)$/)[1] .split(",") .map(Number); CanvasRenderingContext2D.prototype.setTransform.apply(p, b); p.drawImage(a, 0, 0); } }); p.drawImage(l, 0, 0); p.fillStyle = "#fff"; p.fillRect(0, n.height - 30, 140, 30); p.fillStyle = "#000"; p.font = "4mm sans-serif"; p.fillText(netgis.util.getTimeStamp(), 10, n.height - 10); var q = document.createElement("a"); switch (a) { case "pdf": e = e ? e : 0; var r = 297 - e - e, t = 210 - e - e, u = n.width / n.height; if (!d) { var v = r; r = t; t = v; } if (n.height > n.width) { var w = t; v = w * u; v > r && ((v = r), (w = v / u)); } else (v = r), (w = v / u), w > t && ((w = t), (v = w * u)); u = new jsPDF(d ? "l" : "p"); var x = e; x += (r - v) / 2; r = e; r += (t - w) / 2; u.addImage(n.toDataURL("image/png,1.0", 1), "PNG", x, r, v, w); u.setFillColor(255, 255, 255); u.rect(x, r + w - 11, 80, 11, "F"); u.setFontSize(8); u.text("Datum: " + netgis.util.getTimeStamp(), x + 2, r + w - 2 - 4); u.text("Quelle: " + window.location.href, x + 2, r + w - 2); n = u.output("bloburl", { filename: k.default_filename + ".pdf" }); window.open(n, "_blank"); break; case "jpeg": window.navigator.msSaveBlob ? window.navigator.msSaveBlob(n.msToBlob(), k.default_filename + ".jpg") : (q.setAttribute("download", k.default_filename + ".jpg"), q.setAttribute("href", n.toDataURL("image/jpeg", 1)), q.click()); break; case "png": window.navigator.msSaveBlob ? window.navigator.msSaveBlob(n.msToBlob(), k.default_filename + ".png") : (q.setAttribute("download", k.default_filename + ".png"), q.setAttribute("href", n.toDataURL("image/png", 1)), q.click()); break; case "gif": q.setAttribute("download", k.default_filename + ".gif"), (t = new GIF({ workerScript: k.gif_worker, quality: 1 })), t.addFrame(n), t.on("finished", function (a) { q.setAttribute("href", window.URL.createObjectURL(a)); q.click(); }), t.render(); } h.setTarget(g); g.removeChild(m); netgis.util.invoke(f.container, netgis.Events.EXPORT_END, null); }); h.renderSync(); }; l.src = k.logo; }; netgis.Map.prototype.exportFeatures = function (a) { var b = this.editLayer.getSource().getFeatures(); !0 === a && ((a = this.nonEditLayer.getSource().getFeatures()), (b = b.concat(a))); b = new ol.format.GeoJSON().writeFeaturesObject(b, { featureProjection: this.view.getProjection(), dataProjection: "EPSG:4326", }); a = this.config["export"].default_filename + ".geojson"; b.name = a; netgis.util.downloadJSON(b, a); netgis.util.invoke(this.container, netgis.Events.EXPORT_END, null); }; netgis.Map.prototype.onClientContextResponse = function (a) { this.initConfig(a.detail.context.config); }; netgis.Map.prototype.onEditLayerLoaded = function (a) { a = a.detail.geojson; var b = new ol.format.GeoJSON(); b.readProjection(a); a = b.readFeatures(a, { featureProjection: this.view.getProjection().getCode() }); var c = this, d = a.slice(); window.setTimeout(function () { c.zoomFeatures(d); }, 10); b = []; for (var e = 0; e < a.length; e++) { var f = a[e]; !0 === f.getProperties().editable && b.push(f); } for (e = 0; e < b.length; e++) a.splice(a.indexOf(b[e]), 1); this.editEventsSilent = !0; this.editLayer.getSource().addFeatures(b); this.nonEditLayer.getSource().addFeatures(a); this.editEventsSilent = !1; }; netgis.Map.prototype.onClientSetMode = function (a) { this.setMode(a.detail.mode); }; netgis.Map.prototype.onPanelResize = function (a) { this.setPadding(0, 0, 0, a.detail.width); this.redrawVectorLayers(); }; netgis.Map.prototype.onPanelToggle = function (a) { a = !1; for (var b = 0, c = this.container.parentNode.getElementsByClassName("netgis-panel"), d = 0; d < c.length; d++) if (c[d].classList.contains("netgis-show")) { a = !0; b = c[d].getBoundingClientRect().width; break; } a ? this.setPadding(0, 0, 0, b) : this.setPadding(0, 0, 0, 0); this.redrawVectorLayers(); }; netgis.Map.prototype.onMapZoom = function (a) { this.zoom(a.detail.delta); }; netgis.Map.prototype.onMapZoomHome = function (a) { a = this.config; if (a.map.bbox) this.zoomBBox(a.map.bbox, 500); else if (a.map.center) { var b = a.map.center; this.zoomCoords(b[0], b[1], a.map.zoom); } else a.map.center_lonlat && ((b = a.map.center_lonlat), this.zoomLonLat(b[0], b[1], a.map.zoom)); }; netgis.Map.prototype.onMapZoomLonLat = function (a) { a = a.detail; this.zoomLonLat(a.lon, a.lat, a.zoom); }; netgis.Map.prototype.onMapZoomScale = function (a) { a = a.detail; this.zoomScale(a.scale, a.anim); }; netgis.Map.prototype.onMapZoomLayer = function (a) { a = a.detail; var b = this.layers[a.id]; b ? this.view.fit(b.getSource().getExtent(), { duration: 600 }) : console.warning("trying to zoom non existing layer", a.id); }; netgis.Map.prototype.onMapZoomLevel = function (a) { this.view.setZoom(a.detail.z); }; netgis.Map.prototype.onMapViewPrev = function (a) { this.gotoViewHistory(this.viewIndex - 1); }; netgis.Map.prototype.onMapViewNext = function (a) { this.gotoViewHistory(this.viewIndex + 1); }; netgis.Map.prototype.onMapLayerToggle = function (a) { a = a.detail; switch (a.id) { case netgis.LayerID.EDITABLE: a.on ? this.map.addLayer(this.editLayer) : this.map.removeLayer(this.editLayer); break; case netgis.LayerID.NON_EDITABLE: a.on ? this.map.addLayer(this.nonEditLayer) : this.map.removeLayer(this.nonEditLayer); break; default: if (a.on) for (var b = this.config.layers, c = 0; c < b.length; c++) { var d = b[c]; d.id === a.id && this.addLayer(a.id, d); } else this.removeLayer(a.id); } }; netgis.Map.prototype.onMapLayerTransparency = function (a) { a = a.detail; var b = this.layers[a.id]; b || (netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: a.id, on: !0 }), (b = this.layers[a.id])); b.setOpacity(1 - a.transparency); }; netgis.Map.prototype.onMapLayerOrder = function (a) { a = a.detail; var b = this.layers[a.id]; b && b.setZIndex(a.order); }; netgis.Map.prototype.onMapLayerCreate = function (a) { a = a.detail; this.addLayer(a.id, a); }; netgis.Map.prototype.onMapLayerDelete = function (a) { this.removeLayer(a.detail.id); }; netgis.Map.prototype.onMapSnapToggle = function (a) { this.setSnapping(a.detail.on); }; netgis.Map.prototype.onMapMoveEnd = function (a) { a = this.view.getCenter(); var b = this.view.getZoom(), c = this.getScaleFromResolution(this.view.getResolution()); !1 === this.viewFromHistory && this.addViewHistory(a, b); netgis.util.invoke(this.container, netgis.Events.MAP_VIEW_CHANGE, { center: a, zoom: b, scale: c }); this.viewFromHistory = !1; }; netgis.Map.prototype.onPointerMove = function (a) { var b = a.pixel; a = a.coordinate; var c = null, d = null, e = void 0, f = this; this.map.forEachFeatureAtPixel(b, function (a, b) { if (b && b !== f.measureLayer && b !== f.nonEditLayer) if (b === f.boundsLayer) e = a; else if (b !== f.previewLayer) return (c = a), (d = b), !0; }); switch (this.mode) { case netgis.Modes.VIEW: 0 === this.getQueryableLayers(!0).length ? c ? this.container.classList.add("netgis-clickable") : this.container.classList.remove("netgis-clickable") : this.container.classList.add("netgis-clickable"); break; case netgis.Modes.DRAW_POINTS: case netgis.Modes.DRAW_LINES: this.updateDrawBufferPreview(); } if ( this.boundsLayer && (this.mode === netgis.Modes.DRAW_POINTS || this.mode === netgis.Modes.DRAW_LINES || this.mode === netgis.Modes.DRAW_POLYGONS) ) { if (e) this.container.classList.remove("netgis-not-allowed"), this.container.removeAttribute("title"); else { this.container.classList.add("netgis-not-allowed"); var g = this.config.tools.bounds_message; g && 0 < g.length && this.container.setAttribute("title", g); } this.hoverBounds = e; } g = !0; this.mode === netgis.Modes.MEASURE_LINE && (g = !1); this.mode === netgis.Modes.MEASURE_AREA && (g = !1); this.mode === netgis.Modes.DRAW_POINTS && (g = !1); this.mode === netgis.Modes.DRAW_LINES && (g = !1); this.mode === netgis.Modes.DRAW_POLYGONS && (g = !1); this.mode === netgis.Modes.CUT_FEATURES_DRAW && (g = !1); if (c !== this.hoverFeature && g) { if (this.hoverFeature) this.onFeatureLeave(this.hoverFeature, this.hoverLayer, b, a); if (c) this.onFeatureEnter(c, d, b, a); this.redrawVectorLayers(); this.hoverFeature = c; this.hoverLayer = d; } if (c) this.onFeatureHover(c, d, b, a); }; netgis.Map.prototype.onPointerLeave = function (a) { this.hoverFeature && (this.onFeatureLeave(this.hoverFeature, this.hoverLayer, [a.offsetX, a.offsetY], null), (this.hoverLayer = this.hoverFeature = null)); }; netgis.Map.prototype.onPointerClick = function (a) { var b = a.pixel; a = a.coordinate; this.popupOverlay.setPosition(a); var c = { resolution: this.view.getResolution(), projection: this.view.getProjection().getCode(), bbox: this.view.calculateExtent(this.map.getSize()), width: this.map.getSize()[0], height: this.map.getSize()[1], }, d = ol.proj.toLonLat(a, this.view.getProjection()), e = {}; for (g in this.layers) { var f = this.layers[g].getSource(); f.getFeatureInfoUrl && (e[g] = f.getFeatureInfoUrl(a, c.resolution, c.projection, { INFO_FORMAT: "text/html" })); } var g = { mode: this.mode, pixel: b, coords: a, lon: d[0], lat: d[1], overlay: this.popupOverlay.getElement(), view: c, info: e, }; this.mode === netgis.Modes.VIEW && netgis.util.invoke(this.container, netgis.Events.MAP_CLICK, g); var h = [], k = this; this.map.forEachFeatureAtPixel(b, function (a, b) { b && b !== k.nonEditLayer && b !== k.boundsLayer && b !== k.measureLayer && b !== k.previewLayer && (-1 < k.sketchFeatures.indexOf(a) || h.push({ feature: a, layer: b })); }); g = !0; this.mode === netgis.Modes.VIEW && (g = !1); this.mode === netgis.Modes.MEASURE_LINE && (g = !1); this.mode === netgis.Modes.MEASURE_AREA && (g = !1); this.mode === netgis.Modes.DRAW_POINTS && (g = !1); this.mode === netgis.Modes.DRAW_LINES && (g = !1); this.mode === netgis.Modes.DRAW_POLYGONS && (g = !1); this.mode === netgis.Modes.CUT_FEATURES_DRAW && (g = !1); g && (0 < h.length && !1 === this.selectMultiple && (this.selectedFeatures = []), 0 === h.length && !1 === this.selectMultiple && (this.selectedFeatures = []), !0 === this.selectReset && ((this.selectedFeatures = []), (this.selectReset = !1)), this.mode === netgis.Modes.BUFFER_FEATURES_DYNAMIC && this.updateBufferFeaturesSketch(this.bufferFeaturesRadius, this.bufferFeaturesSegments)); for (c = 0; c < h.length; c++) (d = h[c]), g && ((e = this.selectedFeatures.indexOf(d.feature)), -1 < e ? this.selectedFeatures.splice(e, 1) : this.selectedFeatures.push(d.feature)), this.onFeatureClick(d.feature, d.layer, b, a); this.redrawVectorLayers(); }; netgis.Map.prototype.onContainerClick = function (a) { if (2 === a.detail) this.onDoubleClick(a); }; netgis.Map.prototype.onDoubleClick = function (a) { switch (this.mode) { case netgis.Modes.MEASURE_LINE: this.interactions[netgis.Modes.MEASURE_LINE] && this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing(); break; case netgis.Modes.MEASURE_AREA: this.interactions[netgis.Modes.MEASURE_AREA] && this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing(); break; case netgis.Modes.DRAW_LINES: this.interactions[netgis.Modes.DRAW_LINES] && this.interactions[netgis.Modes.DRAW_LINES][0].finishDrawing(); break; case netgis.Modes.DRAW_POLYGONS: this.interactions[netgis.Modes.DRAW_POLYGONS] && this.interactions[netgis.Modes.DRAW_POLYGONS][0].finishDrawing(); break; case netgis.Modes.CUT_FEATURES_DRAW: this.interactions[netgis.Modes.CUT_FEATURES_DRAW] && this.interactions[netgis.Modes.CUT_FEATURES_DRAW][0].finishDrawing(); } }; netgis.Map.prototype.onRightClick = function (a) { switch (this.mode) { case netgis.Modes.MEASURE_LINE: this.interactions[netgis.Modes.MEASURE_LINE] && this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing(); break; case netgis.Modes.MEASURE_AREA: this.interactions[netgis.Modes.MEASURE_AREA] && this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing(); break; case netgis.Modes.DRAW_LINES: this.interactions[netgis.Modes.DRAW_LINES] && this.interactions[netgis.Modes.DRAW_LINES][0].finishDrawing(); break; case netgis.Modes.DRAW_POLYGONS: this.interactions[netgis.Modes.DRAW_POLYGONS] && this.interactions[netgis.Modes.DRAW_POLYGONS][0].finishDrawing(); break; case netgis.Modes.CUT_FEATURES_DRAW: this.interactions[netgis.Modes.CUT_FEATURES_DRAW] && this.interactions[netgis.Modes.CUT_FEATURES_DRAW][0].finishDrawing(); } a.preventDefault(); return !1; }; netgis.Map.prototype.onKeyDown = function (a) { a = a.keyCode || a.which; switch (this.mode) { case netgis.Modes.MEASURE_LINE: 13 === a && this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing(); 27 === a && this.interactions[netgis.Modes.MEASURE_LINE][2].abortDrawing(); break; case netgis.Modes.MEASURE_AREA: 13 === a && this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing(); 27 === a && this.interactions[netgis.Modes.MEASURE_AREA][2].abortDrawing(); break; case netgis.Modes.DRAW_LINES: var b = this.interactions[netgis.Modes.DRAW_LINES][0]; 13 === a && b.finishDrawing(); 27 === a && b.abortDrawing(); 8 === a && b.removeLastPoint(); 46 === a && b.abortDrawing(); break; case netgis.Modes.DRAW_POLYGONS: b = this.interactions[netgis.Modes.DRAW_POLYGONS][0]; 13 === a && b.finishDrawing(); 27 === a && b.abortDrawing(); 8 === a && b.removeLastPoint(); 46 === a && b.abortDrawing(); break; case netgis.Modes.CUT_FEATURES_DRAW: (b = this.interactions[netgis.Modes.CUT_FEATURES_DRAW][0]), 13 === a && b.finishDrawing(), 27 === a && b.abortDrawing(), 8 === a && b.removeLastPoint(), 46 === a && b.abortDrawing(), 16 === a && netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES, }); } 16 === a && !1 === this.selectMultiple && netgis.util.invoke(this.container, netgis.Events.SELECT_MULTI_TOGGLE, { on: !0 }); }; netgis.Map.prototype.onKeyUp = function (a) { a = a.keyCode || a.which; switch (this.mode) { case netgis.Modes.BUFFER_FEATURES: this.selectMultiple && netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES_EDIT, }); break; case netgis.Modes.CUT_FEATURES: this.selectMultiple && netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES_DRAW, }); } 16 === a && (netgis.util.invoke(this.container, netgis.Events.SELECT_MULTI_TOGGLE, { on: !1 }), (this.selectReset = !1), !0 === this.config.tools.select_multi_reset && (this.selectReset = !0)); }; netgis.Map.prototype.onFeatureEnter = function (a, b, c, d) { if (b) { switch (this.mode) { case netgis.Modes.VIEW: this.container.classList.add("netgis-clickable"); break; case netgis.Modes.DELETE_FEATURES: case netgis.Modes.BUFFER_FEATURES: case netgis.Modes.BUFFER_FEATURES_DYNAMIC: case netgis.Modes.CUT_FEATURES: this.container.classList.add("netgis-clickable"); a.setStyle(this.styleHover.bind(this)); break; case netgis.Modes.SEARCH_PARCEL: this.container.classList.add("netgis-clickable"), a.setStyle(this.styleHover.bind(this)); } netgis.util.invoke(this.container, netgis.Events.MAP_FEATURE_ENTER, { pixel: c, coords: d, layer: b.get("id"), properties: a.getProperties(), }); } }; netgis.Map.prototype.onFeatureHover = function (a, b, c, d) {}; netgis.Map.prototype.onFeatureClick = function (a, b, c, d) { var e = ol.proj.toLonLat(d, this.view.getProjection()); c = { pixel: c, coords: d, lon: e[0], lat: e[1], overlay: this.popupOverlay.getElement(), layer: b.get("id"), id: a.getId(), properties: a.getProperties(), mode: this.mode, }; netgis.util.invoke(this.container, netgis.Events.MAP_FEATURE_CLICK, c); switch (this.mode) { case netgis.Modes.DELETE_FEATURES: b.getSource().removeFeature(a); this.onFeatureLeave(a, b); netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW }); break; case netgis.Modes.BUFFER_FEATURES: case netgis.Modes.BUFFER_FEATURES_EDIT: this.onFeatureLeave(a, b); this.selectMultiple ? netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES, }) : netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES_EDIT, }); break; case netgis.Modes.BUFFER_FEATURES_DYNAMIC: this.updateBufferFeaturesSketch(this.bufferFeaturesRadius, this.bufferFeaturesSegments); break; case netgis.Modes.CUT_FEATURES: if (a.getGeometry() instanceof ol.geom.Point) this.onFeatureLeave(a, b); else this.selectMultiple || netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES_DRAW, }); } }; netgis.Map.prototype.onFeatureLeave = function (a, b, c, d) { netgis.util.invoke(this.container, netgis.Events.MAP_FEATURE_LEAVE, { pixel: c, coords: d, layer: b ? b.get("id") : null, properties: a.getProperties(), }); switch (this.mode) { case netgis.Modes.DELETE_FEATURES: case netgis.Modes.BUFFER_FEATURES: case netgis.Modes.BUFFER_FEATURES_DYNAMIC: case netgis.Modes.CUT_FEATURES: case netgis.Modes.CUT_FEATURES_DRAW: this.container.classList.remove("netgis-clickable"); a.setStyle(null); break; case netgis.Modes.SEARCH_PARCEL: this.container.classList.remove("netgis-clickable"), a.setStyle(null); } }; netgis.Map.prototype.onEditLayerAdd = function (a) { this.editEventsSilent || this.updateEditOutput(); this.snapFeatures.push(a.feature); }; netgis.Map.prototype.onEditLayerRemove = function (a) { this.editEventsSilent || this.updateEditOutput(); this.snapFeatures.remove(a.feature); }; netgis.Map.prototype.onEditLayerChange = function (a) { this.editEventsSilent || this.updateEditOutput(); }; netgis.Map.prototype.onCopyFeatureToEdit = function (a) { a = a.detail; var b = this.layers[a.source].getSource().getFeatureById(a.id); b ? this.editLayer.getSource().getFeatureById(a.id) || (b.setStyle(void 0), (this.selectedFeatures = []), this.editLayer.getSource().addFeature(b)) : console.error("feature to copy not found", a); }; netgis.Map.prototype.onGeolocToggleActive = function (a) { a.detail.on ? this.geolocLayer.setVisible(!0) : this.geolocLayer.setVisible(!1); }; netgis.Map.prototype.onGeolocChange = function (a) { a = a.detail; this.geolocLayer .getSource() .getFeatures()[0] .getGeometry() .setCoordinates(ol.proj.fromLonLat([a.lon, a.lat], this.view.getProjection())); !0 === a.center && this.zoomLonLat(a.lon, a.lat, this.view.getZoom()); }; netgis.Map.prototype.onMeasureLineBegin = function (a) { this.measureLayer.getSource().clear(); }; netgis.Map.prototype.onMeasureAreaBegin = function (a) { this.measureLayer.getSource().clear(); }; netgis.Map.prototype.onMeasureClear = function (a) { this.measureLayer.getSource().clear(); }; netgis.Map.prototype.onDrawBufferEnd = function (a) { var b = a.feature; a = this.previewLayer.getSource().getFeatures(); if (0 !== a.length) { a = a[0]; if (this.boundsLayer) { var c = !0; c = b.getGeometry() instanceof ol.geom.Point ? this.isPointInsideLayer(this.boundsLayer, b.getGeometry().getCoordinates()) : this.isGeomInsideLayer(this.boundsLayer, b.getGeometry()); if (!c) return; c = new jsts.io.OL3Parser(); for ( var d = c.read(a.getGeometry()), e = this.boundsLayer.getSource().getFeatures(), f = 0; f < e.length; f++ ) { var g = c.read(e[f].getGeometry()); d.intersects(g) && (d = d.intersection(g)); } c = c.write(d); a.setGeometry(c); } var h = this.editLayer.getSource(); h.addFeature(a.clone()); window.setTimeout(function () { h.removeFeature(b); }, 10); } }; netgis.Map.prototype.onSelectMultiToggle = function (a) { this.selectMultiple = a.detail.on; }; netgis.Map.prototype.onDrawBufferToggle = function (a) { a = a.detail; this.setDrawBuffer(a.on, a.radius, a.segments); }; netgis.Map.prototype.onDrawBufferChange = function (a) { a = a.detail; this.drawBufferRadius = a.radius; this.drawBufferSegments = a.segments; this.updateDrawBufferPreview(); }; netgis.Map.prototype.onBufferChange = function (a) { a = a.detail; this.updateBufferFeaturesSketch(a.radius, a.segments); this.bufferFeaturesRadius = a.radius; this.bufferFeaturesSegments = a.segments; }; netgis.Map.prototype.updateBufferFeaturesSketch = function (a, b) { var c = this.selectedFeatures, d = this.editLayer.getSource(); this.clearSketchFeatures(); for (var e = 0; e < c.length; e++) { var f = this.createBufferFeature(this.selectedFeatures[e].getGeometry(), a, b); d.addFeature(f); this.sketchFeatures.push(f); } }; netgis.Map.prototype.onBufferAccept = function (a) { a = this.selectedFeatures; for (var b = this.editLayer.getSource(), c = 0; c < a.length; c++) b.removeFeature(a[c]); this.sketchFeatures = []; this.selectedFeatures = []; }; netgis.Map.prototype.onCutFeaturesDrawEnd = function (a) { a = a.feature; for (var b = 0; b < this.selectedFeatures.length; b++) { var c = this.selectedFeatures[b]; if (c) if ((this.onFeatureLeave(c, null), c.getGeometry() instanceof ol.geom.Point)) console.error("trying to cut a point feature", c); else { var d = new jsts.io.OL3Parser(), e = d.read(c.getGeometry()), f = d.read(a.getGeometry()); e = e.difference(f); d = d.write(e); d = new ol.Feature({ geometry: d }); e = this.editLayer.getSource(); e.removeFeature(c); e.addFeature(d); } } this.selectedFeatures = []; this.editEventsSilent = !0; this.splitMultiPolygons(this.editLayer); this.editEventsSilent = !1; this.updateEditOutput(); netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW }); }; netgis.Map.prototype.onImportLayerAccept = function (a) { a = a.detail; a = this.addLayer(a.id, a); var b = a.getSource(); var features = b.getFeatures() if (features.length < 100){ this.editLayer.getSource().addFeatures(b.getFeatures()) } b instanceof ol.source.Vector && 0 < b.getFeatures().length && this.view.fit(a.getSource().getExtent(), { duration: 600 }); }; netgis.Map.prototype.onImportGeoportalSubmit = function (a) {}; netgis.Map.prototype.onImportLayerPreview = function (a) { a = a.detail; var b = this.createLayer(a), c = this.view.getProjection().getCode(); netgis.util.invoke(this.container, netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES, { id: a.id, title: a.title, layer: b, proj: c, }); }; netgis.Map.prototype.onSearchParcelReset = function (a) { (a = this.config.searchparcel.districts_service.min_zoom) && this.view.setZoom(a); }; netgis.Map.prototype.onSearchParcelItemEnter = function (a) { a = a.detail.id; this.layers.searchparcel_parcels.getSource().getFeatureById(a).setStyle(this.styleHover.bind(this)); }; netgis.Map.prototype.onSearchParcelItemLeave = function (a) { a = a.detail.id; this.layers.searchparcel_parcels.getSource().getFeatureById(a).setStyle(null); }; netgis.Map.prototype.onSearchParcelItemClick = function (a) { this.zoomFeature("searchparcel_parcels", a.detail.id); }; netgis.Map.prototype.onSearchParcelItemImport = function (a) {}; netgis.Map.prototype.onDrawPointsUpdateGeom = function (a, b, c) { b ? b.setCoordinates(a) : (b = new ol.geom.Point(a)); return b; }; netgis.Map.prototype.onDrawLinesUpdateGeom = function (a, b, c) { b ? b.setCoordinates(a) : (b = new ol.geom.LineString(a)); this.drawError = !this.isGeomInsideLayer(this.boundsLayer, b); return b; }; netgis.Map.prototype.onDrawPolygonsUpdateGeom = function (a, b, c) { b ? ((a = [a[0].concat([a[0][0]])]), b.setCoordinates(a)) : (b = new ol.geom.Polygon(a)); c = !0; if (4 > a[0].length) for (var d = 0; d < a[0].length; d++) { if (!this.isPointInsideLayer(this.boundsLayer, a[0][d])) { c = !1; break; } } else c = this.isGeomInsideLayer(this.boundsLayer, b); this.drawError = !c; return b; }; netgis.Map.prototype.onDrawPointsEnd = function (a) { if (this.boundsLayer) { var b = a.feature, c = this.editLayer; this.isPointInsideLayer(this.boundsLayer, b.getGeometry().getCoordinates()) || window.setTimeout(function () { c.getSource().removeFeature(b); }, 10); } }; netgis.Map.prototype.onDrawLinesEnd = function (a) { if (this.boundsLayer) { var b = a.feature, c = this.editLayer; this.isGeomInsideLayer(this.boundsLayer, b.getGeometry()) || window.setTimeout(function () { c.getSource().removeFeature(b); }, 10); } }; netgis.Map.prototype.onDrawPolygonsEnd = function (a) { if (this.boundsLayer) { var b = a.feature, c = this.editLayer; this.isGeomInsideLayer(this.boundsLayer, b.getGeometry()) || window.setTimeout(function () { c.getSource().removeFeature(b); }, 10); } }; netgis.Map.prototype.onExportBegin = function (a) { a = a.detail; switch (a.format) { case "geojson": this.exportFeatures(a.nonEdits); break; default: this.exportImage(a.format, a.width, a.height, a.landscape, a.padding); } }; netgis.Map.prototype.onScalebarSelectChange = function (a) { netgis.util.invoke(this.scalebarSelect, netgis.Events.MAP_ZOOM_SCALE, { scale: this.scalebarSelect.value, anim: !0, }); }; netgis.Map.prototype.onTimeSliderShow = function (a) {}; netgis.Map.prototype.onTimeSliderHide = function (a) {}; netgis.Map.prototype.onTimeSliderSelect = function (a) { a = a.detail; console.info("Time Slider Select:", a); this.layers[a.layer].getSource().updateParams({ TIME: a.time }); }; netgis = netgis || {}; netgis.Menu = function (a) { this.config = a; this.initElements(); this.initConfig(a); }; netgis.Menu.Config = { header: "NetGIS Client", items: [], compact: !0 }; netgis.Menu.prototype.initElements = function () { this.container = document.createElement("nav"); this.container.className = "netgis-menu netgis-noselect netgis-color-a netgis-gradient-a netgis-shadow-large"; this.toggle = document.createElement("button"); this.toggle.setAttribute("type", "button"); this.toggle.addEventListener("click", this.onToggleClick.bind(this)); this.toggle.className = "netgis-menu-toggle netgis-hover-c"; this.toggle.innerHTML = ""; this.container.appendChild(this.toggle); }; netgis.Menu.prototype.initConfig = function (a) { var b = a.menu; if ( b && (b.header && this.addHeader(b.header), !0 === b.compact && this.container.classList.add("netgis-compact"), b.items) ) { b = b.items; for (var c = 0; c < b.length; c++) { var d = b[c]; if (d.items) { var e = d.items; if ("scales" === d.id) for (var f = this.getScaleItems(), g = 0; g < f.length; g++) e.push(f[g]); this.addDropdown(d.title, e); } else if (d.url && 0 < d.url.length) this.addLink(d.url, d.title); else if (d.options) if ("scales" === d.options) { e = { 0: "1:X" }; for (g = 0; g < a.map.scales.length; g++) e[a.map.scales[g]] = "1:" + a.map.scales[g]; var h = a.map.default_scale; this.addSelect(d.id, d.title, e, h).options[0].classList.add("netgis-hide"); } else { e = d.options; if (d.value) h = d.value; else for (var k in e) { h = k; break; } this.addSelect(d.id, d.title, e, h); } else this.addButton(d.id, d.title); } } }; netgis.Menu.prototype.attachTo = function (a) { a.appendChild(this.container); a.addEventListener(netgis.Events.MAP_VIEW_CHANGE, this.onMapViewChange.bind(this)); }; netgis.Menu.prototype.addHeader = function (a) { var b = document.createElement("h1"); b.className = "netgis-hover-c"; b.innerHTML = a; this.container.appendChild(b); return b; }; netgis.Menu.prototype.addButton = function (a, b) { a = this.createButton(a, b); this.container.appendChild(a); return a; }; netgis.Menu.prototype.addLink = function (a, b) { a = this.createLink(a, b); this.container.appendChild(a); return a; }; netgis.Menu.prototype.addSelect = function (a, b, c, d) { var e = document.createElement("span"); e.className = "netgis-wrapper netgis-hover-c"; var f = document.createElement("select"); f.setAttribute("data-id", a); for (var g in c) { a = c[g]; var h = document.createElement("option"); h.setAttribute("value", g); h.innerHTML = a; f.appendChild(h); } f.value = d; f.addEventListener("change", this.onSelectChange.bind(this)); e.appendChild(f); b && ((c = document.createElement("span")), (c.className = "netgis-icon"), (c.innerHTML = b), e.appendChild(c)); this.container.appendChild(e); return f; }; netgis.Menu.prototype.addDropdown = function (a, b) { var c = document.createElement("div"); c.className = "netgis-dropdown netgis-hover-c"; var d = document.createElement("button"); d.setAttribute("type", "button"); d.addEventListener("click", this.onDropdownClick.bind(this)); d.innerHTML = a; c.appendChild(d); a = document.createElement("ul"); a.className = "netgis-color-e netgis-shadow"; c.appendChild(a); for (d = 0; d < b.length; d++) a.appendChild(this.createMenuItem(b[d])); this.container.appendChild(c); return c; }; netgis.Menu.prototype.getScaleItems = function () { var a = []; if (!this.config || !this.config.map || !this.config.map.scales) return a; for (var b = this.config.map.scales, c = 0; c < b.length; c++) a.push({ id: netgis.Commands.ZOOM_SCALE, title: "1:" + b[c] }); return a; }; netgis.Menu.prototype.createMenuItem = function (a) { var b = document.createElement("li"); b.className = "netgis-hover-c"; var c = a.items; if ("scales" === a.id) for (var d = this.getScaleItems(), e = 0; e < d.length; e++) c.push(d[e]); if (c && 0 < c.length) (a = this.createMenu(a.title, c)), b.appendChild(a.button), b.appendChild(a.list); else if (a.type) switch (a.type) { case "checkbox": a = this.createCheckbox(a.id, a.title, a.value); b.appendChild(a); break; default: console.error("unhandled menu item type", a.type, "for", a.id); } else a.url ? ((a = this.createLink(a.url, a.title)), b.appendChild(a)) : ((a = this.createButton(a.id, a.title)), b.appendChild(a)); return b; }; netgis.Menu.prototype.createMenu = function (a, b) { var c = document.createElement("button"); c.setAttribute("type", "button"); c.addEventListener("pointerdown", this.onButtonClick.bind(this)); c.innerHTML = a; a = document.createElement("ul"); a.className = "netgis-color-e netgis-shadow"; for (var d = 0; d < b.length; d++) a.appendChild(this.createMenuItem(b[d])); return { button: c, list: a }; }; netgis.Menu.prototype.createLink = function (a, b) { var c = document.createElement("a"); c.setAttribute("href", a); c.setAttribute("target", "_blank"); c.className = "netgis-button netgis-text-e netgis-hover-c"; c.innerHTML = b; return c; }; netgis.Menu.prototype.createButton = function (a, b) { var c = document.createElement("button"); c.className = "netgis-text-e netgis-hover-c"; c.setAttribute("type", "button"); c.setAttribute("data-id", a); c.addEventListener("pointerdown", this.onButtonClick.bind(this)); c.innerHTML = b; return c; }; netgis.Menu.prototype.createCheckbox = function (a, b, c) { var d = document.createElement("label"); d.className = "netgis-button"; var e = document.createElement("input"); e.setAttribute("type", "checkbox"); e.setAttribute("data-id", a); e.addEventListener("change", this.onCheckboxChange.bind(this)); e.checked = c; d.appendChild(e); a = document.createElement("span"); a.innerHTML = b; d.appendChild(a); return d; }; netgis.Menu.prototype.onToggleClick = function (a) { this.container.classList.toggle("netgis-menu-large"); }; netgis.Menu.prototype.onButtonClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); this.container.classList.remove("netgis-menu-large"); this.container.scrollTop = 0; netgis.util.invoke(a, netgis.Events.MENU_BUTTON_CLICK, { id: b }); netgis.Client.handleCommand(a, b); }; netgis.Menu.prototype.onCheckboxChange = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"), c = a.checked; netgis.util.invoke(a, netgis.Events.MENU_CHECKBOX_CHANGE, { id: b, checked: c }); switch (b) { case netgis.Menu.ItemID.SNAP_TOGGLE: netgis.util.invoke(a, netgis.Events.MAP_SNAP_TOGGLE, { on: c }); break; default: console.error("unhandled menu item id", b); } }; netgis.Menu.prototype.onSelectChange = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"), c = a.value; netgis.util.invoke(a, netgis.Events.MENU_SELECT_CHANGE, { id: b, value: c }); switch (b) { case "scales": netgis.util.invoke(a, netgis.Events.MAP_ZOOM_SCALE, { scale: Number.parseInt(c) }); } }; netgis.Menu.prototype.onMapViewChange = function (a) { a = a.detail; for (var b = a.scale, c = this.container.getElementsByTagName("button"), d = 0; d < c.length; d++) { var e = c[d]; "zoom_scale" === e.getAttribute("data-id") && (Number.parseInt(e.innerText.split(":")[1]) === b ? e.classList.add("netgis-bold") : e.classList.remove("netgis-bold")); } c = this.container.getElementsByTagName("select"); for (d = 0; d < c.length; d++) { e = c[d]; if ("scales" === !e.getAttribute("data-id")) break; for (var f = !1, g = this.config.map.scales, h = 0; h < g.length; h++) if (g[h] === b) { f = !0; break; } f ? e.options[0].classList.add("netgis-hide") : (e.options[0].setAttribute("value", a.scale), (e.options[0].innerHTML = "1:" + a.scale), e.options[0].classList.remove("netgis-hide")); e.value = b; } }; netgis.Menu.prototype.onDropdownClick = function (a) { a.currentTarget.parentNode.classList.toggle("netgis-active"); }; netgis = netgis || {}; netgis.Modal = function (a) { this.initElements(a); this.initEvents(); }; netgis.Modal.prototype.initElements = function (a) { this.container = document.createElement("div"); this.container.className = "netgis-modal"; this.container.addEventListener("click", this.onContainerClick.bind(this)); this.content = document.createElement("div"); this.content.className = "netgis-color-e netgis-shadow"; this.container.appendChild(this.content); this.header = this.addHeader(this.content, a, this.onHeaderClick.bind(this)); }; netgis.Modal.prototype.initEvents = function () {}; netgis.Modal.prototype.attachTo = function (a) { a.appendChild(this.container); }; netgis.Modal.prototype.show = function () { this.container.classList.add("netgis-show"); }; netgis.Modal.prototype.hide = function () { this.container.classList.remove("netgis-show"); }; netgis.Modal.prototype.addHeader = function (a, b, c) { var d = document.createElement("button"); d.className = "netgis-button netgis-clip-text netgis-color-c netgis-gradient-a"; d.innerHTML = "" + b + ""; d.setAttribute("type", "button"); c && (d.onclick = c); a && a.appendChild(d); return d; }; netgis.Modal.prototype.onHeaderClick = function (a) { this.hide(); }; netgis.Modal.prototype.onContainerClick = function (a) { a.target === this.container && this.hide(); }; netgis = netgis || {}; netgis.Modes = Object.freeze({ VIEW: "view", ZOOM_BOX: "zoom-box", MEASURE_LINE: "measure-line", MEASURE_AREA: "measure-area", DRAW_POINTS: "draw-points", DRAW_LINES: "draw-lines", DRAW_POLYGONS: "draw-polygons", MODIFY_FEATURES: "modify-features", DELETE_FEATURES: "delete-features", BUFFER_FEATURES: "buffer-features", BUFFER_FEATURES_EDIT: "buffer-features-edit", BUFFER_FEATURES_DYNAMIC: "buffer-features-dynamic", CUT_FEATURES: "cut-features", CUT_FEATURES_DRAW: "cut-features-draw", CUT_FEATURES_DYNAMIC: "cut-features-dynamic", SEARCH_PARCEL: "search-parcel", }); netgis = netgis || {}; netgis.Modules = { menu: !0, layertree: !0, map: !0, controls: !0, attribution: !0, legend: !0, geolocation: !0, info: !0, searchplace: !0, searchparcel: !0, toolbox: !0, import: !0, export: !0, timeslider: !0, }; netgis = netgis || {}; netgis.OWS = (function () { return { read: function (a, b) { console.info("OWS READ:", a); console.info("OWS PROPS:", a.properties); a = a.features; for (b = 0; b < a.length; b++) { var c = a[b]; console.info("OWS FEATURE:", b, c); var d = c; c = d.properties; switch (d.type) { case "Feature": d = c.minScaleDenominator; var e = c.maxScaleDenominator; console.info("TITLE:", c.title, "FOLDER:", c.folder); console.info("MIN/MAX SCALE:", d, e); c = c.offerings; for (d = 0; d < c.length; d++) { e = c[d]; console.info("OFFERING:", d, e); var f = e, g = f.code; e = f.content; switch (g) { case "http://www.opengis.net/spec/owc-atom/1.0/req/kml": for (f = 0; f < e.length; f++) switch (((g = e[f]), g.type)) { case "application/vnd.google-earth.kml+xml": break; default: console.error("OWS: unknown offering content type '" + g.type + "'", g); } break; default: console.error("OWS: unknown offering code '" + g + "'", f); } } break; default: console.error("OWS: unknown feature type '" + d.type + "'", d); } } }, }; })(); netgis = netgis || {}; netgis.OWS = (function () { return { read: function (a, b) { b = { layers: [], folders: [] }; netgis.util.isDefined(a.properties) && (b.bbox = a.properties.bbox); a = a.features; for (var c = 0; c < a.length; c++) { var d = a[c]; if ("Feature" === d.type) { var e = d.properties; e = e.folder; var f = !1; for (d = 0; d < b.folders.length; d++) if (b.folders[d].id === e) { f = !0; break; } if (!f) { d = e.split("/"); e = []; for (f = 0; f < d.length; f++) { var g = d[f]; 0 < g.length && e.push(g); } var h = -1; for (f = 0; f < e.length; f++) { g = e[f]; var k = "/" + e.slice(0, f + 1).join("/"), l = !1; for (d = 0; d < b.folders.length; d++) if (b.folders[d].path === k) { h = d; l = !0; break; } l || ((d = b.folders.length), b.folders.push({ title: g, parent: h, path: k }), (h = d)); } } } } for (c = 0; c < a.length; c++) if (((d = a[c]), "Feature" === d.type)) { e = d.properties; f = -1; for (d = 0; d < b.folders.length; d++) if (b.folders[d].path === e.folder) { f = d; break; } d = e.offerings; for (g = 0; g < d.length; g++) switch (((h = d[g]), (k = h.operations), h.code)) { case "http://www.opengis.net/spec/owc-geojson/1.0/req/wms": b.layers.push({ folder: f, type: netgis.LayerTypes.WMS, url: k[0].href, title: e.title, attribution: e.rights, active: e.active, }); break; case "http://www.opengis.net/spec/owc-geojson/1.0/req/xyz": h = k[0]; b.layers.push({ folder: f, type: netgis.LayerTypes.XYZ, url: h.href, title: e.title, attribution: e.rights, active: e.active, }); break; case "http://www.opengis.net/spec/owc-geojson/1.0/req/osm": (h = k[0]), b.layers.push({ folder: f, type: netgis.LayerTypes.XYZ, url: h.href, title: e.title, attribution: e.rights, active: e.active, }); } } return b; }, }; })(); netgis.OWS.Config = { url: "" }; netgis = netgis || {}; netgis.Panel = function (a) { this.initElements(a); this.initEvents(); }; netgis.Panel.prototype.initElements = function (a) { var b = document.createElement("section"); b.className = "netgis-panel netgis-resize-right netgis-color-e netgis-shadow"; this.content = document.createElement("div"); b.appendChild(this.content); this.header = this.addHeader(b, a, this.onHeaderClick.bind(this)); this.container = b; }; netgis.Panel.prototype.initEvents = function () { this.resizeObserver = new ResizeObserver(this.onResize.bind(this)).observe(this.container); }; netgis.Panel.prototype.attachTo = function (a) { a.appendChild(this.container); a.addEventListener(netgis.Events.PANEL_TOGGLE, this.onPanelToggle.bind(this)); }; netgis.Panel.prototype.addHeader = function (a, b, c) { var d = document.createElement("button"); d.className = "netgis-button netgis-clip-text netgis-color-c netgis-gradient-a netgis-shadow"; d.innerHTML = "" + b + ""; d.setAttribute("type", "button"); c && (d.onclick = c); a && a.appendChild(d); return d; }; netgis.Panel.prototype.show = function () { this.container.classList.contains("netgis-show") || (this.container.classList.add("netgis-show"), netgis.util.invoke(this.container, netgis.Events.PANEL_TOGGLE, { container: this.container, visible: !0, width: this.container.getBoundingClientRect().width, })); }; netgis.Panel.prototype.hide = function () { this.container.classList.contains("netgis-show") && (this.container.classList.remove("netgis-show"), netgis.util.invoke(this.container, netgis.Events.PANEL_TOGGLE, { container: this.container, visible: !1 })); }; netgis.Panel.prototype.toggle = function () { this.container.classList.toggle("netgis-show"); var a = this.container.classList.contains("netgis-show"); netgis.util.invoke(this.container, netgis.Events.PANEL_TOGGLE, { container: this.container, visible: a, width: a ? this.container.getBoundingClientRect().width : void 0, }); }; netgis.Panel.prototype.visible = function () { return this.container.classList.contains("netgis-show"); }; netgis.Panel.prototype.width = function () { return this.container.getBoundingClientRect().width; }; netgis.Panel.prototype.setTitle = function (a) { this.header.getElementsByTagName("span")[0].innerHTML = a; }; netgis.Panel.prototype.onHeaderClick = function (a) { this.hide(); }; netgis.Panel.prototype.onResize = function (a) { this.container.classList.contains("netgis-show") && ((a = this.container.getBoundingClientRect()), netgis.util.invoke(this.container, netgis.Events.PANEL_RESIZE, { width: a.width })); }; netgis.Panel.prototype.onPanelToggle = function (a) { a = a.detail; a.visible && a.container !== this.container && this.hide(); }; netgis = netgis || {}; netgis.Plugins = function (a) { this.config = a; this.plugins = {}; this.initConfig(a); }; netgis.Plugins.Config = {}; netgis.Plugins.prototype.initConfig = function (a) { if ((a = a.plugins)) for (var b = 0; b < a.length; b++) { var c = a[b], d = {}; switch (c.type) { case "panel": var e = new netgis.Panel(c.title); e.container.classList.add("netgis-plugin"); c.active && e.show(); d.panel = e; break; case "window": (e = new netgis.Window(c.title)), e.container.classList.add("netgis-plugin"), c.active && e.show(), (d.window = e); } if (e && (e.container.setAttribute("data-id", c.id), c.url && 0 < c.url.length)) { var f = document.createElement("iframe"); f.setAttribute("name", c.id); f.setAttribute("title", c.title); f.setAttribute("src", c.url); f.setAttribute("data-id", c.id); f.onload = this.onIFrameLoad.bind(this); d.iframe = f; e.content.appendChild(f); } this.plugins[c.id] = d; } }; netgis.Plugins.prototype.attachTo = function (a) { for (var b in this.plugins) { var c = this.plugins[b]; c.panel && c.panel.attachTo(a); c.window && c.window.attachTo(a); } a.addEventListener(netgis.Events.PLUGIN_TOGGLE, this.onPluginToggle.bind(this)); a.addEventListener(netgis.Events.PANEL_TOGGLE, this.onPanelToggle.bind(this)); for (var d in netgis.Events) a.addEventListener(netgis.Events[d], this.onClientEvent.bind(this)); }; netgis.Plugins.prototype.onPluginToggle = function (a) { a = this.plugins[a.detail.id]; a.panel && a.panel.toggle(); a.window && a.window.toggle(); }; netgis.Plugins.prototype.onIFrameLoad = function (a) { var b = a.target, c; for (c in netgis.Events) b.contentDocument.addEventListener( netgis.Events[c], function (a) { this.onIFrameEvent(a, b.getAttribute("data-id")); }.bind(this) ); }; netgis.Plugins.prototype.onIFrameMessage = function (a) { console.info("IFrame Message:", a); }; netgis.Plugins.prototype.onIFrameEvent = function (a, b) { var c = a.explicitOriginalTarget, d = a.detail; b = this.plugins[b]; b.panel && !b.panel.container.parentNode.contains(c) && netgis.util.invoke(b.panel.container, a.type, d); b.window && !b.window.container.parentNode.contains(c) && netgis.util.invoke(b.window.container, a.type, d); }; netgis.Plugins.prototype.onClientEvent = function (a) { var b = a.srcElement, c = a.type; a = a.detail; if (!b.classList.contains("netgis-plugin")) for (var d in this.plugins) { var e = this.plugins[d]; (e.panel && e.panel.container === b) || (e.window && e.window.container === b) || netgis.util.invoke(e.iframe.contentDocument, c, a); } }; netgis.Plugins.prototype.onPanelToggle = function (a) { a = a.detail; if (a.visible) for (var b in this.plugins) { var c = this.plugins[b]; c.panel && a.container !== c.panel.container && c.panel.hide(); } }; netgis = netgis || {}; netgis.Popup = function (a) { a || (a = { direction: "down" }); this.options = a; this.initElements(); }; netgis.Popup.prototype.initElements = function () { document.body.addEventListener("pointerdown", this.onDocumentPointerDown.bind(this)); this.container = document.createElement("div"); this.container.className = "netgis-popup"; this.container.addEventListener("pointerdown", this.onPointerDown.bind(this)); this.content = document.createElement("div"); this.content.className = "netgis-content netgis-color-e netgis-round"; this.container.appendChild(this.content); this.content.addEventListener("pointermove", function (a) { a.stopPropagation(); }); switch (this.options.direction) { default: case "down": this.container.classList.add("netgis-dir-down"); break; case "right": this.container.classList.add("netgis-dir-right"); } this.arrow = document.createElement("div"); this.arrow.className = "netgis-arrow"; this.container.appendChild(this.arrow); this.closer = document.createElement("button"); this.closer.setAttribute("type", "button"); this.closer.className = "netgis-closer netgis-color-e netgis-text-a"; this.closer.innerHTML = ""; this.closer.onclick = this.onCloserClick.bind(this); this.content.appendChild(this.closer); this.loader = document.createElement("div"); this.loader.className = "netgis-loader netgis-color-e netgis-text-a"; this.loader.innerHTML = ""; this.wrapper = document.createElement("div"); this.wrapper.className = "netgis-wrapper"; this.content.appendChild(this.wrapper); }; netgis.Popup.prototype.attachTo = function (a) { a.appendChild(this.container); }; netgis.Popup.prototype.show = function () { this.container.classList.add("netgis-show"); netgis.util.isMobile() && (this.container.style.width = document.body.getBoundingClientRect().width - 10 + "px"); }; netgis.Popup.prototype.hide = function () { this.container.classList.remove("netgis-show"); }; netgis.Popup.prototype.isVisible = function () { return this.container.classList.contains("netgis-show"); }; netgis.Popup.prototype.showLoader = function () { this.content.appendChild(this.loader); }; netgis.Popup.prototype.hideLoader = function () { this.loader.parentNode === this.content && this.content.removeChild(this.loader); }; netgis.Popup.prototype.setPosition = function (a, b) { var c = this.container.parentNode.getBoundingClientRect(), d = this.arrow.getBoundingClientRect(); a > c.width - d.width && (a = c.width - d.width); a < d.width && (a = d.width); switch (this.options.direction) { default: case "down": this.container.style.left = a + "px"; this.container.style.top = b + "px"; break; case "right": (this.container.style.right = c.width - a + "px"), (this.container.style.top = b + "px"); } this.content.style.left = ""; a = this.content.getBoundingClientRect(); 0 > a.x ? (this.content.style.left = -a.x + "px") : a.x + a.width > c.width && (this.content.style.left = -(a.x + a.width - c.width) + "px"); }; netgis.Popup.prototype.setHeader = function (a) { this.closer.getElementsByTagName("span")[0].innerHTML = a; }; netgis.Popup.prototype.setContent = function (a) { this.wrapper.innerHTML = a; }; netgis.Popup.prototype.clearContent = function () { this.wrapper.innerHTML = ""; }; netgis.Popup.prototype.addContent = function (a) { this.wrapper.innerHTML += a; }; netgis.Popup.prototype.onDocumentPointerDown = function (a) {}; netgis.Popup.prototype.onPointerDown = function (a) { a.stopPropagation(); }; netgis.Popup.prototype.onCloserClick = function (a) { this.hide(); }; netgis = netgis || {}; netgis.Search = function (a) { this.debounce = 400; this.initElements(a); this.initEvents(); }; netgis.Search.prototype.initElements = function (a) { var b = document.createElement("div"); b.className = "netgis-search"; this.container = b; var c = document.createElement("label"); b.appendChild(c); this.label = c; var d = document.createElement("input"); d.className = "netgis-round netgis-shadow"; d.setAttribute("type", "text"); d.setAttribute("placeholder", a); c.appendChild(d); this.input = d; a = document.createElement("button"); a.setAttribute("type", "button"); a.innerHTML = ""; c.appendChild(a); this.button = a; a = document.createElement("button"); a.setAttribute("type", "button"); a.className = "netgis-hide"; a.innerHTML = ""; c.appendChild(a); this.closer = a; c = document.createElement("ul"); b.appendChild(c); this.results = c; }; netgis.Search.prototype.initEvents = function () { this.input.addEventListener("change", this.onInputChange.bind(this)); this.input.addEventListener("keydown", this.onInputKeyDown.bind(this)); this.input.addEventListener("keyup", this.onInputKeyUp.bind(this)); this.button.addEventListener("click", this.onButtonClick.bind(this)); this.closer.addEventListener("click", this.onCloserClick.bind(this)); }; netgis.Search.prototype.attachTo = function (a) { a.appendChild(this.container); }; netgis.Search.prototype.show = function () { this.container.classList.remove("netgis-hide"); }; netgis.Search.prototype.hide = function () { this.container.classList.add("netgis-hide"); }; netgis.Search.prototype.toggle = function () { this.container.classList.toggle("netgis-hide"); }; netgis.Search.prototype.isVisible = function () { return !this.container.classList.contains("netgis-hide"); }; netgis.Search.prototype.minimize = function () { this.container.classList.remove("netgis-color-e", "netgis-shadow"); this.input.classList.add("netgis-shadow"); }; netgis.Search.prototype.maximize = function () { this.container.classList.add("netgis-color-e", "netgis-shadow"); this.input.classList.remove("netgis-shadow"); }; netgis.Search.prototype.focus = function () { this.input.focus(); }; netgis.Search.prototype.setTitle = function (a) { this.input.setAttribute("placeholder", a); }; netgis.Search.prototype.addResult = function (a, b) { var c = document.createElement("li"), d = document.createElement("button"); d.className = "netgis-button netgis-clip-text netgis-color-e netgis-hover-a"; d.innerHTML = a; d.setAttribute("type", "button"); d.setAttribute("title", d.innerText); d.setAttribute("data-result", b); d.addEventListener("click", this.onResultClick.bind(this)); c.appendChild(d); 0 === this.results.childNodes.length && this.showClearButton(!0); this.results.appendChild(c); this.maximize(); return c; }; netgis.Search.prototype.clearResults = function () { this.results.innerHTML = ""; this.minimize(); netgis.util.invoke(this.container, netgis.Events.SEARCH_CLEAR, null); }; netgis.Search.prototype.clearAll = function () { this.clearResults(); this.lastQuery = null; this.input.value = ""; this.showClearButton(!1); }; netgis.Search.prototype.requestSearch = function (a) { (this.lastQuery && this.lastQuery === a) || ((this.lastQuery = a), netgis.util.invoke(this.container, netgis.Events.SEARCH_CHANGE, { query: a })); }; netgis.Search.prototype.showClearButton = function (a) { !1 === a ? (this.button.classList.remove("netgis-hide"), this.closer.classList.add("netgis-hide")) : (this.button.classList.add("netgis-hide"), this.closer.classList.remove("netgis-hide")); }; netgis.Search.prototype.onInputKeyDown = function (a) { if (13 === a.keyCode) return a.preventDefault(), !1; }; netgis.Search.prototype.onInputKeyUp = function (a) { switch (a.keyCode) { case 13: a = this.results.getElementsByTagName("button"); 0 < a.length && a[0].click(); break; case 27: this.clearAll(); break; default: this.onInputChange(); } }; netgis.Search.prototype.onInputChange = function (a) { this.timeout && window.clearTimeout(this.timeout); this.timeout = window.setTimeout(this.onInputTimeout.bind(this), this.debounce); }; netgis.Search.prototype.onInputTimeout = function () { var a = this.input.value; a = a.trim(); 0 < a.length ? this.requestSearch(a) : this.clearAll(); }; netgis.Search.prototype.onButtonClick = function (a) { this.input.focus(); }; netgis.Search.prototype.onCloserClick = function (a) { this.clearAll(); this.input.focus(); }; netgis.Search.prototype.onResultClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-result"); netgis.util.invoke(a, netgis.Events.SEARCH_SELECT, { item: a, data: b }); }; netgis = netgis || {}; netgis.SearchParcel = function (a) { this.config = a; this.districtsLayerID = "searchparcel_districts"; this.fieldsLayerID = "searchparcel_fields"; this.parcelsLayerID = "searchparcel_parcels"; this.selected = {}; this.initElements(); this.initEvents(); this.initConfig(a); }; netgis.SearchParcel.Config = { open: !1, name_url: "./proxy.php?https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_alkis/gem_search.php?placename={q}", parcel_url: "./proxy.php?https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_alkis/flur_search.php?gmk_gmn={district}&fln={field}&fsn_zae={parcelA}&fsn_nen={parcelB}&export=json", districts_service: { type: "WFS", url: "http://geo5.service24.rlp.de/wfs/verwaltungsgrenzen_rp.fcgi?", name: "vermkv:gemarkungen_rlp", format: "application/json; subtype=geojson", min_zoom: 12, }, fields_service: { url: "http://geo5.service24.rlp.de/wfs/verwaltungsgrenzen_rp.fcgi?", name: "vermkv:fluren_rlp", filter_property: "gmkgnr", }, }; netgis.SearchParcel.prototype.initElements = function () { this.panel = new netgis.Panel("Flurst\u00fccks-Suche"); this.panel.container.style.minWidth = "92mm"; this.panel.container.addEventListener(netgis.Events.PANEL_TOGGLE, this.onPanelToggle.bind(this)); this.container = document.createElement("section"); this.container.className = "netgis-search-parcel"; this.panel.content.appendChild(this.container); this.popup = new netgis.Popup(); this.popup.setHeader("Flurst\u00fcck"); var a = document.createElement("section"); this.top = a; this.container.appendChild(a); var b = this.createInput("Gemarkungsname:"); b.style.position = "relative"; a.appendChild(b); this.nameInput = b.children[0]; this.nameInput.setAttribute("title", "ENTER: Ausw\u00e4hlen, ESCAPE: Zur\u00fccksetzen"); this.nameInput.addEventListener("keyup", this.onInputNameKey.bind(this)); this.nameLoader = document.createElement("div"); this.nameLoader.className = "netgis-loader netgis-text-primary netgis-hide"; this.nameLoader.innerHTML = ""; b.appendChild(this.nameLoader); this.nameList = document.createElement("ul"); a.appendChild(this.nameList); b = this.createInput("Gemarkungsnummer:"); this.districtInput = b.children[0]; a.appendChild(b); b = this.createInput("Flurnummer:"); this.fieldInput = b.children[0]; this.fieldInput.addEventListener("keyup", this.onInputFieldKey.bind(this)); a.appendChild(b); b = this.createInput("Flurst\u00fccksnummer (Z\u00e4hler/Nenner):"); this.parcelInputA = b.children[1]; this.parcelInputA.style.width = "48%"; this.parcelInputB = this.parcelInputA.cloneNode(!0); this.parcelInputB.style.marginLeft = "4%"; b.appendChild(this.parcelInputB); a.appendChild(b); b = document.createElement("button"); b.setAttribute("type", "button"); b.addEventListener("click", this.onParcelSearchClick.bind(this)); b.className = "netgis-color-a netgis-hover-c"; b.innerHTML = "Flurst\u00fccke suchen"; b.style.marginTop = "4mm"; a.appendChild(b); b = document.createElement("section"); b.className = "netgis-hide"; this.bottom = b; this.container.appendChild(b); var c = document.createElement("button"); c.className = "netgis-button netgis-clip-text netgis-color-c netgis-gradient-a"; c.innerHTML = "Flurst\u00fccke "; c.setAttribute("type", "button"); c.addEventListener("click", this.onBottomHeaderClick.bind(this)); b.appendChild(c); this.parcelCount = c.getElementsByTagName("span")[1]; this.parcelInfo = document.createElement("p"); this.parcelTable = this.createTable(["Flur", "Z\u00e4hler", "Nenner", "FKZ", "Fl\u00e4che (qm)"]); this.parcelTable.classList.add("netgis-hide"); this.parcelTable.style.position = "absolute"; this.parcelTable.style.width = "100%"; this.parcelTable.style.top = "12mm"; this.parcelTable.style.bottom = "0mm"; this.parcelTable.style.margin = "0mm"; this.parcelTable.style.overflow = "auto"; b.appendChild(this.parcelTable); this.parcelList = this.parcelTable.getElementsByTagName("tbody")[0]; this.parcelReset = document.createElement("button"); this.parcelReset.setAttribute("type", "button"); this.parcelReset.addEventListener("click", this.onResetClick.bind(this)); this.parcelReset.className = "netgis-color-a netgis-hover-c"; this.parcelReset.innerHTML = "Zur\u00fccksetzen"; this.parcelReset.style.marginTop = "4mm"; a.appendChild(this.parcelReset); }; netgis.SearchParcel.prototype.initEvents = function () { this.resizeObserver = new ResizeObserver(this.onTopResize.bind(this)).observe(this.top); }; netgis.SearchParcel.prototype.initConfig = function (a) { this.districtsLayer = a.searchparcel.districts_service; this.districtsLayer.id = this.districtsLayerID; this.districtsLayer.style = a.styles.parcel; this.districtsLayer.order = 99999; a.layers.push(this.districtsLayer); this.fieldsLayer = { id: this.fieldsLayerID, type: netgis.LayerTypes.GEOJSON, style: a.styles.parcel, order: 99999, data: null, }; a.layers.push(this.fieldsLayer); this.parcelsLayer = { id: this.parcelsLayerID, type: netgis.LayerTypes.WKT, style: a.styles.parcel, order: 99999, data: null, }; a.layers.push(this.parcelsLayer); if (!0 === a.searchparcel.open) { var b = this; window.setTimeout(function () { b.panel.show(); }, 100); } }; netgis.SearchParcel.prototype.attachTo = function (a) { this.panel.attachTo(a); this.popup.attachTo(a); a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this)); a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE, this.onSearchParcelToggle.bind(this)); a.addEventListener(netgis.Events.MAP_FEATURE_ENTER, this.onMapFeatureEnter.bind(this)); a.addEventListener(netgis.Events.MAP_FEATURE_CLICK, this.onMapFeatureClick.bind(this)); a.addEventListener(netgis.Events.MAP_FEATURE_LEAVE, this.onMapFeatureLeave.bind(this)); a.addEventListener(netgis.Events.MAP_COPY_FEATURE_TO_EDIT, this.onMapCopyFeatureToEdit.bind(this)); }; netgis.SearchParcel.prototype.createInput = function (a) { var b = document.createElement("label"); b.className = "netgis-hover-text-primary"; b.innerHTML = a; a = document.createElement("input"); a.setAttribute("type", "text"); b.appendChild(a); return b; }; netgis.SearchParcel.prototype.createNameItem = function (a) { var b = document.createElement("li"), c = document.createElement("button"); c.setAttribute("type", "button"); c.addEventListener("click", this.onNameItemClick.bind(this)); c.className = "netgis-color-e netgis-hover-a netgis-text-a netgis-hover-text-e"; c.innerHTML = a; b.appendChild(c); return b; }; netgis.SearchParcel.prototype.createTable = function (a) { var b = document.createElement("div"); b.className = "netgis-table-wrapper"; var c = document.createElement("table"); b.appendChild(c); var d = document.createElement("thead"); c.appendChild(d); var e = document.createElement("tr"); e.className = "netgis-color-d netgis-shadow"; d.appendChild(e); d = document.createElement("th"); e.appendChild(d); var f = document.createElement("input"); f.setAttribute("type", "checkbox"); f.addEventListener("change", this.onTableFilterChange.bind(this)); f.setAttribute("title", "Nur markierte Parzellen anzeigen"); d.appendChild(f); this.tableFilter = f; for (f = 0; f < a.length; f++) (d = document.createElement("th")), (d.innerHTML = a[f]), e.appendChild(d); a = document.createElement("tbody"); c.appendChild(a); return b; }; netgis.SearchParcel.prototype.createParcelItem = function (a, b, c, d, e, f, g) { var h = document.createElement("tr"); h.className = "netgis-hover-d"; h.setAttribute("title", "Klicken zum zoomen"); h.setAttribute("data-id", d); h.setAttribute("data-field", a); h.setAttribute("data-parcel-a", b); h.setAttribute("data-parcel-b", c); h.setAttribute("data-bbox", f); h.setAttribute("data-geom", g); h.addEventListener("pointerenter", this.onParcelEnter.bind(this)); h.addEventListener("pointerleave", this.onParcelLeave.bind(this)); h.addEventListener("click", this.onParcelClick.bind(this)); f = document.createElement("td"); h.appendChild(f); g = document.createElement("button"); g.setAttribute("type", "button"); g.setAttribute("title", "Geometrie \u00fcbernehmen"); g.addEventListener("click", this.onParcelImportClick.bind(this)); g.className = "netgis-hover-a"; g.innerHTML = ""; f.appendChild(g); f = document.createElement("td"); f.innerHTML = a; h.appendChild(f); a = document.createElement("td"); a.innerHTML = b; h.appendChild(a); b = document.createElement("td"); b.innerHTML = c; h.appendChild(b); c = document.createElement("td"); c.innerHTML = netgis.util.trim(d, "_"); h.appendChild(c); d = document.createElement("td"); d.innerHTML = e; h.appendChild(d); return h; }; netgis.SearchParcel.prototype.reset = function () { this.hideBottom(); this.nameLoader.classList.add("netgis-hide"); this.nameInput.value = ""; this.districtInput.value = ""; this.fieldInput.value = ""; this.parcelInputA.value = ""; this.parcelInputB.value = ""; this.nameList.innerHTML = ""; this.parcelInfo.innerHTML = ""; this.parcelList.innerHTML = ""; this.parcelTable.classList.add("netgis-hide"); this.tableFilter.checked = !1; this.parcelList.classList.remove("netgis-filter-active"); this.selected = {}; this.parcelReset.classList.add("netgis-hide"); this.parcelCount.innerHTML = ""; var a = this; window.setTimeout(function () { a.top.scrollTop = 0; a.parcelTable.scrollTop = 0; }, 10); netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_RESET, null); this.panel.visible() && this.showDistricts(!0); this.showFields(!1); this.showParcels(!1); }; netgis.SearchParcel.prototype.showDistricts = function (a) { a ? (netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.districtsLayerID, on: !0 }), netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LEVEL, { z: this.config.searchparcel.districts_service.min_zoom, })) : netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.districtsLayerID, on: !1 }); }; netgis.SearchParcel.prototype.showFields = function (a, b) { a ? ((b.crs = { type: "name", properties: { name: "urn:ogc:def:crs:EPSG::25832" } }), (this.fieldsLayer.data = b), netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.fieldsLayerID, on: !0 }), netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LAYER, { id: this.fieldsLayerID })) : (netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.fieldsLayerID, on: !1 }), (this.fieldsLayer.data = null)); }; netgis.SearchParcel.prototype.showParcels = function (a, b) { if (a) { a = []; for (var c = 0; c < b.length; c++) { var d = b[c]; a.push({ id: d.fsk, geometry: d.geometry, properties: { flaeche: d.flaeche, fln: d.fln, fsk: d.fsk, fsn_nen: d.fsn_nen, fsn_zae: d.fsn_zae }, }); } this.parcelsLayer.data = a; netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.parcelsLayerID, on: !0 }); netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LAYER, { id: this.parcelsLayerID }); } else netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.parcelsLayerID, on: !1 }); }; netgis.SearchParcel.prototype.onSearchParcelToggle = function (a) { this.panel.toggle(); }; netgis.SearchParcel.prototype.onClientSetMode = function (a) { a = a.detail; this.popup.clearContent(); this.popup.hide(); a.mode === netgis.Modes.SEARCH_PARCEL ? this.reset() : (this.showDistricts(!1), this.showFields(!1), this.showParcels(!1)); }; netgis.SearchParcel.prototype.onPanelToggle = function (a) { !1 === a.detail.visible ? netgis.util.invoke(this.panel.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW }) : netgis.util.invoke(this.panel.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.SEARCH_PARCEL }); }; netgis.SearchParcel.prototype.onInputNameKey = function (a) { switch (a.keyCode) { case 13: this.selectFirstName(); break; case 27: this.reset(); break; default: this.requestName(this.nameInput.value.trim()); } }; netgis.SearchParcel.prototype.requestName = function (a) { this.nameDebounce && window.clearTimeout(this.nameDebounce); if (0 !== a.length) { var b = this.config.searchparcel.name_url; b = netgis.util.replace(b, "{q}", window.encodeURIComponent(a)); this.nameDebounce = window.setTimeout(this.onInputNameDebounce.bind(this, b), 200); this.nameLoader.classList.remove("netgis-hide"); } }; netgis.SearchParcel.prototype.onInputNameDebounce = function (a) { netgis.util.request(a, this.onInputNameResponse.bind(this)); }; netgis.SearchParcel.prototype.onInputNameResponse = function (a) { this.nameLoader.classList.add("netgis-hide"); this.parcelReset.classList.remove("netgis-hide"); this.nameList.innerHTML = ""; if ("{" === a.charAt(0) || "[" === a.charAt(0)) { a = JSON.parse(a); for (var b = 0; b < a.data.length; b++) { var c = a.data[b], d = this.createNameItem(c.gmk_name); d.getElementsByTagName("button")[0].setAttribute("data-id", c.gmk_gmn); this.nameList.appendChild(d); } } }; netgis.SearchParcel.prototype.onNameItemClick = function (a) { a = a.target; var b = a.getAttribute("data-id"); this.nameInput.value = a.innerHTML; this.nameList.innerHTML = ""; this.districtInput.value = b; this.requestFields(b); }; netgis.SearchParcel.prototype.requestFields = function (a) { var b = this.config.searchparcel.fields_service, c = b.url; c = c + "service=WFS&version=1.0.0&request=GetFeature&outputFormat=application/json; subtype=geojson&typename=" + b.name; c = c + "&filter=" + (b.filter_property + ""); netgis.util.request( c + ("" + a + ""), this.onFieldsResponse.bind(this) ); }; netgis.SearchParcel.prototype.onFieldsResponse = function (a) { a = JSON.parse(a); this.showDistricts(!1); this.showFields(!0, a); this.showParcels(!1); }; netgis.SearchParcel.prototype.selectFirstName = function () { var a = this.nameList.getElementsByTagName("button"); 0 < a.length && a[0].click(); }; netgis.SearchParcel.prototype.setDistrict = function (a, b) { this.nameInput.value = a; this.districtInput.value = b; this.requestFields(b); }; netgis.SearchParcel.prototype.setFieldNumber = function (a) { this.fieldInput.value = a; this.onParcelSearchClick(); }; netgis.SearchParcel.prototype.setParcelNumber = function (a, b) { this.parcelInputA.value = a; this.parcelInputB.value = b; this.onParcelSearchClick(); }; netgis.SearchParcel.prototype.showBottom = function () { this.top.classList.add("netgis-resize-bottom"); this.top.style.height = "50%"; this.top.style.bottom = "auto"; this.bottom.classList.remove("netgis-hide"); }; netgis.SearchParcel.prototype.hideBottom = function () { this.top.classList.remove("netgis-resize-bottom"); this.top.style.height = "auto"; this.top.style.bottom = "0mm"; this.bottom.classList.add("netgis-hide"); }; netgis.SearchParcel.prototype.onInputFieldKey = function (a) { switch (a.keyCode) { case 13: this.onParcelSearchClick(); } }; netgis.SearchParcel.prototype.onParcelSearchClick = function (a) { this.requestParcels( this.districtInput.value.trim(), this.fieldInput.value.trim(), this.parcelInputA.value.trim(), this.parcelInputB.value.trim() ); }; netgis.SearchParcel.prototype.requestParcels = function (a, b, c, d) { var e = this.config.searchparcel.parcel_url; e = netgis.util.replace(e, "{district}", a ? a : ""); e = netgis.util.replace(e, "{field}", b ? b : ""); e = netgis.util.replace(e, "{parcelA}", c ? c : ""); e = netgis.util.replace(e, "{parcelB}", d ? d : ""); this.parcelTable.classList.add("netgis-hide"); this.parcelList.innerHTML = ""; this.parcelList.classList.remove("netgis-filter-active"); this.tableFilter.checked = !1; this.selected = {}; this.parcelInfo.innerHTML = "Suche Flurst\u00fccke..."; netgis.util.request(e, this.onParcelsResponse.bind(this)); }; netgis.SearchParcel.prototype.updateTableRows = function () { for (var a = this.parcelList.getElementsByTagName("tr"), b = 0; b < a.length; b++) { var c = a[b], d = c.getAttribute("data-id"), e = c.getElementsByTagName("button")[0]; !0 === this.selected[d] ? (c.classList.add("netgis-active", "netgis-text-a", "netgis-hover-text-a"), e.setAttribute("disabled", "disabled"), e.setAttribute("title", "Geometrie bereits \u00fcbernommen"), e.classList.remove("netgis-hover-a")) : (c.classList.remove("netgis-active", "netgis-text-a", "netgis-hover-text-a"), e.removeAttribute("disabled"), e.setAttribute("title", "Geometrie \u00fcbernehmen"), e.classList.add("netgis-hover-a")); } }; netgis.SearchParcel.prototype.onParcelsResponse = function (a) { a = JSON.parse(a); this.parcelCount.innerHTML = "(" + a.count + ")"; if (0 === a.count) this.parcelInfo.innerHTML = a.Info; else { for (var b = 0; b < a.data.length; b++) { var c = a.data[b]; c = this.createParcelItem(c.fln, c.fsn_zae, c.fsn_nen, c.fsk, c.flaeche, c.bbox, c.geometry); this.parcelList.appendChild(c); } this.parcelTable.classList.remove("netgis-hide"); this.showBottom(); this.showDistricts(!1); this.showFields(!1); this.showParcels(!0, a.data); } this.container.classList.contains("netgis-hide") || this.parcelTable.scrollIntoView(); }; netgis.SearchParcel.prototype.onParcelEnter = function (a) { a = a.target; var b = a.getAttribute("data-geom"); a = { id: a.getAttribute("data-id"), field: a.getAttribute("data-field"), parcelA: a.getAttribute("data-parcel-a"), parcelB: a.getAttribute("data-parcel-b"), geom: b, }; netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_ITEM_ENTER, a); }; netgis.SearchParcel.prototype.onParcelLeave = function (a) { netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_ITEM_LEAVE, { id: a.target.getAttribute("data-id") }); }; netgis.SearchParcel.prototype.onParcelClick = function (a) { netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_ITEM_CLICK, { id: a.currentTarget.getAttribute("data-id"), }); }; netgis.SearchParcel.prototype.onParcelImportClick = function (a) { a.stopPropagation(); a = a.currentTarget.parentElement.parentElement; var b = a.getAttribute("data-id"); a.getAttribute("data-geom"); netgis.util.invoke(this.container, netgis.Events.MAP_COPY_FEATURE_TO_EDIT, { source: this.parcelsLayerID, id: b }); }; netgis.SearchParcel.prototype.onResetClick = function (a) { this.reset(); }; netgis.SearchParcel.prototype.onTopResize = function (a) { if (!this.bottom.classList.contains("netgis-hide")) { a = this.top.getBoundingClientRect(); var b = this.top.parentNode.getBoundingClientRect(); this.bottom.style.top = a.bottom - b.top + "px"; } }; netgis.SearchParcel.prototype.onBottomHeaderClick = function (a) { this.reset(); }; netgis.SearchParcel.prototype.onMapFeatureEnter = function (a) { var b = a.target; a = a.detail; switch (a.layer) { case this.districtsLayerID: a = a.properties.gemarkung; b.setAttribute("title", a); break; case this.fieldsLayerID: a = a.properties.flurname; b.setAttribute("title", a); break; case this.parcelsLayerID: (a = "Flur: " + a.properties.fln + " / Z\u00e4hler: " + a.properties.fsn_zae + " / Nenner: " + a.properties.fsn_nen), b.setAttribute("title", a); } }; netgis.SearchParcel.prototype.onMapFeatureClick = function (a) { var b = a.detail; this.popup.hide(); switch (b.layer) { case this.districtsLayerID: this.setDistrict(b.properties.gemarkung + " (" + b.properties.ldkreis + ")", b.properties.gmkgnr); break; case this.fieldsLayerID: this.setFieldNumber(b.properties.flur); break; case this.parcelsLayerID: if (((a = b.properties.fsk), !this.selected[a])) { this.popup.container !== b.overlay && this.popup.attachTo(b.overlay); var c = ""); c += ""; c += ""; c += ""; this.popup.setContent( c + "
Flur:" + (b.properties.fln + "
Z\u00e4hler:" + b.properties.fsn_zae + "
Nenner:" + b.properties.fsn_nen + "
Fl\u00e4che:" + b.properties.flaeche + " qm
" ); b = this.popup.content.getElementsByTagName("button")[1]; b.setAttribute("data-id", a); b.addEventListener("click", this.onParcelPopupButtonClick.bind(this)); this.popup.show(); } } }; netgis.SearchParcel.prototype.onParcelPopupButtonClick = function (a) { a = a.currentTarget.getAttribute("data-id"); netgis.util.invoke(this.container, netgis.Events.MAP_COPY_FEATURE_TO_EDIT, { source: this.parcelsLayerID, id: a }); this.popup.hide(); }; netgis.SearchParcel.prototype.onMapFeatureLeave = function (a) { var b = a.target; switch (a.detail.layer) { case this.districtsLayerID: case this.fieldsLayerID: b.setAttribute("title", ""); break; case this.parcelsLayerID: b.setAttribute("title", ""); } }; netgis.SearchParcel.prototype.onMapCopyFeatureToEdit = function (a) { a = a.detail; var b = a.id; a.source === this.parcelsLayerID && (this.selected[b] || (this.selected[b] = !0), this.updateTableRows()); }; netgis.SearchParcel.prototype.onTableFilterChange = function (a) { this.parcelList.classList.toggle("netgis-filter-active", a.currentTarget.checked); }; netgis = netgis || {}; netgis.SearchPlace = function (a) { this.config = a; this.initElements(); this.initEvents(); this.initConfig(a); }; netgis.SearchPlace.Config = { title: "Search...", url: "", zoom: 17, marker_color: "darkgray", marker_title: "Search-Result", }; netgis.SearchPlace.prototype.initElements = function () { this.search = new netgis.Search(""); this.container = this.search.container; this.container.classList.add("netgis-search-place", "netgis-responsive"); this.search.container.addEventListener(netgis.Events.SEARCH_CHANGE, this.onSearchChange.bind(this)); this.search.container.addEventListener(netgis.Events.SEARCH_SELECT, this.onSearchSelect.bind(this)); this.search.container.addEventListener(netgis.Events.SEARCH_CLEAR, this.onSearchClear.bind(this)); }; netgis.SearchPlace.prototype.initEvents = function () {}; netgis.SearchPlace.prototype.initConfig = function (a) { (a = a.searchplace) && a.title && this.search.setTitle(a.title); }; netgis.SearchPlace.prototype.attachTo = function (a) { this.search.attachTo(a); a.addEventListener(netgis.Events.SEARCHPLACE_TOGGLE, this.onSearchPlaceToggle.bind(this)); }; netgis.SearchPlace.prototype.onSearchPlaceToggle = function (a) { (a = a.detail) && a.on ? this.search.show() : this.search.toggle(); if (this.search.isVisible()) { var b = this.search; window.setTimeout(function () { b.focus(); }, 200); } }; netgis.SearchPlace.prototype.onSearchChange = function (a) { var b = this.config.searchplace; b && b.url && ((b = b.url), (b = netgis.util.replace(b, "{query}", window.encodeURIComponent(a.detail.query))), (b = netgis.util.replace(b, "{epsg}", 4326)), netgis.util.request(b, this.onSearchResponse.bind(this))); }; netgis.SearchPlace.prototype.onSearchResponse = function (a) { a = JSON.parse(a); this.search.clearResults(); if (a.geonames) { a = a.geonames; for (var b = 0; b < a.length; b++) { var c = a[b], d = c.title, e = 0.5 * (Number.parseFloat(c.minx) + Number.parseFloat(c.maxx)), f = 0.5 * (Number.parseFloat(c.miny) + Number.parseFloat(c.maxy)); c = { type: c.category, id: b, lon: e, lat: f }; this.search.addResult(d, JSON.stringify(c)); } } else if (a.data) for (a = a.data, b = 0; b < a.length; b++) (c = a[b]), (d = c.name), (c = { type: "street", id: c.strid, lon: Number.parseFloat(c.wgs_x), lat: Number.parseFloat(c.wgs_y) }), this.search.addResult(d, JSON.stringify(c)); }; netgis.SearchPlace.prototype.onSearchSelect = function (a) { a = JSON.parse(a.detail.data); netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LONLAT, { lon: a.lon, lat: a.lat, zoom: this.config.searchplace.zoom, }); if ("street" === a.type) { var b = this.config.searchplace.url_detail; b && ((b = netgis.util.replace(b, "{id}", a.id)), netgis.util.request(b, this.onSearchDetailResponse.bind(this))); } }; netgis.SearchPlace.prototype.onSearchDetailResponse = function (a) { a = JSON.parse(a); var b = a.hsnrarr; if (0 !== b.length) { this.search.clearResults(); for (var c = 0; c < b.length; c++) { var d = b[c], e = a.strname + " " + d.hsnr; d = { type: "address", lon: Number.parseFloat(d.wgs_x), lat: Number.parseFloat(d.wgs_y) }; this.search.addResult(e, JSON.stringify(d)); } } }; netgis.SearchPlace.prototype.onSearchClear = function (a) {}; netgis = netgis || {}; netgis.SLD = (function () { return { read: function (a, b) { var c = {}; a = new DOMParser().parseFromString(a, "text/xml").getElementsByTagName("NamedLayer"); for (var d = 0; d < a.length; d++) { var e = a[d], f = e.getElementsByTagName("se:Name")[0].innerHTML; console.info("Layer:", f); e = e.getElementsByTagName("se:FeatureTypeStyle"); for (f = 0; f < e.length; f++) for (var g = e[f].getElementsByTagName("se:Rule"), h = 0; h < g.length; h++) { var k = g[h], l = k.getElementsByTagName("se:Name")[0].innerHTML; console.info("Rule:", l); l = k.getElementsByTagName("se:PolygonSymbolizer")[0]; k = l.getElementsByTagName("se:Fill")[0]; l = l.getElementsByTagName("se:Stroke")[0]; c.polygon = { fill: k.querySelector("[name='fill']").innerHTML, stroke: l.querySelector("[name='stroke']").innerHTML, strokeWidth: Number.parseFloat(l.querySelector("[name='stroke-width']").innerHTML), }; } } console.info("SLD:", c); b.invoke(netgis.Events.MAP_UPDATE_STYLE, c); return c; }, }; })(); netgis = netgis || {}; netgis.Tabs = function (a) { this.initElements(a); this.setActiveTab(0); }; netgis.Tabs.prototype.initElements = function (a) { this.container = document.createElement("div"); this.container.className = "netgis-tabs"; this.header = document.createElement("div"); this.header.className = "netgis-header netgis-color-d"; this.container.appendChild(this.header); this.content = document.createElement("div"); this.content.className = "netgis-content netgis-color-e"; this.container.appendChild(this.content); for (var b = 0; b < a.length; b++) { var c = document.createElement("button"); c.setAttribute("type", "button"); c.addEventListener("click", this.onHeaderButtonClick.bind(this)); c.className = "netgis-button netgis-color-d"; c.innerHTML = a[b]; this.header.appendChild(c); c = document.createElement("section"); c.className = "netgis-color-e netgis-form"; this.content.appendChild(c); } }; netgis.Tabs.prototype.attachTo = function (a) { a.appendChild(this.container); }; netgis.Tabs.prototype.setActiveTab = function (a) { for ( var b = this.header.getElementsByClassName("netgis-button"), c = this.content.getElementsByTagName("section"), d = 0; d < b.length; d++ ) { var e = b[d], f = c[d]; d === a ? (e.classList.add("netgis-color-e"), e.classList.add("netgis-text-a"), e.classList.add("netgis-bar-a"), e.classList.add("netgis-active"), e.scrollIntoView({ behavior: "smooth" }), f.classList.remove("netgis-hide"), (f.scrollTop = 0)) : (e.classList.remove("netgis-color-e"), e.classList.remove("netgis-text-a"), e.classList.remove("netgis-bar-a"), e.classList.remove("netgis-active"), f.classList.add("netgis-hide")); } }; netgis.Tabs.prototype.getContentSection = function (a) { return this.content.getElementsByTagName("section")[a]; }; netgis.Tabs.prototype.appendContent = function (a, b) { this.content.getElementsByTagName("section")[a].appendChild(b); }; netgis.Tabs.prototype.updateHeaderScroll = function () { for (var a = 0, b = this.header.getElementsByTagName("button"), c = 0; c < b.length; c++) { var d = b[c]; a += d.getBoundingClientRect().width; d.classList.contains("netgis-active") && d.scrollIntoView(); } b = this.header.getBoundingClientRect().width; a > b ? this.container.classList.add("netgis-scroll") : this.container.classList.remove("netgis-scroll"); }; netgis.Tabs.prototype.onHeaderButtonClick = function (a) { a = a.currentTarget; for (var b = this.header.getElementsByClassName("netgis-button"), c = 0, d = 0; d < b.length; d++) if (b[d] === a) { c = d; break; } this.setActiveTab(c); }; netgis = netgis || {}; netgis.TimeSlider = function (a) { this.config = a; this.insertTop = !0; this.initElements(); for (a = 1900; 2e3 >= a; a++); var b = this; window.setTimeout(function () { b.container.scrollLeft = 0; }, 1); }; netgis.TimeSlider.Config = {}; netgis.TimeSlider.prototype.initElements = function () { this.container = document.createElement("section"); this.container.className = "netgis-timeslider netgis-footer netgis-noselect netgis-color-e netgis-hide"; document.addEventListener("pointermove", this.onPointerMove.bind(this)); document.addEventListener("pointerup", this.onPointerUp.bind(this)); this.header = document.createElement("button"); this.header.className = "netgis-header netgis-button netgis-clip-text netgis-color-a netgis-hover-c netgis-shadow"; this.header.innerHTML = "TimeSlider"; this.header.setAttribute("type", "button"); this.header.addEventListener("click", this.onHeaderClick.bind(this)); this.container.appendChild(this.header); this.wrapper = document.createElement("div"); this.wrapper.className = "netgis-wrapper"; this.wrapper.addEventListener("pointerdown", this.onPointerDown.bind(this)); this.container.appendChild(this.wrapper); this.table = document.createElement("table"); this.wrapper.appendChild(this.table); this.top = document.createElement("tr"); this.table.appendChild(this.top); this.bottom = document.createElement("tr"); }; netgis.TimeSlider.prototype.attachTo = function (a) { a.appendChild(this.container); a.addEventListener(netgis.Events.TIMESLIDER_SHOW, this.onTimeSliderShow.bind(this)); a.addEventListener(netgis.Events.TIMESLIDER_HIDE, this.onTimeSliderHide.bind(this)); }; netgis.TimeSlider.prototype.setVisible = function (a) { a ? (this.container.classList.remove("netgis-hide"), this.container.parentNode.classList.add("netgis-footer")) : (this.container.classList.add("netgis-hide"), this.container.parentNode.classList.remove("netgis-footer")); }; netgis.TimeSlider.prototype.setTitle = function (a) { this.header.getElementsByTagName("span")[0].innerHTML = a; }; netgis.TimeSlider.prototype.clearTimeSteps = function () { this.top.innerHTML = ""; }; netgis.TimeSlider.prototype.addTimeStep = function (a, b) { var c = document.createElement("td"); c.setAttribute("data-id", a); a = document.createElement("button"); a.className = "netgis-button netgis-color-e netgis-hover-d"; a.innerHTML = "" + b + ""; a.setAttribute("type", "button"); a.addEventListener("click", this.onTimeStepClick.bind(this)); c.appendChild(a); this.top.appendChild(c); }; netgis.TimeSlider.prototype.addTimeStep_01 = function (a, b) { a = document.createElement("td"); var c = document.createElement("td"); this.insertTop ? (a.innerHTML = b) : (c.innerHTML = b); this.top.appendChild(a); this.bottom.appendChild(c); this.insertTop = !this.insertTop; }; netgis.TimeSlider.prototype.setActiveTimeStep = function (a) { var b = this.top.getElementsByTagName("td"), c = b[a], d = c.getAttribute("data-id"); console.info("Set Active Step:", a, d); for (var e = 0; e < b.length; e++) { var f = b[e], g = f.getElementsByClassName("netgis-icon")[0]; e === a ? (f.classList.add("netgis-active"), g.classList.remove("fa-calendar"), g.classList.add("fa-calendar-check")) : (f.classList.remove("netgis-active"), g.classList.add("fa-calendar"), g.classList.remove("fa-calendar-check")); } c.scrollIntoView(); netgis.util.invoke(c, netgis.Events.TIMESLIDER_SELECT, { layer: this.layerID, time: d }); }; netgis.TimeSlider.prototype.requestServiceWMST = function (a, b) { a = a.trim(); 1 > a.length || (-1 === a.indexOf("GetCapabilities") && (a += "&REQUEST=GetCapabilities"), netgis.util.request(a, this.onServiceResponseWMST.bind(this), { id: b })); }; netgis.TimeSlider.prototype.onServiceResponseWMST = function (a, b) { for ( var c = new DOMParser().parseFromString(a, "text/xml").documentElement.getElementsByTagName("Layer"), d, e = 0; e < c.length; e++ ) { a = c[e]; var f = a.getElementsByTagName("Name")[0].textContent; if (f === b.id) { d = { name: f, title: a.getElementsByTagName("Title")[0].textContent, abstract: a.getElementsByTagName("Abstract")[0].textContent, queryable: "1" === a.getAttribute("queryable"), opaque: "1" === a.getAttribute("opaque"), }; e = a.getElementsByTagName("SRS"); 0 < e.length && (d.projection = e[0].textContent); e = a.getElementsByTagName("CRS"); 0 < e.length && (d.projection = e[0].textContent); e = a.getElementsByTagName("BoundingBox")[0]; d.bbox = [ Number.parseFloat(e.getAttribute("minx")), Number.parseFloat(e.getAttribute("miny")), Number.parseFloat(e.getAttribute("maxx")), Number.parseFloat(e.getAttribute("maxy")), ]; b = a.getElementsByTagName("Dimension"); for (e = 0; e < b.length; e++) if (((c = b[e]), "time" === c.getAttribute("name"))) { var g = { defaultTime: c.getAttribute("default"), extent: c.textContent.split("/") }; break; } a = a.getElementsByTagName("Extent"); for (e = 0; e < a.length; e++) if (((b = a[e]), "time" === b.getAttribute("name"))) { g.defaultTime = b.getAttribute("default"); g.extent = b.textContent.split("/"); break; } d.time = g; break; } } console.info("WMST Layer:", d); this.setTitle(d.title); if (d.time.extent) { g = new Date(d.time.extent[0]); a = new Date(d.time.extent[1]); b = d.time.extent[2]; d = []; switch (b) { case "P1D": for (; g <= a; ) d.push(new Date(g)), g.setDate(g.getDate() + 1); break; default: console.error("unsupported WMST date range", b, g, a); } for (e = 0; e < d.length; e++) (b = d[e]), (a = g = b.toISOString()), (a = a.replace("T", ", ")), (a = a.replace("Z", "")), this.addTimeStep(g, a); this.setActiveTimeStep(d.length - 1); } }; netgis.TimeSlider.prototype.onTimeSliderShow = function (a) { a = a.detail; console.info("TimeSlider Show:", a); this.layerID = a.layer; this.setTitle(a.title); this.clearTimeSteps(); this.requestServiceWMST(a.url, a.name); this.setVisible(!0); }; netgis.TimeSlider.prototype.onTimeSliderHide = function (a) { this.setVisible(!1); }; netgis.TimeSlider.prototype.onHeaderClick = function (a) { this.setVisible(!1); }; netgis.TimeSlider.prototype.onPointerDown = function (a) { a = a.pageX - this.wrapper.offsetLeft; this.down = !0; this.downX = a; this.downScroll = this.wrapper.scrollLeft; this.container.classList.add("netgis-active"); }; netgis.TimeSlider.prototype.onPointerMove = function (a) { this.down && (a.preventDefault(), (this.wrapper.scrollLeft = this.downScroll - (a.pageX - this.wrapper.offsetLeft - this.downX))); }; netgis.TimeSlider.prototype.onPointerUp = function (a) { this.down && a.preventDefault(); this.down = !1; this.container.classList.remove("netgis-active"); }; netgis.TimeSlider.prototype.onTimeStepClick = function (a) { a = a.currentTarget.parentNode; a.getAttribute("data-id"); if (!(5 < Math.abs(this.wrapper.scrollLeft - this.downScroll))) { for (var b = this.top.getElementsByTagName("td"), c = -1, d = 0; d < b.length; d++) if (b[d] === a) { c = d; break; } this.setActiveTimeStep(c); } }; netgis = netgis || {}; netgis.Toolbox = function (a) { this.config = a; this.bottomPanels = {}; this.initElements(a); this.initOptions(a); this.initEvents(); this.setActiveButton(netgis.Commands.VIEW); }; netgis.Toolbox.Config = { open: !1, items: [], options: { buffer_features: { title: "Buffer", items: [ { id: "buffer_radius", type: "integer", title: "Radius (Meter)" }, { id: "buffer_segments", type: "integer", title: "Segments" }, { id: "buffer_submit", type: "button", title: "Akzeptieren", }, ], }, }, }; netgis.Toolbox.prototype.initElements = function (a) { this.panel = new netgis.Panel("Toolbox"); this.panel.content.classList.add("netgis-toolbox"); this.top = document.createElement("section"); this.panel.content.appendChild(this.top); for (var b = a.toolbox.items, c = 0; c < b.length; c++) { var d = b[c]; if (this.config.tools && !1 === this.config.tools.editable) switch (d.id) { case "draw_points": continue; case "draw_lines": continue; case "draw_polygons": continue; case "modify_features": continue; case "delete_features": continue; case "buffer_features": continue; case "cut_features": continue; } this.addButton(this.top, d.id, d.title); } this.bottom = document.createElement("section"); this.bottom.className = "netgis-color-e netgis-hide"; this.panel.content.appendChild(this.bottom); b = document.createElement("button"); b.className = "netgis-button netgis-clip-text netgis-color-c netgis-gradient-a"; b.innerHTML = "Einstellungen"; b.setAttribute("type", "button"); b.addEventListener("click", this.onBottomHeaderClick.bind(this)); this.bottom.appendChild(b); this.bottomTitle = b.getElementsByTagName("span")[0]; a.toolbox && !0 === a.toolbox.open && this.panel.show(); }; netgis.Toolbox.prototype.initOptions = function (a) { var b = a.toolbox.options; if (b) for (var c in b); a = a.tools; b = []; a && (a.buffer || (a.buffer = {}), (this.bottomPanels.drawPoints = document.createElement("div")), b.push(this.addCheckbox(this.bottomPanels.drawPoints, "Einrasten", this.onDrawSnapToggle.bind(this))), this.addCheckbox(this.bottomPanels.drawPoints, "Puffern", this.onDrawBufferToggle.bind(this)), this.addInputNumber( this.bottomPanels.drawPoints, "Radius (Meter):", a.buffer.default_radius, this.onDrawBufferChange.bind(this) ), this.addInputNumber( this.bottomPanels.drawPoints, "Segmente:", a.buffer.default_segments, this.onDrawBufferChange.bind(this) ), this.bottom.appendChild(this.bottomPanels.drawPoints), (this.bottomPanels.drawLines = document.createElement("div")), b.push(this.addCheckbox(this.bottomPanels.drawLines, "Einrasten", this.onDrawSnapToggle.bind(this))), this.addCheckbox(this.bottomPanels.drawLines, "Puffern", this.onDrawBufferToggle.bind(this)), this.addInputNumber( this.bottomPanels.drawLines, "Radius (Meter):", a.buffer.default_radius, this.onDrawBufferChange.bind(this) ), this.addInputNumber( this.bottomPanels.drawLines, "Segmente:", a.buffer.default_segments, this.onDrawBufferChange.bind(this) ), this.bottom.appendChild(this.bottomPanels.drawLines), this.showDrawBufferOptions(!1), (this.bottomPanels.drawPolygons = document.createElement("div")), b.push(this.addCheckbox(this.bottomPanels.drawPolygons, "Einrasten", this.onDrawSnapToggle.bind(this))), this.bottom.appendChild(this.bottomPanels.drawPolygons), (this.bottomPanels.bufferFeatures = document.createElement("div")), this.addInputNumber( this.bottomPanels.bufferFeatures, "Radius (Meter):", a.buffer.default_radius, this.onBufferFeaturesChange.bind(this) ), this.addInputNumber( this.bottomPanels.bufferFeatures, "Segmente:", a.buffer.default_segments, this.onBufferFeaturesChange.bind(this) ), this.addCheckbox(this.bottomPanels.bufferFeatures, "Mehrfach-Auswahl", this.onSelectMultipleChange.bind(this)), this.addButton( this.bottomPanels.bufferFeatures, null, "Akzeptieren", this.onBufferFeaturesAccept.bind(this) ), this.bottom.appendChild(this.bottomPanels.bufferFeatures), (this.bottomPanels.cutFeatures = document.createElement("div")), this.addCheckbox(this.bottomPanels.cutFeatures, "Mehrfach-Auswahl", this.onSelectMultipleChange.bind(this)), this.bottom.appendChild(this.bottomPanels.cutFeatures), (this.bottomPanels.modifyFeatures = document.createElement("div")), b.push(this.addCheckbox(this.bottomPanels.modifyFeatures, "Einrasten", this.onDrawSnapToggle.bind(this))), this.bottom.appendChild(this.bottomPanels.modifyFeatures)); if (a && a.snapping) { if (!1 === a.snapping.show) for (c = 0; c < b.length; c++) b[c].parentNode.classList.add("netgis-hide"); if (!0 === a.snapping.active) { for (c = 0; c < b.length; c++) b[c].checked = !0; var d = this; window.setTimeout(function () { netgis.util.invoke(d.panel.container, netgis.Events.MAP_SNAP_TOGGLE, { on: !0 }); }, 100); } } }; netgis.Toolbox.prototype.initEvents = function () { this.resizeObserver = new ResizeObserver(this.onTopResize.bind(this)).observe(this.top); }; netgis.Toolbox.prototype.attachTo = function (a) { this.panel.attachTo(a); a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this)); a.addEventListener(netgis.Events.TOOLBOX_TOGGLE, this.onToolboxToggle.bind(this)); a.addEventListener(netgis.Events.SELECT_MULTI_TOGGLE, this.onSelectMultiToggle.bind(this)); }; netgis.Toolbox.prototype.addButton = function (a, b, c, d) { var e = document.createElement("button"); e.className = "netgis-button netgis-clip-text netgis-color-e netgis-hover-d"; e.innerHTML = c; e.setAttribute("type", "button"); e.setAttribute("data-id", b); d ? (e.onclick = d) : e.addEventListener("click", this.onButtonClick.bind(this)); a && a.appendChild(e); return e; }; netgis.Toolbox.prototype.addCheckbox = function (a, b, c) { var d = document.createElement("label"); d.className = "netgis-noselect netgis-color-e netgis-hover-d"; var e = document.createElement("input"); e.setAttribute("type", "checkbox"); d.appendChild(e); var f = document.createElement("span"); f.innerHTML = b; d.appendChild(f); c && (e.onchange = c); a && a.appendChild(d); return e; }; netgis.Toolbox.prototype.addInputNumber = function (a, b, c, d) { var e = document.createElement("label"); e.className = "netgis-noselect netgis-color-e netgis-hover-d"; var f = document.createElement("span"); f.innerHTML = b; e.appendChild(f); b = document.createElement("input"); b.setAttribute("type", "number"); b.setAttribute("min", 0); b.value = c; e.appendChild(b); d && ((b.onchange = d), (b.onkeyup = d)); a && a.appendChild(e); return b; }; netgis.Toolbox.prototype.showBottom = function (a, b) { this.top.classList.add("netgis-resize-bottom"); this.top.style.height = "50%"; this.top.style.bottom = "auto"; this.bottom.classList.remove("netgis-hide"); this.bottomTitle.innerHTML = b; if (a) for (var c in this.bottomPanels) (b = this.bottomPanels[c]), b === a ? b.classList.remove("netgis-hide") : b.classList.add("netgis-hide"); }; netgis.Toolbox.prototype.hideBottom = function () { this.top.classList.remove("netgis-resize-bottom"); this.top.style.height = "auto"; this.top.style.bottom = "0mm"; this.bottom.classList.add("netgis-hide"); }; netgis.Toolbox.prototype.showDrawBufferOptions = function (a) { var b = this.bottomPanels.drawPoints.getElementsByTagName("label"), c = this.bottomPanels.drawLines.getElementsByTagName("label"); b[1].getElementsByTagName("input")[0].checked = a; (c[1].getElementsByTagName("input")[0].checked = a) ? (b[2].classList.remove("netgis-hide"), b[3].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide")) : (b[2].classList.add("netgis-hide"), b[3].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide")); }; netgis.Toolbox.prototype.setActiveButton = function (a) { for (var b = this.top.getElementsByTagName("button"), c = null, d = 0; d < b.length; d++) { var e = b[d]; a && e.getAttribute("data-id") === a.toLowerCase() ? ((c = e), e.classList.remove("netgis-color-e"), e.classList.add("netgis-active", "netgis-color-d")) : (e.classList.remove("netgis-active", "netgis-color-d"), e.classList.add("netgis-color-e")); } if (c) { var f = this; window.setTimeout(function () { f.top.scrollTo({ top: c.offsetTop, behavior: "smooth" }); }, 10); } }; netgis.Toolbox.prototype.onToolboxToggle = function (a) { this.panel.toggle(); }; netgis.Toolbox.prototype.onClientSetMode = function (a) { a = a.detail; this.hideBottom(); switch (a.mode) { default: this.setActiveButton(null); break; case netgis.Modes.VIEW: this.setActiveButton(netgis.Commands.VIEW); break; case netgis.Modes.ZOOM_BOX: this.setActiveButton(netgis.Commands.ZOOM_BOX); break; case netgis.Modes.MEASURE_LINE: this.setActiveButton(netgis.Commands.MEASURE_LINE); break; case netgis.Modes.MEASURE_AREA: this.setActiveButton(netgis.Commands.MEASURE_AREA); break; case netgis.Modes.DRAW_POINTS: this.setActiveButton(netgis.Commands.DRAW_POINTS); this.showBottom(this.bottomPanels.drawPoints, "Punkte zeichnen"); break; case netgis.Modes.DRAW_LINES: this.setActiveButton(netgis.Commands.DRAW_LINES); this.showBottom(this.bottomPanels.drawLines, "Linien zeichnen"); break; case netgis.Modes.DRAW_POLYGONS: this.setActiveButton(netgis.Commands.DRAW_POLYGONS); this.showBottom(this.bottomPanels.drawPolygons, "Polygone zeichnen"); break; case netgis.Modes.MODIFY_FEATURES: this.setActiveButton(netgis.Commands.MODIFY_FEATURES); this.showBottom(this.bottomPanels.modifyFeatures, "Verschieben"); break; case netgis.Modes.DELETE_FEATURES: this.setActiveButton(netgis.Commands.DELETE_FEATURES); break; case netgis.Modes.BUFFER_FEATURES: this.setActiveButton(netgis.Commands.BUFFER_FEATURES); this.showBottom(this.bottomPanels.bufferFeatures, "Puffern"); this.onBufferFeaturesChange(); break; case netgis.Modes.BUFFER_FEATURES_EDIT: this.setActiveButton(netgis.Commands.BUFFER_FEATURES); this.showBottom(this.bottomPanels.bufferFeatures, "Puffern"); this.onBufferFeaturesChange(); break; case netgis.Modes.BUFFER_FEATURES_DYNAMIC: this.setActiveButton(netgis.Commands.BUFFER_FEATURES); this.showBottom(this.bottomPanels.bufferFeatures, "Puffern"); this.onBufferFeaturesChange(); break; case netgis.Modes.CUT_FEATURES: netgis.util.invoke(this.panel.container, netgis.Events.SELECT_MULTI_TOGGLE, { on: !1 }); this.setActiveButton(netgis.Commands.CUT_FEATURES); break; case netgis.Modes.CUT_FEATURES_DRAW: this.setActiveButton(netgis.Commands.CUT_FEATURES); } }; netgis.Toolbox.prototype.onTopResize = function (a) { if (!this.bottom.classList.contains("netgis-hide")) { a = this.top.getBoundingClientRect(); var b = this.top.parentNode.getBoundingClientRect(); this.bottom.style.top = a.bottom - b.top + "px"; } }; netgis.Toolbox.prototype.onBottomHeaderClick = function (a) { netgis.util.invoke(this.panel.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW }); }; netgis.Toolbox.prototype.onButtonClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); netgis.util.invoke(a, netgis.Events.TOOLBOX_BUTTON_CLICK, { id: b }); netgis.Client.handleCommand(a, b); }; netgis.Toolbox.prototype.onDrawSnapToggle = function (a) { var b = a.currentTarget, c = b.parentNode.parentNode; a = b.checked; netgis.util.invoke(b, netgis.Events.MAP_SNAP_TOGGLE, { on: a }); b = []; c === this.bottomPanels.drawPoints && (b.push(this.bottomPanels.drawLines), b.push(this.bottomPanels.drawPolygons), b.push(this.bottomPanels.modifyFeatures)); c === this.bottomPanels.drawLines && (b.push(this.bottomPanels.drawPoints), b.push(this.bottomPanels.drawPolygons), b.push(this.bottomPanels.modifyFeatures)); c === this.bottomPanels.drawPolygons && (b.push(this.bottomPanels.drawPoints), b.push(this.bottomPanels.drawLines), b.push(this.bottomPanels.modifyFeatures)); c === this.bottomPanels.modifyFeatures && (b.push(this.bottomPanels.drawPoints), b.push(this.bottomPanels.drawLines), b.push(this.bottomPanels.drawPolygons)); for (c = 0; c < b.length; c++) b[c].getElementsByTagName("input")[0].checked = a; }; netgis.Toolbox.prototype.onDrawBufferToggle = function (a) { a = a.currentTarget; var b = a.checked; this.showDrawBufferOptions(b); var c = this.bottomPanels.drawPoints.getElementsByTagName("input"), d = Number.parseFloat(c[2].value); c = Number.parseInt(c[3].value); netgis.util.invoke(a, netgis.Events.DRAW_BUFFER_TOGGLE, { on: b, radius: d, segments: c }); }; netgis.Toolbox.prototype.onDrawBufferChange = function (a) { a = a.currentTarget.parentNode.parentNode; var b = a.getElementsByTagName("input"), c = b[1].checked, d = Number.parseFloat(b[2].value), e = Number.parseInt(b[3].value); netgis.util.invoke(this.bottomPanels.drawPoints, netgis.Events.DRAW_BUFFER_CHANGE, { on: c, radius: d, segments: e, }); if (a === this.bottomPanels.drawPoints) var f = this.bottomPanels.drawLines; a === this.bottomPanels.drawLines && (f = this.bottomPanels.drawPoints); f && ((b = f.getElementsByTagName("input")), (b[1].checked = c), (b[2].value = d), (b[3].value = e)); }; netgis.Toolbox.prototype.onBufferFeaturesChange = function (a) { var b = this.bottomPanels.bufferFeatures.getElementsByTagName("input"); a = Number.parseFloat(b[0].value); b = Number.parseInt(b[1].value); netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.BUFFER_CHANGE, { radius: a, segments: b }); }; netgis.Toolbox.prototype.onSelectMultipleChange = function (a) { netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.SELECT_MULTI_TOGGLE, { on: a.currentTarget.checked, }); }; netgis.Toolbox.prototype.onSelectMultiToggle = function (a) { a = a.detail; this.bottomPanels.bufferFeatures.getElementsByTagName("input")[2].checked = a.on; }; netgis.Toolbox.prototype.onBufferFeaturesAccept = function (a) { var b = this.bottomPanels.bufferFeatures.getElementsByTagName("input"); a = Number.parseFloat(b[0].value); b = Number.parseInt(b[1].value); netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.BUFFER_ACCEPT, { radius: a, segments: b }); netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW }); }; netgis = netgis || {}; netgis.Tree = function (a) { this.draggable = a ? a : !1; this.dragElement = null; this.initElements(); }; netgis.Tree.prototype.initElements = function () { var a = document.createElement("ul"); a.className = "netgis-tree"; this.container = a; }; netgis.Tree.prototype.attachTo = function (a) { a.appendChild(this.container); }; netgis.Tree.prototype.clear = function () { this.container.innerHTML = ""; }; netgis.Tree.prototype.addFolder = function (a, b, c, d, e, f) { var g = document.createElement("li"); g.className = "netgis-folder"; g.setAttribute("data-id", b); b = document.createElement("details"); g.appendChild(b); var h = document.createElement("summary"); h.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d"; h.innerHTML = "" + c + ""; b.appendChild(h); !0 === this.draggable && ((netgis.util.isDefined(f) && !0 !== f) || this.setItemDraggable(h)); c = document.createElement("label"); h.appendChild(c); f = document.createElement("input"); f.setAttribute("type", "checkbox"); f.onchange = this.onFolderChange.bind(this); c.appendChild(f); !0 === e && g.classList.add("netgis-nocheck"); e = document.createElement("ul"); b.appendChild(e); a = a ? a.getElementsByTagName("ul")[0] : this.container; d ? a.insertBefore(g, a.firstChild) : a.appendChild(g); return g; }; netgis.Tree.prototype.addCheckbox = function (a, b, c, d, e, f) { var g = document.createElement("li"); g.className = "netgis-item"; !0 === this.draggable && this.setItemDraggable(g); var h = document.createElement("label"); h.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d"; h.innerHTML = "" + c + ""; g.appendChild(h); c = document.createElement("span"); c.className = "netgis-wrapper"; h.insertBefore(c, h.firstChild); h = document.createElement("input"); h.setAttribute("type", "checkbox"); h.setAttribute("data-id", b); d && (h.checked = d); h.onchange = this.onItemChange.bind(this); c.appendChild(h); f && this.addItemDetails(g, b, f); a = a ? a.getElementsByTagName("ul")[0] : this.container; e ? a.insertBefore(g, a.firstChild) : a.appendChild(g); return g; }; netgis.Tree.prototype.addRadioButton = function (a, b, c, d, e) { var f = document.createElement("li"); f.className = "netgis-item"; var g = document.createElement("label"); g.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d"; g.innerHTML = "" + c + ""; f.appendChild(g); c = document.createElement("span"); c.className = "netgis-wrapper"; g.insertBefore(c, g.firstChild); g = a ? "radio-" + a.getAttribute("data-id") : "radio-noname"; var h = document.createElement("input"); h.setAttribute("type", "radio"); h.setAttribute("name", g); h.setAttribute("value", "radio-" + b); h.setAttribute("data-id", b); d && (h.checked = d); h.onchange = this.onItemChange.bind(this); c.appendChild(h); e && this.addItemDetails(f, b, e); a ? a.getElementsByTagName("ul")[0].appendChild(f) : this.container.appendChild(f); return f; }; netgis.Tree.prototype.addButton = function (a, b, c, d) { var e = document.createElement("li"), f = document.createElement("button"); f.innerHTML = c; f.className = "netgis-button netgis-color-e netgis-hover-d netgis-clip-text"; f.setAttribute("type", "button"); e.appendChild(f); b && f.setAttribute("data-id", b); d && (f.onclick = d); f.addEventListener("click", this.onButtonClick.bind(this)); a ? a.getElementsByTagName("ul")[0].appendChild(e) : this.container.appendChild(e); return e; }; netgis.Tree.prototype.addSpace = function (a) { var b = document.createElement("li"); b.className = "netgis-space"; a ? a.getElementsByTagName("ul")[0].appendChild(b) : this.container.appendChild(b); return b; }; netgis.Tree.prototype.addItemDetails = function (a, b, c) { var d = document.createElement("details"); d.className = "netgis-noselect"; var e = document.createElement("summary"); e.className = "netgis-clickable netgis-hover-d"; e.innerHTML = ""; d.appendChild(e); e = document.createElement("div"); d.appendChild(e); for (var f = 0; f < c.length; f++) { var g = c[f], h = document.createElement("label"); h.className = "netgis-hover-d"; switch (g.type) { case "button": var k = document.createElement("button"); k.setAttribute("type", "button"); k.addEventListener("click", g.callback); k.className = "netgis-button netgis-color-e netgis-hover-d"; k.innerHTML = g.title; h.appendChild(k); break; case "slider": k = document.createElement("span"); k.className = "netgis-clip-text"; k.innerHTML = g.title; h.appendChild(k); k = document.createElement("span"); h.appendChild(k); var l = document.createElement("input"); l.setAttribute("type", "range"); l.setAttribute("min", 0); l.setAttribute("max", 100); l.setAttribute("step", 1); l.setAttribute("value", g.val); l.setAttribute("data-id", b); l.addEventListener("change", this.onItemSliderChange.bind(this)); l.addEventListener("input", this.onItemSliderChange.bind(this)); this.draggable && (l.setAttribute("draggable", "true"), l.addEventListener("dragstart", function (a) { a.preventDefault(); a.stopImmediatePropagation(); })); k.appendChild(l); } e.appendChild(h); } a.appendChild(d); }; netgis.Tree.prototype.setItemDraggable = function (a) { a.setAttribute("draggable", "true"); a.addEventListener("dragstart", this.onDragStart.bind(this)); a.addEventListener("dragenter", this.onDragEnter.bind(this)); a.addEventListener("dragover", this.onDragOver.bind(this)); a.addEventListener("dragleave", this.onDragLeave.bind(this)); a.addEventListener("drop", this.onDragDrop.bind(this)); a.addEventListener("dragend", this.onDragEnd.bind(this)); }; netgis.Tree.prototype.getFolder = function (a) { for (var b = this.container.getElementsByClassName("netgis-folder"), c = 0; c < b.length; c++) { var d = b[c]; if (d.getAttribute("data-id") === a) return d; } return null; }; netgis.Tree.prototype.getItem = function (a) { for (var b = this.container.getElementsByTagName("input"), c = 0; c < b.length; c++) { var d = b[c]; if (d.getAttribute("data-id") === a) return d; } return null; }; netgis.Tree.prototype.removeItem = function (a) { if ((a = this.getItem(a))) (a = a.parentNode.parentNode.parentNode), a.parentNode.removeChild(a), this.removeEmptyFolders(), this.updateFolderChecks(); }; netgis.Tree.prototype.removeEmptyFolders = function () { for (var a = this.container.getElementsByClassName("netgis-folder"), b = 0; b < a.length; b++) a[b].getElementsByTagName("ul")[0].getElementsByTagName("li"); }; netgis.Tree.prototype.setFolderOpen = function (a, b) { var c = this.container.getElementsByClassName("netgis-folder"); a = a.toString(); for (var d = 0; d < c.length; d++) { var e = c[d], f = e.getElementsByTagName("details")[0]; e.getAttribute("data-id") === a && (!0 === b ? f.setAttribute("open", "") : f.removeAttribute("open")); } }; netgis.Tree.prototype.setItemChecked = function (a, b, c) { var d = this.container.getElementsByClassName("netgis-item"); a = a.toString(); for (var e = 0; e < d.length; e++) { var f = d[e], g = f.getElementsByTagName("input")[0]; if (g.getAttribute("data-id") === a) { if ("radio" === g.getAttribute("type")) { f = f.parentNode.getElementsByTagName("input"); for (var h = 0; h < f.length; h++) { var k = f[h]; k !== g && "radio" === k.getAttribute("type") && !1 !== k.checked && ((k.checked = !1), netgis.util.invoke(g, netgis.Events.TREE_ITEM_CHANGE, { id: k.getAttribute("data-id"), checked: !1, })); } } c ? (g.checked = b) : g.checked !== b && g.click(); } } }; netgis.Tree.prototype.setFolderParent = function (a, b) { var c = a.parentNode; c && c.removeChild(a); null !== b ? b.getElementsByTagName("ul")[0].appendChild(a) : this.container.appendChild(a); }; netgis.Tree.prototype.updateFolderChecks = function () { for (var a = this.container.getElementsByClassName("netgis-folder"), b = 0; b < a.length; b++) this.updateFolderCheck(a[b]); }; netgis.Tree.prototype.updateFolderCheck = function (a) { a || (a = this.container); for (var b = a.getElementsByClassName("netgis-item"), c = 0, d = 0; d < b.length; d++) { var e = b[d].getElementsByTagName("input")[0]; e.checked && c++; } e = a.getElementsByTagName("input")[0]; d = 0; 0 < c && (d = 1); 0 < c && c === b.length && (d = 2); switch (d) { case 0: e.checked = !1; e.classList.remove("netgis-partial"); break; case 1: e.checked = !0; e.classList.add("netgis-partial"); break; case 2: (e.checked = !0), e.classList.remove("netgis-partial"); } (a = a.parentElement) && a !== this.container && (a = a.parentElement.parentElement) && -1 !== a.className.search("netgis-folder") && this.updateFolderCheck(a); }; netgis.Tree.prototype.onFolderChange = function (a) { var b = a.currentTarget; a = b.checked; b = b.parentElement.parentElement.parentElement.parentElement; for (var c = b.getElementsByTagName("input"), d = 1; d < c.length; d++) { var e = c[d]; e.checked !== a && e.click(); } this.updateFolderCheck(b); a = b.parentElement.parentElement.parentElement; -1 !== a.className.search("netgis-folder") && this.updateFolderCheck(a); }; netgis.Tree.prototype.onItemChange = function (a) { a = a.currentTarget; var b = a.checked, c = a.getAttribute("data-id"), d = a.parentElement.parentElement.parentElement.parentElement.parentElement; if ("radio" === a.getAttribute("type")) for ( var e = a.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("input"), f = 0; f < e.length; f++ ) { var g = e[f].getAttribute("data-id"); g && g !== c && netgis.util.invoke(a, netgis.Events.TREE_ITEM_CHANGE, { id: g, checked: !1 }); } netgis.util.invoke(a, netgis.Events.TREE_ITEM_CHANGE, { id: c, checked: b }); -1 !== d.className.search("netgis-folder") && this.updateFolderCheck(d); }; netgis.Tree.prototype.onRadioChange = function (a) { a = a.currentTarget; var b = a.checked, c = a.getAttribute("data-id"), d = Number.parseInt(c); Number.isNaN(d) || (c = d); d = a.parentElement.parentElement.parentElement.parentElement.parentElement; netgis.util.invoke(a, netgis.Events.TREE_ITEM_CHANGE, { id: c, checked: b }); -1 !== d.className.search("netgis-folder") && this.updateFolderCheck(d); }; netgis.Tree.prototype.onButtonClick = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); netgis.util.invoke(a, netgis.Events.TREE_BUTTON_CLICK, { id: b }); }; netgis.Tree.prototype.onItemSliderChange = function (a) { a = a.currentTarget; var b = a.getAttribute("data-id"); netgis.util.invoke(a, netgis.Events.TREE_ITEM_SLIDER_CHANGE, { id: b, val: Number.parseFloat(a.value) }); }; netgis.Tree.prototype.onDragStart = function (a) { a.stopPropagation(); var b = a.currentTarget, c = b.getElementsByTagName("input")[0].getAttribute("data-id"); b.classList.add("netgis-dragging"); a.dataTransfer.setData("text/plain", c); a.dataTransfer.dropEffect = "move"; this.dragElement = b; }; netgis.Tree.prototype.onDragEnter = function (a) { a = a.currentTarget; a !== this.dragElement && a.classList.add("netgis-dragover"); }; netgis.Tree.prototype.onDragOver = function (a) { a.preventDefault(); a = a.currentTarget; a !== this.dragElement && a.classList.add("netgis-dragover"); }; netgis.Tree.prototype.onDragLeave = function (a) { a.currentTarget.classList.remove("netgis-dragover"); }; netgis.Tree.prototype.onDragDrop = function (a) { a.preventDefault(); a.stopPropagation(); var b = a.currentTarget; a.dataTransfer.getData("text/plain"); if (b !== this.dragElement) { b.classList.remove("netgis-dragover"); "summary" === b.nodeName.toLowerCase() ? ((a = b.parentNode.getElementsByTagName("ul")[0]), (b = 0 < a.childNodes.length ? a.childNodes[0] : null)) : (a = b.parentNode); var c = "summary" === this.dragElement.nodeName.toLowerCase() ? this.dragElement.parentNode.parentNode : this.dragElement; c.parentNode !== a || 1 < a.childNodes.length || (b = null); c.contains(a) || (c.parentNode.removeChild(c), b ? a.insertBefore(c, b) : a.appendChild(c), netgis.util.invoke(this.container, netgis.Events.TREE_ITEM_ORDER_CHANGE, { items: this.container.getElementsByClassName("netgis-item"), })); } }; netgis.Tree.prototype.onDragEnd = function (a) { a.currentTarget.classList.remove("netgis-dragging"); this.dragElement = null; }; netgis = netgis || {}; netgis.util = (function () { var a = function (a, b) { for (var c in a) a.hasOwnProperty(c) && b(c, a[c]); }, b = function () { return navigator.language || "de-DE"; }; return { isDefined: function (a) { return "undefined" !== typeof a; }, isObject: function (a) { return "object" !== typeof a || Array.isArray(a) || null === a ? !1 : !0; }, isString: function (a) { return "string" === typeof a || a instanceof String; }, isJSON: function (a, b) { if (!0 === b) { a = "string" !== typeof a ? JSON.stringify(a) : a; try { a = JSON.parse(a); } catch (e) { return !1; } return "object" === typeof a && null !== a; } b = a.trim(); a = b.charAt(0); b = b.charAt(b.length - 1); return ("{" === a && "}" === b) || ("[" === a && "]" === b) ? !0 : !1; }, isMobile: function (a) { return a ? 600 > a.getBoundingClientRect().width : 600 > document.body.getBoundingClientRect().width; }, clone: function (a) { return JSON.parse(JSON.stringify(a)); }, stringToID: function (a, b) { b || (b = "-"); a = a.trim(); a = a.toLowerCase(); a = this.replace(a, " ", b); a = this.replace(a, "\n", b); a = this.replace(a, "\t", b); a = this.replace(a, "\\.", b); a = this.replace(a, "\\,", b); a = this.replace(a, "\\!", b); a = this.replace(a, "\\?", b); a = this.replace(a, ":", b); a = this.replace(a, ";", b); a = this.replace(a, '"', b); a = this.replace(a, "'", b); a = this.replace(a, "\\\u00a7", b); a = this.replace(a, "\\$", b); a = this.replace(a, "\\%", b); a = this.replace(a, "\\&", b); a = this.replace(a, "\\/", b); a = this.replace(a, "\\\\", b); a = this.replace(a, "\\(", b); a = this.replace(a, "\\)", b); a = this.replace(a, "\\{", b); a = this.replace(a, "\\}", b); a = this.replace(a, "\\[", b); a = this.replace(a, "\\]", b); a = this.replace(a, "=", b); a = this.replace(a, "\\+", b); a = this.replace(a, "\\*", b); a = this.replace(a, "\\~", b); a = this.replace(a, "\\^", b); a = this.replace(a, "\\\u00b0", b); a = this.replace(a, "\u00b2", b); a = this.replace(a, "\u00b3", b); a = this.replace(a, "\\#", b); a = this.replace(a, "\\<", b); a = this.replace(a, "\\>", b); a = this.replace(a, "\\|", b); a = this.replace(a, "\\@", b); a = this.replace(a, "\u20ac", b); a = this.replace(a, "\u00b5", b); a = this.trim(a, b); a = this.replace(a, "\u00e4", "ae"); a = this.replace(a, "\u00f6", "oe"); a = this.replace(a, "\u00fc", "ue"); a = this.replace(a, "\u00df", "ss"); a = this.replace(a, "\u00e1", "a"); a = this.replace(a, "\u00e0", "a"); a = this.replace(a, "\u00e2", "a"); a = this.replace(a, "\u00e9", "e"); a = this.replace(a, "\u00e8", "e"); a = this.replace(a, "\u00ea", "e"); a = this.replace(a, "\u00ed", "i"); a = this.replace(a, "\u00ec", "i"); a = this.replace(a, "\u00ee", "i"); a = this.replace(a, "\u00f3", "o"); a = this.replace(a, "\u00f2", "o"); a = this.replace(a, "\u00f4", "o"); a = this.replace(a, "\u00fa", "u"); a = this.replace(a, "\u00f9", "u"); return (a = this.replace(a, "\u00fb", "u")); }, replace: function (a, b, e) { return a.replace(new RegExp(b, "g"), e); }, trim: function (a, b) { a = a.replace(new RegExp("^" + b + "+"), ""); return (a = a.replace(new RegExp(b + "+$"), "")); }, foreach: a, template: function (b, d) { a(d, function (a, c) { b = b.replace(new RegExp("{" + a + "}", "g"), c); }); return b; }, newlines: function (a) { return a.replace(/\n/g, "
"); }, create: function (a) { var b = document.createElement("tbody"); b.innerHTML = a; return b.children[0]; }, insideElement: function (a, b, e) { a = a.getBoundingClientRect(); return b < a.left || e < a.top || b > a.right || e > a.bottom ? !1 : !0; }, size: function (a) { a = new TextEncoder().encode(JSON.stringify(a)).length; var b = a / 1024; return { bytes: a, kilobytes: b, megabytes: b / 1024 }; }, request: function (a, b, e, f) { f = new XMLHttpRequest(); e && (f._requestData = e); f.onload = function () { b(this.responseText, this._requestData, this); }; f.withCredentials = !1; f.open("GET", a, !0); f.send(); return f; }, downloadJSON: function (a, b) { a = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(a)); var c = document.createElement("a"); c.setAttribute("href", a); c.setAttribute("download", b); document.body.appendChild(c); c.click(); c.remove(); }, padstr: function (a, b) { for (a = a.toString(); a.length < b; ) a = "0" + a; return a; }, merge: function (a, b) { return Object.assign(a, b); }, getTimeStamp: function (a) { var b = new Date(); if (!0 === a) { a = b.getFullYear(); var c = b.getMonth() + 1, f = b.getDate(), g = b.getHours(), h = b.getMinutes(); b = b.getSeconds(); 10 > c && (c = "0" + c); 10 > f && (f = "0" + f); 10 > g && (g = "0" + g); 10 > h && (h = "0" + h); 10 > b && (b = "0" + b); a = [a, c, f, "_", g, h, b].join(""); } else (a = b.getDate() + "." + (b.getMonth() + 1) + "." + b.getFullYear()), (a += " " + b.getHours() + ":" + b.getMinutes()); return a; }, getUserLanguage: b, getFileExtension: function (a) { a = a.split("."); return 1 >= a.length ? "" : a[a.length - 1]; }, parseURL: function (a) { var b = a.indexOf("?"), c = -1 < b ? a.substr(0, b) : a, f = []; if (-1 < b) for (a = a.substr(b + 1), a = a.split("&"), b = 0; b < a.length; b++) { var g = a[b]; g = g.toLowerCase(); -1 < g.search("request") || f.push(g); } return { base: c, parameters: f }; }, formatDistance: function (a) { return 100 < a ? Math.round((a / 1e3) * 100) / 100 + " km" : Math.round(100 * a) / 100 + " m"; }, formatLength: function (a, b) { var c = 1e3 < a; a = c ? b ? Math.round((a / 1e3) * 1e3) / 1e3 : Math.round(a / 1e3) : b ? Math.round(100 * a) / 100 : Math.round(a); 0 === a && (c = !1); return a + (c ? " km" : " m"); }, formatArea: function (a, d, e, f) { a = (e = a > (e || 1e5)) ? d ? Math.round((a / 1e6) * 1e3) / 1e3 : Math.round(a / 1e6) : d ? Math.round(100 * a) / 100 : Math.round(a); 0 === a && (e = !1); a = a.toLocaleString(b()); return a + (e ? " km\u00b2" : " m\u00b2"); }, hexToRGB: function (a) { "#" === a.charAt(0) && (a = a.substr(1)); a = Number.parseInt(a, 16); return [(a >> 16) & 255, (a >> 8) & 255, a & 255]; }, invoke: function (a, b, e) { a.dispatchEvent(new CustomEvent(b, { bubbles: !0, detail: e })); }, handler: function (a, b) { return function (c) { b || (b = c); netgis.util.invoke(this, a, b); }; }, }; })(); netgis = netgis || {}; netgis.Window = function (a) { this.resizing = this.dragging = !1; this.py = this.px = 0; this.initElements(a); this.initEvents(); var b = this; window.setTimeout(function () { var a = b.container.getBoundingClientRect(); b.container.style.right = "auto"; b.container.style.bottom = "auto"; b.container.style.left = a.left + "px"; b.container.style.top = a.top + "px"; }, 100); }; netgis.Window.prototype.initElements = function (a) { this.container = document.createElement("section"); this.container.className = "netgis-window netgis-shadow"; this.header = document.createElement("button"); this.header.setAttribute("type", "button"); this.header.className = "netgis-mover netgis-button netgis-clip-text netgis-color-c netgis-gradient-a netgis-shadow"; this.header.innerHTML = a; this.container.appendChild(this.header); this.closer = document.createElement("button"); this.closer.className = "netgis-closer netgis-button netgis-text-e"; this.closer.innerHTML = ''; this.closer.setAttribute("type", "button"); this.container.appendChild(this.closer); this.content = document.createElement("div"); this.content.className = "netgis-content"; this.container.appendChild(this.content); }; netgis.Window.prototype.initEvents = function () { this.closer.addEventListener("click", this.onCloserClick.bind(this)); this.header.addEventListener("pointerdown", this.onPointerDown.bind(this)); document.addEventListener("pointermove", this.onDocPointerMove.bind(this)); document.addEventListener("pointerup", this.onDocPointerUp.bind(this)); this.observer = new ResizeObserver(this.onResizeObserve.bind(this)); this.observer.observe(this.container, { attributes: !0 }); }; netgis.Window.prototype.attachTo = function (a) { a.appendChild(this.container); }; netgis.Window.prototype.show = function () { this.container.classList.remove("netgis-hide"); }; netgis.Window.prototype.hide = function () { this.container.classList.add("netgis-hide"); }; netgis.Window.prototype.toggle = function () { this.container.classList.toggle("netgis-hide"); }; netgis.Window.prototype.isVisible = function () { return !this.container.classList.contains("netgis-hide"); }; netgis.Window.prototype.onCloserClick = function (a) { this.hide(); }; netgis.Window.prototype.onPointerDown = function (a) { var b = this.container.getBoundingClientRect(); this.dragging = !0; this.px = a.clientX - b.left; this.py = a.clientY - b.top; this.container.classList.add("netgis-dragging"); }; netgis.Window.prototype.onDocPointerMove = function (a) { var b = a.clientX, c = a.clientY, d = this.container.getBoundingClientRect(); if (!this.resizing && this.dragging) { b -= this.px; c -= this.py; var e = this.container.parentNode.getBoundingClientRect(); 0 > b && ((b = 0), (this.px = a.clientX - d.left)); 40 > c && ((c = 40), (this.py = a.clientY - d.top)); b + d.width > e.right && ((b = e.width - d.width), (this.px = a.clientX - d.left)); c + d.height > e.bottom && ((c = e.height - d.height), (this.py = a.clientY - d.top)); this.container.style.left = b + "px"; this.container.style.top = c + "px"; this.container.style.right = "auto"; this.container.style.bottom = "auto"; } }; netgis.Window.prototype.onDocPointerUp = function (a) { this.resizing = this.dragging = !1; this.container.classList.remove("netgis-dragging"); }; netgis.Window.prototype.onResizeObserve = function (a) { this.dragging && ((this.dragging = !1), (this.resizing = !0)); a = this.container.getBoundingClientRect(); netgis.util.invoke(this.container, netgis.Events.WINDOW_RESIZE, { x: a.x, y: a.y, w: a.width, h: a.height }); }; netgis = netgis || {}; netgis.WMC = function (a) { this.config = a; }; netgis.WMC.Config = { url: "", layers_url: "" }; netgis.WMC.prototype.requestContext = function (a, b) { this.callback = b; netgis.util.request(a, this.onContextResponse.bind(this)); }; netgis.WMC.prototype.onContextResponse = function (a) { var b = JSON.parse(a); this.data = b; a = []; b = b.layerList; for (var c = 0; c < b.length; c++) a.push(b[c].layerId); this.requestLayers(a); }; netgis.WMC.prototype.requestLayers = function (a) { var b = this.config.wmc; b ? ((b = b.layers_url), (b = netgis.util.replace(b, "{ids}", a.join(","))), netgis.util.request(b, this.onLayersResponse.bind(this))) : console.error("no config[ 'wmc' ] found, skipping WMC layer loading"); }; netgis.WMC.prototype.onLayersResponse = function (a) { this.layers = a = JSON.parse(a); console.info("WMC Layers Response:", a); this.callback && this.callback({ config: this.toConfig() }); }; netgis.WMC.prototype.toConfig = function () { var a = this.data.wmc, b = this.data.layerList, c = this.layers.wms.srv, d = {}, e = a.bbox; e = e.split(","); for (var f = 0; f < e.length; f++) e[f] = Number.parseFloat(e[f]); d.map = { projection: a.crs, bbox: e }; d.attribution || (d.attribution = {}); d.attribution.prefix = d.attribution.prefix ? a.title + ", " + d.attribution.prefix : a.title; a = d.folders = []; e = d.layers = []; this.parseServiceLayers(c, b, a, e); b = 1e3; for (c = 0; c < a.length; c++) { f = a[c]; for (var g = e.length - 1; 0 <= g; g--) { var h = e[g]; h.folder === f.id && ((h.order = b), (b += 1)); } } return d; }; netgis.WMC.prototype.parseServiceLayers = function (a, b, c, d) { c || (c = []); d || (d = []); for (var e = 0; e < a.length; e++) for (var f = a[e], g = 0; g < f.layer.length; g++) { var h = f.layer[g]; h.isRoot && c.push({ id: h.id, title: h.title, open: "1" === f.isopen }); var k = h.layer; if (k) { b && k.sort(function (a, c) { a = a.id; var d = c.id, e = null; c = null; for (var f = 0; f < b.length; f++) { var g = b[f]; g.layerId.toString() === a && (e = g); g.layerId.toString() === d && (c = g); } a = e.layerPos; c = c.layerPos; return a < c ? -1 : a > c ? 1 : 0; }); for (var l = k.length - 1; 0 <= l; l--) { var m = k[l], n = m.id, p = null; if (b) for (var q = 0; q < b.length; q++) if (b[q].layerId.toString() === n) { p = b[q]; break; } m = this.parseServiceLayer(n, f, h.id, m, p); d.push(m); } } } return { folders: c, layers: d }; }; netgis.WMC.prototype.parseServiceLayer = function (a, b, c, d, e) { return { id: a, folder: c, title: d.title, active: e ? e.active : !0, query: 1 === d.queryable, transparency: e ? 1 - 0.01 * e.opacity : 0, order: 1e3, type: netgis.LayerTypes.WMS, url: b.getMapUrl, name: d.name, format: e ? e.currentFormat : "image/png", }; }; netgis.WMC.prototype.toConfig_02 = function () { var a = this.data.wmc, b = this.layers.wms.srv, c = this.data.layerList, d = {}, e = a.bbox; e = e.split(","); for (var f = 0; f < e.length; f++) e[f] = Number.parseFloat(e[f]); d.map = { projection: a.crs, bbox: e }; d.attribution || (d.attribution = {}); d.attribution.prefix = d.attribution.prefix ? a.title + ", " + d.attribution.prefix : a.title; a = d.folders = []; e = d.layers = []; var g = []; for (f = 0; f < c.length; f++) { var h = c[f], k = { id: Number.parseInt(h.layerId), type: "layer", order: h.layerPos, active: h.active, opacity: h.opacity, }; g.push(k); } for (f = 0; f < b.length; f++) { c = b[f]; k = { id: Number.parseInt(c.id), type: "service", title: c.title, url: c.getMapUrl, open: "1" === c.isopen }; g.push(k); for (var l = 0; l < c.layer.length; l++) { h = c.layer[l]; var m = this.parseLayer(h, k.id, g); if (h.layer) for (var n = 0; n < h.layer.length; n++) { var p = h.layer[n], q = this.parseLayer(p, m.id, g); if (p.layer) for (var r = 0; r < p.layer.length; r++) { var t = p.layer[r], u = this.parseLayer(t, q.id, g); if (t.layer) for (var v = 0; v < t.layer.length; v++) this.parseLayer(t.layer[v], u.id, g); } } } } console.info("WMC ITEMS:", g); for (f = 0; f < g.length; f++) switch (((k = g[f]), k.type)) { case "service": a.push({ id: k.id, title: k.title, open: k.open }); break; case "layer": (h = {}), e.push(h); } return d; }; netgis.WMC.prototype.parseLayer = function (a, b, c) { for (var d = null, e = 0; e < c.length; e++) if (c[e].id === Number.parseInt(a.id)) { d = c[e]; break; } d || ((d = { id: Number.parseInt(a.id), type: "layer" }), c.push(d)); d.title = a.title; d.name = a.name; d.parent = b; a.getLegendGraphicUrl && a.getLegendGraphicUrlFormat && ((d.legendURL = a.getLegendGraphicUrl), (d.legendFormat = a.getLegendGraphicUrlFormat)); a.legendUrl && ((d.legendURL = window.decodeURIComponent(a.legendUrl)), (d.legendFormat = a.getLegendGraphicUrlFormat)); d.queryable = 1 === a.layerQueryable || 1 === a.queryable ? !0 : !1; if (a.bbox) { a = a.bbox.split(","); for (b = 0; b < a.length; b++) a[b] = parseFloat(a[b]); d.bbox = [a[0], a[1], a[2], a[3]]; } return d; }; netgis.WMC.prototype.toConfig_01 = function () { var a = this.data.wmc, b = this.layers.wms.srv, c = this.data.layerList, d = {}, e = a.bbox; e = e.split(","); for (var f = 0; f < e.length; f++) e[f] = Number.parseFloat(e[f]); d.map = { attribution: a.title + ", GeoPortal RLP", projection: a.crs, bbox: e }; e = []; var g = {}; for (f = 0; f < b.length; f++) { var h = b[f], k = { id: h.id, title: h.title, open: "1" === h.isopen }; e.push(k); for (k = 0; k < h.layer.length; k++) { var l = h.layer[k]; l.getMapUrl || (l.getMapUrl = h.getMapUrl); g[l.id.toString()] = l; if (l.layer) for (var m = 0; m < l.layer.length; m++) { var n = l.layer[m]; n.getMapUrl || (n.getMapUrl = l.getMapUrl); g[n.id.toString()] = n; } } } console.info("WMC FOLDERS:", b, "---\x3e", e); b = []; h = 9999; (this.kmloverlay = a.kmloverlay) && "" !== this.kmloverlay && ((k = { id: "kmloverlay", title: "Meine Geodaten", parent: null }), e.push(k), (l = { id: "kmloverlay", folder: "kmloverlay", title: "KML Overlay", active: !0, order: h, type: netgis.LayerTypes.KML, url: this.kmloverlay, query: !0, }), b.push(l), --h); for (f = c.length - 1; 0 <= f; f--) (a = c[f]), (m = a.layerId.toString()), (l = g[m]) && !l.isRoot && ((k = null !== a.layerParent ? e[a.layerParent].id : null), (l = { id: m, folder: k, title: l.title, active: a.active, query: 1 === a.layerQueryable, transparency: 1 - 0.01 * a.opacity, order: h, type: netgis.LayerTypes.WMS, url: l.getMapUrl, name: l.name, format: a.currentFormat, }), "image/tiff" === l.format && (l.format = "image/png"), b.push(l), --h); d.folders = e; d.layers = b; return d; }; netgis.build = "20251010";