konova/templates/map/client/dist/netgis.min.js
mpeltriaux e7d67560f2 # HOTFIX
* fixes bug on netgis map client where importing a geometry would result in an error message
* THIS IS JUST A WORKAROUND AND HAS TO BE REPLACED BY A PROPER FIX FROM THE DEVS ASAP
2025-10-23 16:12:05 +02:00

8228 lines
323 KiB
JavaScript

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 = "&copy; " + 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 ? "<b>Zeichnungsfl\u00e4che: " + netgis.util.formatArea(a, !0) + "</b>" : 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: "<i class='fas fa-plus'></i>", title: "Zoom +" },
{ id: "zoom_out", icon: "<i class='fas fa-minus'></i>", title: "Zoom -" },
{ id: "geolocation", icon: "<i class='fas fa-crosshairs'></i>", title: "Ger\u00e4testandort" },
{ id: "zoom_home", icon: "<i class='fas fa-home'></i>", title: "Anfangsausdehung" },
{ id: "legend", icon: "<i class='fas fa-bars'></i>", 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: "<i class='fas fa-tools'></i><span>Tools</span>",
items: [
{ id: "view", title: "<i class='netgis-icon fas fa-hand-paper'></i><span>Betrachten</span>" },
{
id: "zoom_box",
title: "<i class='netgis-icon fas fa-expand'></i><span>Zoom-Rechteck</span>",
},
{
id: "measure_line",
title: "<i class='netgis-icon fas fa-ruler'></i><span>Strecke messen</span>",
},
{
id: "measure_area",
title: "<i class='netgis-icon fas fa-ruler-combined'></i><span>Fl\u00e4che messen</span>",
},
{
id: "measure_clear",
title: "<i class='netgis-icon fas fa-trash-alt'></i><span>Messung l\u00f6schen</span>",
},
],
},
{ id: "layertree", title: "<i class='fas fa-layer-group'></i><span>Ebenen</span>" },
],
}),
c.MAP_SCALES &&
0 < c.MAP_SCALES.length &&
a.menu.items.unshift({
title: "<i class='far fa-eye'></i><span>Ansicht</span>",
items: [
{ id: "view_prev", title: "<i class='fas fa-step-backward'></i><span>Vorherige</span>" },
{ id: "view_next", title: "<i class='fas fa-step-forward'></i><span>N\u00e4chste</span>" },
{
id: "scales",
title: "<i class='fas fa-ruler-horizontal'></i><span>Ma\u00dfstab</span><i class='fas fa-caret-right'></i>",
items: [],
},
],
}),
c.URL_USAGE_TERMS &&
0 < c.URL_USAGE_TERMS.length &&
a.menu.items.unshift({
title: "<i class='fas fa-info-circle'></i><span>Info</span>",
items: [
{
url: c.URL_USAGE_TERMS,
title: "<i class='fas fa-external-link-alt'></i><span>Nutzungsbedingungen</span>",
},
],
}));
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: "<i class='fas fa-search'></i><span>Suche</span>" }),
(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 = "<i class='fas fa-cog'></i>"),
this.config &&
this.config.client &&
this.config.client.loading_text &&
(this.loader.innerHTML += "<h2>" + this.config.client.loading_text + "</h2>"),
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,
"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",
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,
"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",
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,
"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",
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,
"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",
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,
"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",
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 = "<i class='fas fa-cog'></i>"),
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,
"<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen<span class='netgis-count'></span></span>",
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,
"<i class='netgis-icon fas fa-cloud-download-alt'></i><span>Dienst laden</span>",
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,
"<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>",
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,
"<i class='netgis-icon fas fa-cloud-download-alt'></i><span>Dienst laden</span>",
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,
"<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>",
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,
"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>"
);
this.addButton(
this.sections.geojson,
"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",
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,
"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>"
);
this.addButton(
this.sections.gml,
"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",
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,
"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>"
);
this.addButton(
this.sections.geopackage,
"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",
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,
"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>"
);
this.addButton(
this.sections.spatialite,
"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",
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,
"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>"
);
this.addButton(
this.sections.shapefile,
"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",
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 = "<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>";
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 ? "<details open='open'>" : "<details>",
"<summary class='netgis-button netgis-noselect netgis-clip-text netgis-color-d netgis-hover-text-a netgis-hover-d'>",
a,
"</summary><div class='netgis-border-d'>",
b,
"</div></details>",
].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("<table>");
for (c = 0; c < d.length; c++) {
f = d[c];
var g = f[0];
f = f[1];
b.push("<tr class='netgis-hover-d'>");
b.push("<th>" + g + "</th>");
b.push("<td>" + f + "</td>");
b.push("</tr>");
}
b.push("</table>");
} else b.push("<i>Keine Eigenschaften vorhanden...</i>");
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 = "<pre>" + a + "</pre>";
}
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 = '<i class="fas fa-mouse-pointer" title="Ebene ist abfragbar"></i>';
a.layertree && a.layertree.query_icon && (n = a.layertree.query_icon);
(!0 === k.query || (k.query_url && "" !== k.query_url)) &&
n &&
"" !== n &&
(m += '<span class="netgis-right">' + n + "</span>");
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: "<i class='netgis-icon fas fa-eye-slash'></i> Transparenz:",
type: "slider",
val: a.transparency ? Math.round(100 * a.transparency) : 0,
});
!0 === c &&
d.push({
title: "<i class='netgis-icon fas fa-times'></i> 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 = '<i class="fas fa-mouse-pointer" title="Ebene ist abfragbar"></i>';
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 += '<span class="netgis-right">' + d + "</span>");
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("<i class='netgis-icon fas fa-bars'></i><span>Legende</span>");
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 ? "<details data-id='" + a + "' open='open'>" : "<details data-id='" + a + "'>",
"<summary class='netgis-button netgis-noselect netgis-clip-text netgis-color-d netgis-hover-text-a netgis-hover-d'>",
b,
"</summary><div class='netgis-border-d'>",
c,
"</div></details>",
].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, "<img src='" + c + "'/>", !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: "<a href='.' target='_self'>NetGIS Client</a>", 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 = "<i class='fas fa-bars'></i>";
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 = "<span>" + b + "</span><i class='netgis-icon fas fa-times'></i>";
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 = "<span>" + b + "</span><i class='netgis-icon fas fa-times'></i>";
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 = "<span></span><i class='fas fa-times'></i>";
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 = "<i class='netgis-icon netgis-anim-spin fas fa-sync-alt'></i>";
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 = "<i class='fas fa-search'></i>";
c.appendChild(a);
this.button = a;
a = document.createElement("button");
a.setAttribute("type", "button");
a.className = "netgis-hide";
a.innerHTML = "<i class='fas fa-times'></i>";
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 = "<i class='fas fa-spinner'></i>";
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("<span>Flurst\u00fccksnummer (Z\u00e4hler/Nenner):</span>");
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 = "<span>Flurst\u00fccke</span> <span></span><i class='netgis-icon fas fa-times'></i>";
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 = "<i class='fas fa-paste'></i>";
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=<Filter><PropertyIsEqualTo><PropertyName>" + (b.filter_property + "</PropertyName>");
netgis.util.request(
c + ("<Literal>" + a + "</Literal></PropertyIsEqualTo></Filter>"),
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 = "<table style='margin: 1mm;'><tr><th>Flur:</th><td>" + (b.properties.fln + "</td>");
c += "<tr><th>Z\u00e4hler:</th><td>" + b.properties.fsn_zae + "</td>";
c += "<tr><th>Nenner:</th><td>" + b.properties.fsn_nen + "</td>";
c += "<tr><th>Fl\u00e4che:</th><td>" + b.properties.flaeche + " qm</td>";
this.popup.setContent(
c +
"</table><button type='button' class='netgis-hover-a'><i class='netgis-icon fas fa-paste' style='margin-right: 3mm;'></i><span>Geometrie \u00fcbernehmen</span></button>"
);
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 =
"<i class='netgis-icon fas fa-clock'></i><span>TimeSlider</span><i class='netgis-icon fas fa-times'></i>";
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 = "<i class='netgis-icon netgis-text-a far fa-calendar'></i><span>" + b + "</span>";
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: "<i class='netgis-icon netgis-text-a fas fa-arrow-circle-right'></i><span>Akzeptieren</span>",
},
],
},
},
};
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 = "<span>Einstellungen</span><i class='netgis-icon fas fa-times'></i>";
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,
"<i class='netgis-icon netgis-text-a fas fa-arrow-circle-right'></i><span>Akzeptieren</span>",
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 =
"<i class='netgis-icon netgis-hide-open fas fa-folder'></i><i class='netgis-icon netgis-show-open fas fa-folder-open'></i><span>" +
c +
"</span>";
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 = "<span>" + c + "</span>";
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 = "<span>" + c + "</span>";
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 = "<i class='fas fa-angle-down'></i>";
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, "<br />");
},
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 = '<i class="netgis-icon fas fa-times"></i>';
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";