diff --git a/templates/map/client/config.json b/templates/map/client/config.json index 1a865ead..ec896af2 100644 --- a/templates/map/client/config.json +++ b/templates/map/client/config.json @@ -58,7 +58,7 @@ [ { "id": "webatlas_farbe", "folder": "bg", "type": "WMS", "order": -1, "title": "WebatlasRP farbig", "attribution": "LVermGeo", "url": "https://maps.service24.rlp.de/gisserver/services/RP/RP_WebAtlasRP/MapServer/WmsServer?", "name": "RP_WebAtlasRP", "active": true}, { "id": "webatlas_grau", "folder": "bg", "type": "WMS", "order": -1, "title": "WebatlasRP grau", "attribution": "LVermGeo", "url": "https://maps.service24.rlp.de/gisserver/services/RP/RP_ETRS_Gt/MapServer/WmsServer?", "name": "0", "active": false }, - { "id": "luftbilder", "folder": "bg", "type": "WMS", "order": -1, "title": "Luftbilder", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/dop_basis.fcgi?", "name": "rp_dop", "active": false }, + { "id": "luftbilder", "folder": "bg", "type": "WMS", "order": -1, "title": "Luftbilder", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/rp_dop20.fcgi?", "name": "rp_dop20", "active": false }, { "id": "basemap_farbe", "folder": "bg", "type": "WMS", "order": -1, "title": "BasemapDE farbig", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_basemapde?", "name": "de_basemapde_web_raster_farbe", "active": false }, { "id": "basemap_grau", "folder": "bg", "type": "WMS", "order": -1, "title": "BasemapDE grau", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_basemapde?", "name": "de_basemapde_web_raster_grau", "active": false }, { "id": "dtk_farbe", "folder": "bg", "type": "WMS", "order": -1, "title": "DTK5 farbig", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/dtk5_rp.fcgi?", "name": "rp_dtk5", "active": false }, diff --git a/templates/map/client/dist/netgis.min.js b/templates/map/client/dist/netgis.min.js index 5c510fd5..b59de851 100644 --- a/templates/map/client/dist/netgis.min.js +++ b/templates/map/client/dist/netgis.min.js @@ -1,559 +1,8227 @@ -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;dZeichnungsfl\u00e4che: "+netgis.util.formatArea(a,!0)+"":null;this.update()};netgis=netgis||{};netgis.Client=function(a,b){b||(b={});a=this.initLegacyConfig(b,a);this.container=this.initContainer(a);this.debug=!1;netgis.util.isString(b)?netgis.util.isJSON(b,!1)?(b=JSON.parse(b),this.init(this.container,b)):(this.showLoader(!0),netgis.util.request(b,this.onConfigResponse.bind(this))):this.init(this.container,b)};netgis.Client.Config={loading_text:"Geoportal Client wird geladen..."};netgis.Client.Output={id:"netgis-storage"}; -netgis.Client.prototype.init=function(a,b){this.config=b;this.initParams(b);this.initConfig(b);this.initElements(a);this.initEvents();this.initModules(b);this.initOutput(b);a=new netgis.ContextMenu;a.attachTo(this.container);this.modules.contextmenu=a;this.popup=new netgis.Popup;this.popup.attachTo(this.container)}; -netgis.Client.prototype.initLegacyConfig=function(a,b){var c=netgis.config;if(!c)return b;c.MAP_CONTAINER_ID&&(b=c.MAP_CONTAINER_ID);a.modules||(a.modules={menu:!0,map:!0,controls:!0,attribution:!0,legend:!0,layertree:!0,info:!0,searchplace:!0,geolocation:!0});a.map||(a.map={});!c.INITIAL_CENTER_X&&0!==c.INITIAL_CENTER_X||!c.INITIAL_CENTER_Y&&0!==c.INITIAL_CENTER_Y||(a.map.center=[c.INITIAL_CENTER_X,c.INITIAL_CENTER_Y]);a.map.scalebar=!0;c.INITIAL_SCALE&&(a.map.scale=c.INITIAL_SCALE);c.MAP_SCALES&& -(a.map.scales=c.MAP_SCALES);c.MAP_EXTENT&&(a.map.extent=c.MAP_EXTENT);c.MAX_HISTORY&&(a.map.max_view_history=c.MAX_HISTORY);a.attribution={prefix:"GeoPortal"};c.MAP_PROJECTIONS&&(a.projections=c.MAP_PROJECTIONS);c.MAP_PROJECTION&&(a.map.projection=c.MAP_PROJECTION);a.controls={buttons:[{id:"zoom_in",icon:"",title:"Zoom +"},{id:"zoom_out",icon:"",title:"Zoom -"},{id:"geolocation",icon:"",title:"Ger\u00e4testandort"}, -{id:"zoom_home",icon:"",title:"Anfangsausdehung"},{id:"legend",icon:"",title:"Legende"}]};a.folders||(a.folders=[{id:"bg",title:"Hintergrund",parent:null,radio:!0}]);a.layers||(a.layers=[]);if(c.URL_BACKGROUND_HYBRID){var d=c.URL_BACKGROUND_HYBRID;-1!==d.indexOf("{x}")||-1!==d.indexOf("{y}")&&-1!==d.indexOf("{-y}")||-1!==d.indexOf("{z}")||(d+="/{z}/{x}/{-y}.jpeg");d={id:"bg_hybrid",active:!0,folder:"bg",order:1,title:"Hybrid",type:"TMS",url:d, -projection:"EPSG:25832",extent:"map",scales:"map",transparency:0};a.layers.push(d)}c.URL_BACKGROUND_AERIAL&&(d=c.URL_BACKGROUND_AERIAL,d={id:"bg_aerial",folder:"bg",order:1,title:"Luftbild",type:"WMS",url:d,query:!1,transparency:0},a.layers.push(d));c.URL_HEIGHT_REQUEST&&(d=c.URL_HEIGHT_REQUEST,-1===d.indexOf("{x}")&&-1===d.indexOf("{y}")&&(d+="&coord={x},{y}"),d={id:"dem_hidden",title:"Digitales H\u00f6henmodell",hidden:!0,active:!0,query:!0,type:"HIDDEN",query_url:d},a.layers.push(d));a.layertree|| -(a.layertree={});a.layertree.title="Ebenen";a.info||(a.info={});a.info.default_format="text/html";c.URL_FEATURE_INFO_PROXY&&0Tools",items:[{id:"view",title:"Betrachten"},{id:"zoom_box",title:"Zoom-Rechteck"},{id:"measure_line", -title:"Strecke messen"},{id:"measure_area",title:"Fl\u00e4che messen"},{id:"measure_clear",title:"Messung l\u00f6schen"}]},{id:"layertree",title:"Ebenen"}]},c.MAP_SCALES&&0Ansicht",items:[{id:"view_prev", -title:"Vorherige"},{id:"view_next",title:"N\u00e4chste"},{id:"scales",title:"Ma\u00dfstab",items:[]}]}),c.URL_USAGE_TERMS&&0Info",items:[{url:c.URL_USAGE_TERMS,title:"Nutzungsbedingungen"}]})); -c.URL_SEARCH_REQUEST&&(d=c.URL_SEARCH_REQUEST,-1===d.indexOf("{query}")&&(d+="?outputFormat=json&resultTarget=web&searchEPSG=4326&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={query}&name_startsWith={query}"),c.URL_SEARCH_PROXY&&0Suche"}),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"),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(-1c.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;bExportieren",this.onExportClickPDF.bind(this)); -this.sections.jpeg=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.jpeg,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.jpeg,"H\u00f6he (Pixel):",900,0);this.addCheckbox(this.sections.jpeg,"Querformat",!0);this.addButton(this.sections.jpeg,"Exportieren",this.onExportClickJPEG.bind(this));this.sections.png=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.png,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.png, -"H\u00f6he (Pixel):",900,0);this.addCheckbox(this.sections.png,"Querformat",!0);this.addButton(this.sections.png,"Exportieren",this.onExportClickPNG.bind(this));this.sections.gif=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.gif,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.gif,"H\u00f6he (Pixel):",900,0);this.addCheckbox(this.sections.gif,"Querformat",!0);this.addButton(this.sections.gif,"Exportieren", -this.onExportClickGIF.bind(this));this.sections.geojson=this.tabs.getContentSection(a);this.addCheckbox(this.sections.geojson,"Nicht-Editierbare Geometrien einbeziehen",!1);this.addButton(this.sections.geojson,"Exportieren",this.onExportClickGeoJSON.bind(this))}; -netgis.Export.prototype.attachTo=function(a){a.appendChild(this.modal.container);a.addEventListener(netgis.Events.EXPORT_SHOW,this.onExportShow.bind(this));a.addEventListener(netgis.Events.EXPORT_END,this.onExportEnd.bind(this))};netgis.Export.prototype.addText=function(a,b){var c=document.createElement("div");c.innerHTML=b;a.appendChild(c);return c}; -netgis.Export.prototype.addButton=function(a,b,c){var d=document.createElement("button");d.className="netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";d.setAttribute("type","button");d.innerHTML=b;c&&(d.onclick=c);a.appendChild(d);return d}; -netgis.Export.prototype.addInputText=function(a,b,c){var d=document.createElement("label");d.innerHTML=b;var e=document.createElement("input");e.setAttribute("type","text");d.appendChild(e);if(c){b="list-"+netgis.util.stringToID(b);var f=document.createElement("datalist");f.setAttribute("id",b);for(var g=0;gHinzuf\u00fcgen",this.onGeoportalSubmit.bind(this)));this.sections.wms=this.tabs.getContentSection(b);b+=1;this.addInputText(this.sections.wms,"WMS-URL:",this.config["import"].wms_options);this.addButton(this.sections.wms,"Dienst laden", -this.onWMSLoadClick.bind(this));this.addInputText(this.sections.wms,"Bezeichnung:");this.addInputSelect(this.sections.wms,"Ebene:");this.addInputSelect(this.sections.wms,"Format:");this.addButton(this.sections.wms,"Hinzuf\u00fcgen",this.onWMSAcceptClick.bind(this));this.showDetailsWMS(!1);this.sections.wfs=this.tabs.getContentSection(b);b+=1;this.addInputText(this.sections.wfs,"WFS-URL:",this.config["import"].wfs_options);this.addButton(this.sections.wfs, -"Dienst laden",this.onWFSLoadClick.bind(this));this.addInputText(this.sections.wfs,"Bezeichnung:");this.addInputSelect(this.sections.wfs,"Ebene:");this.addInputSelect(this.sections.wfs,"Format:");this.addButton(this.sections.wfs,"Hinzuf\u00fcgen",this.onWFSAcceptClick.bind(this));this.showDetailsWFS(!1);this.sections.geojson=this.tabs.getContentSection(b);b+=1;this.addInputFile(this.sections.geojson, -"GeoJSON-Datei:",".geojson,.json");this.addText(this.sections.geojson,"

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
");this.addButton(this.sections.geojson,"Datei laden",this.onGeoJSONAcceptClick.bind(this));this.sections.gml=this.tabs.getContentSection(b);b+=1;this.addInputFile(this.sections.gml,"GML-Datei:",".gml,.xml");this.addText(this.sections.gml, -"

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
");this.addButton(this.sections.gml,"Datei laden",this.onGMLAcceptClick.bind(this));this.sections.geopackage=this.tabs.getContentSection(b);b+=1;this.addInputFile(this.sections.geopackage,"GeoPackage-Datei:",".gpkg");this.addText(this.sections.geopackage,"

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
"); -this.addButton(this.sections.geopackage,"Datei laden",this.onGeoPackageAcceptClick.bind(this));this.sections.spatialite=this.tabs.getContentSection(b);b+=1;this.addInputFile(this.sections.spatialite,"Spatialite-Datei:",".sqlite");this.addText(this.sections.spatialite,"

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
");this.addButton(this.sections.spatialite, -"Datei laden",this.onSpatialiteAcceptClick.bind(this));this.sections.shapefile=this.tabs.getContentSection(b);this.addInputFile(this.sections.shapefile,"Shapefile-Zip-Datei:",".zip");this.addText(this.sections.shapefile,"

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
");this.addButton(this.sections.shapefile,"Datei laden", -this.onShapefileAcceptClick.bind(this))}; -netgis.Import.prototype.initPreview=function(){this.preview=new netgis.Modal("Vorschau");this.preview.attachTo(this.modal.content);this.previewMapContainer=document.createElement("div");this.previewMapContainer.className="netgis-preview-map";this.preview.content.appendChild(this.previewMapContainer);if(ol){var a=this.config.map;a={projection:a.projection,center:a.centerLonLat?ol.proj.fromLonLat(a.centerLonLat):a.center,zoom:a.zoom};this.previewMap=new ol.Map({target:this.previewMapContainer,view:new ol.View(a), -pixelRatio:1,moveTolerance:3,controls:[]});this.previewMap.getView().padding=[10,10,10,10];this.previewMap.addLayer(new ol.layer.Tile({source:new ol.source.OSM}))}this.previewTree=new netgis.Tree;this.previewTree.container.classList.add("netgis-preview-tree");this.previewTree.attachTo(this.preview.content);this.previewTree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE,this.onPreviewTreeItemChange.bind(this));this.previewSubmit=document.createElement("button");this.previewSubmit.setAttribute("type", -"button");this.previewSubmit.className="netgis-import-submit netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";this.previewSubmit.innerHTML="Hinzuf\u00fcgen";this.previewSubmit.addEventListener("click",this.onPreviewSubmitClick.bind(this));this.preview.content.appendChild(this.previewSubmit)}; -netgis.Import.prototype.attachTo=function(a){a.appendChild(this.modal.container);a.addEventListener(netgis.Events.IMPORT_LAYER_SHOW,this.onImportShow.bind(this));a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES,this.onImportPreviewFeatures.bind(this))};netgis.Import.prototype.addText=function(a,b){var c=document.createElement("div");c.innerHTML=b;a.appendChild(c);return c}; -netgis.Import.prototype.addButton=function(a,b,c){var d=document.createElement("button");d.className="netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";d.setAttribute("type","button");d.innerHTML=b;c&&(d.onclick=c);a.appendChild(d);return d}; -netgis.Import.prototype.addInputText=function(a,b,c){var d=document.createElement("label");d.innerHTML=b;var e=document.createElement("input");e.setAttribute("type","text");d.appendChild(e);if(c){b="list-"+netgis.util.stringToID(b);var f=document.createElement("datalist");f.setAttribute("id",b);for(var g=0;ga.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;db.length)){var c=b.indexOf("?");a=-1":"
","",a,"
",b,"
"].join(""))};netgis.Info.prototype.onClientContextResponse=function(a){this.initConfig(a.detail.context.config)};netgis.Info.prototype.onClientSetMode=function(a){this.popup.hide()}; -netgis.Info.prototype.onMapLayerToggle=function(a){var b=a.detail;a=b.id;if(b.on){b=this.config.layers;for(var c=null,d=0;d");for(c=0;c");b.push(""+g+"");b.push(""+f+"");b.push("")}b.push("")}else b.push("Keine Eigenschaften vorhanden...");b=b.join("");this.addSection(a,b,!1);!this.popup.isVisible()&&this.popup.show()}}; -netgis.Info.prototype.onLayerResponseWMS=function(a,b,c){b=b.title;if(c=c.getResponseHeader("Content-Type"))switch(c.split(";")[0]){case "text/plain":a="
"+a+"
"}this.popup.hideLoader();this.addSection(b,a,!1)};netgis=netgis||{};netgis.LayerID={EDITABLE:"editable-layer",NON_EDITABLE:"non-editable-layer"};netgis=netgis||{};netgis.LayerTree=function(a){this.config=a;this.importFolder=null;this.initElements(a);this.initFolders();this.initConfig(a)};netgis.LayerTree.Config={open:!1,title:"Layers",buttons:[]};netgis.LayerTree.Folders=[]; -netgis.LayerTree.prototype.initElements=function(a){a=a.layertree;this.panel=new netgis.Panel("Layers");this.tree=new netgis.Tree(a.draggable);this.tree.attachTo(this.panel.content);this.tree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE,this.onTreeItemChange.bind(this));this.tree.container.addEventListener(netgis.Events.TREE_ITEM_SLIDER_CHANGE,this.onTreeItemSliderChange.bind(this));this.tree.container.addEventListener(netgis.Events.TREE_ITEM_ORDER_CHANGE,this.onTreeItemOrderChange.bind(this)); -!0===a.draggable&&(this.panel.content.addEventListener("dragover",this.onDragOver.bind(this)),this.panel.content.addEventListener("drop",this.onDragDrop.bind(this)))}; -netgis.LayerTree.prototype.initFolders=function(){this.editFolder=this.tree.addFolder(null,"edit-folder","Zeichnung",!0,!0);this.tree.addCheckbox(this.editFolder,netgis.LayerID.EDITABLE,"Editierbar");this.tree.setItemChecked(netgis.LayerID.EDITABLE,!0);this.tree.addCheckbox(this.editFolder,netgis.LayerID.NON_EDITABLE,"Nicht-Editierbar");this.tree.setItemChecked(netgis.LayerID.NON_EDITABLE,!0);this.editFolder.classList.add("netgis-hide")}; -netgis.LayerTree.prototype.initConfig=function(a,b){var c=a.layertree;c&&c.title&&this.panel.setTitle(c.title);var d=a.folders,e={};if(d){for(var f=0;f';a.layertree&&a.layertree.query_icon&&(n=a.layertree.query_icon);(!0===k.query||k.query_url&&""!==k.query_url)&&n&&""!==n&&(m+=''+n+"");h=!0===l?this.tree.addRadioButton(g,h,m,k.active,this.createDefaultDetails(k,!0,!1)):this.tree.addCheckbox(g,h,m,k.active,!1,this.createDefaultDetails(k,!0,!0)); -h.addEventListener("contextmenu",this.onTreeItemMenu.bind(this));!0===k.hidden&&h.classList.add("netgis-hide")}this.tree.updateFolderChecks();if(c&&c.buttons)for(a=a.layertree.buttons,f=0;f Transparenz:",type:"slider",val:a.transparency?Math.round(100*a.transparency):0});!0===c&&d.push({title:" Entfernen",type:"button",callback:this.onTreeItemDeleteClick.bind(this)});return d}; -netgis.LayerTree.prototype.onTreeItemChange=function(a){var b=a.detail;netgis.util.invoke(a.target,netgis.Events.MAP_LAYER_TOGGLE,{id:b.id,on:b.checked})};netgis.LayerTree.prototype.onClientContextResponse=function(a){this.initConfig(a.detail.context.config,!0)};netgis.LayerTree.prototype.onLayerTreeToggle=function(a){this.panel.toggle()};netgis.LayerTree.prototype.onTreeButtonClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.Client.handleCommand(a,b)}; -netgis.LayerTree.prototype.onMapLayerCreate=function(a){this.addLayerItem(a.detail,null)};netgis.LayerTree.prototype.onMapLayerToggle=function(a){a=a.detail;this.tree.setItemChecked(a.id,a.on,!0);this.tree.updateFolderChecks()};netgis.LayerTree.prototype.onImportLayerAccept=function(a){a=a.detail;this.importFolder||(this.importFolder=this.tree.addFolder(null,"_import","Import",!0,!1));this.addLayerItem(a,this.importFolder);this.tree.updateFolderChecks()}; -netgis.LayerTree.prototype.addLayerItem=function(a,b){var c=a.title,d='';config.layertree&&config.layertree.query_icon&&(d=config.layertree.query_icon);(!0===a.query||a.query_url&&""!==a.query_url)&&d&&""!==d&&(c+=''+d+"");this.tree.addCheckbox(b,a.id,c,!0,!0,this.createDefaultDetails(a,!0,!0)).addEventListener("contextmenu",this.onTreeItemMenu.bind(this))}; -netgis.LayerTree.prototype.onImportGeoportalSubmit=function(a){a=a.detail;var b=a.folder.id,c=this.tree.getFolder(b);c||(c=this.tree.addFolder(null,b,a.folder.title,!0,!1));var d=a.layer.id;b={id:d,folder:b,title:a.layer.title,active:!0,type:netgis.LayerTypes.WMS,url:a.layer.url,name:a.layer.name,order:1E4,transparency:0};this.config.layers.push(b);this.tree.addCheckbox(c,d,a.layer.title,!1,!1,this.createDefaultDetails(b,!0,!0));this.tree.setItemChecked(d,!0,!1)}; -netgis.LayerTree.prototype.onTreeItemMenu=function(a){a.preventDefault();return!1};netgis.LayerTree.prototype.onContextMenuSliderChange=function(a){var b=a.detail;a=.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;dLegende");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":"
","",b,"
",c,"
"].join("")+this.panel.content.innerHTML}; -netgis.Legend.prototype.addLayerLegend=function(a){for(var b=null,c=this.config.layers,d=0;d",!0)}}; -netgis.Legend.prototype.removeLayerLegend=function(a){for(var b=this.panel.content.getElementsByTagName("details"),c=0;c=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=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;cg;++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;ca.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;cc.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;da.length)){for(var b=a[0].getGeometry().getExtent(),c=1;cthis.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(0n.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;ea[0].length)for(var d=0;dNetGIS Client",items:[],compact:!0}; -netgis.Menu.prototype.initElements=function(){this.container=document.createElement("nav");this.container.className="netgis-menu netgis-noselect netgis-color-a netgis-gradient-a netgis-shadow-large";this.toggle=document.createElement("button");this.toggle.setAttribute("type","button");this.toggle.addEventListener("click",this.onToggleClick.bind(this));this.toggle.className="netgis-menu-toggle netgis-hover-c";this.toggle.innerHTML="";this.container.appendChild(this.toggle)}; -netgis.Menu.prototype.initConfig=function(a){var b=a.menu;if(b&&(b.header&&this.addHeader(b.header),!0===b.compact&&this.container.classList.add("netgis-compact"),b.items)){b=b.items;for(var c=0;c";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";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;bc.width-d.width&&(a=c.width-d.width);aa.x?this.content.style.left= --a.x+"px":a.x+a.width>c.width&&(this.content.style.left=-(a.x+a.width-c.width)+"px")};netgis.Popup.prototype.setHeader=function(a){this.closer.getElementsByTagName("span")[0].innerHTML=a};netgis.Popup.prototype.setContent=function(a){this.wrapper.innerHTML=a};netgis.Popup.prototype.clearContent=function(){this.wrapper.innerHTML=""};netgis.Popup.prototype.addContent=function(a){this.wrapper.innerHTML+=a};netgis.Popup.prototype.onDocumentPointerDown=function(a){}; -netgis.Popup.prototype.onPointerDown=function(a){a.stopPropagation()};netgis.Popup.prototype.onCloserClick=function(a){this.hide()};netgis=netgis||{};netgis.Search=function(a){this.debounce=400;this.initElements(a);this.initEvents()}; -netgis.Search.prototype.initElements=function(a){var b=document.createElement("div");b.className="netgis-search";this.container=b;var c=document.createElement("label");b.appendChild(c);this.label=c;var d=document.createElement("input");d.className="netgis-round netgis-shadow";d.setAttribute("type","text");d.setAttribute("placeholder",a);c.appendChild(d);this.input=d;a=document.createElement("button");a.setAttribute("type","button");a.innerHTML="";c.appendChild(a);this.button= -a;a=document.createElement("button");a.setAttribute("type","button");a.className="netgis-hide";a.innerHTML="";c.appendChild(a);this.closer=a;c=document.createElement("ul");b.appendChild(c);this.results=c}; -netgis.Search.prototype.initEvents=function(){this.input.addEventListener("change",this.onInputChange.bind(this));this.input.addEventListener("keydown",this.onInputKeyDown.bind(this));this.input.addEventListener("keyup",this.onInputKeyUp.bind(this));this.button.addEventListener("click",this.onButtonClick.bind(this));this.closer.addEventListener("click",this.onCloserClick.bind(this))};netgis.Search.prototype.attachTo=function(a){a.appendChild(this.container)};netgis.Search.prototype.show=function(){this.container.classList.remove("netgis-hide")}; -netgis.Search.prototype.hide=function(){this.container.classList.add("netgis-hide")};netgis.Search.prototype.toggle=function(){this.container.classList.toggle("netgis-hide")};netgis.Search.prototype.isVisible=function(){return!this.container.classList.contains("netgis-hide")};netgis.Search.prototype.minimize=function(){this.container.classList.remove("netgis-color-e","netgis-shadow");this.input.classList.add("netgis-shadow")}; -netgis.Search.prototype.maximize=function(){this.container.classList.add("netgis-color-e","netgis-shadow");this.input.classList.remove("netgis-shadow")};netgis.Search.prototype.focus=function(){this.input.focus()};netgis.Search.prototype.setTitle=function(a){this.input.setAttribute("placeholder",a)}; -netgis.Search.prototype.addResult=function(a,b){var c=document.createElement("li"),d=document.createElement("button");d.className="netgis-button netgis-clip-text netgis-color-e netgis-hover-a";d.innerHTML=a;d.setAttribute("type","button");d.setAttribute("title",d.innerText);d.setAttribute("data-result",b);d.addEventListener("click",this.onResultClick.bind(this));c.appendChild(d);0===this.results.childNodes.length&&this.showClearButton(!0);this.results.appendChild(c);this.maximize();return c}; -netgis.Search.prototype.clearResults=function(){this.results.innerHTML="";this.minimize();netgis.util.invoke(this.container,netgis.Events.SEARCH_CLEAR,null)};netgis.Search.prototype.clearAll=function(){this.clearResults();this.lastQuery=null;this.input.value="";this.showClearButton(!1)};netgis.Search.prototype.requestSearch=function(a){this.lastQuery&&this.lastQuery===a||(this.lastQuery=a,netgis.util.invoke(this.container,netgis.Events.SEARCH_CHANGE,{query:a}))}; -netgis.Search.prototype.showClearButton=function(a){!1===a?(this.button.classList.remove("netgis-hide"),this.closer.classList.add("netgis-hide")):(this.button.classList.add("netgis-hide"),this.closer.classList.remove("netgis-hide"))};netgis.Search.prototype.onInputKeyDown=function(a){if(13===a.keyCode)return a.preventDefault(),!1}; -netgis.Search.prototype.onInputKeyUp=function(a){switch(a.keyCode){case 13:a=this.results.getElementsByTagName("button");0Flurst\u00fccksnummer (Z\u00e4hler/Nenner):");this.parcelInputA=b.children[1];this.parcelInputA.style.width="48%";this.parcelInputB=this.parcelInputA.cloneNode(!0); -this.parcelInputB.style.marginLeft="4%";b.appendChild(this.parcelInputB);a.appendChild(b);b=document.createElement("button");b.setAttribute("type","button");b.addEventListener("click",this.onParcelSearchClick.bind(this));b.className="netgis-color-a netgis-hover-c";b.innerHTML="Flurst\u00fccke suchen";b.style.marginTop="4mm";a.appendChild(b);b=document.createElement("section");b.className="netgis-hide";this.bottom=b;this.container.appendChild(b);var c=document.createElement("button");c.className="netgis-button netgis-clip-text netgis-color-c netgis-gradient-a"; -c.innerHTML="Flurst\u00fccke ";c.setAttribute("type","button");c.addEventListener("click",this.onBottomHeaderClick.bind(this));b.appendChild(c);this.parcelCount=c.getElementsByTagName("span")[1];this.parcelInfo=document.createElement("p");this.parcelTable=this.createTable(["Flur","Z\u00e4hler","Nenner","FKZ","Fl\u00e4che (qm)"]);this.parcelTable.classList.add("netgis-hide");this.parcelTable.style.position="absolute";this.parcelTable.style.width= -"100%";this.parcelTable.style.top="12mm";this.parcelTable.style.bottom="0mm";this.parcelTable.style.margin="0mm";this.parcelTable.style.overflow="auto";b.appendChild(this.parcelTable);this.parcelList=this.parcelTable.getElementsByTagName("tbody")[0];this.parcelReset=document.createElement("button");this.parcelReset.setAttribute("type","button");this.parcelReset.addEventListener("click",this.onResetClick.bind(this));this.parcelReset.className="netgis-color-a netgis-hover-c";this.parcelReset.innerHTML= -"Zur\u00fccksetzen";this.parcelReset.style.marginTop="4mm";a.appendChild(this.parcelReset)};netgis.SearchParcel.prototype.initEvents=function(){this.resizeObserver=(new ResizeObserver(this.onTopResize.bind(this))).observe(this.top)}; -netgis.SearchParcel.prototype.initConfig=function(a){this.districtsLayer=a.searchparcel.districts_service;this.districtsLayer.id=this.districtsLayerID;this.districtsLayer.style=a.styles.parcel;this.districtsLayer.order=99999;a.layers.push(this.districtsLayer);this.fieldsLayer={id:this.fieldsLayerID,type:netgis.LayerTypes.GEOJSON,style:a.styles.parcel,order:99999,data:null};a.layers.push(this.fieldsLayer);this.parcelsLayer={id:this.parcelsLayerID,type:netgis.LayerTypes.WKT,style:a.styles.parcel,order:99999, -data:null};a.layers.push(this.parcelsLayer);if(!0===a.searchparcel.open){var b=this;window.setTimeout(function(){b.panel.show()},100)}}; -netgis.SearchParcel.prototype.attachTo=function(a){this.panel.attachTo(a);this.popup.attachTo(a);a.addEventListener(netgis.Events.CLIENT_SET_MODE,this.onClientSetMode.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE,this.onSearchParcelToggle.bind(this));a.addEventListener(netgis.Events.MAP_FEATURE_ENTER,this.onMapFeatureEnter.bind(this));a.addEventListener(netgis.Events.MAP_FEATURE_CLICK,this.onMapFeatureClick.bind(this));a.addEventListener(netgis.Events.MAP_FEATURE_LEAVE,this.onMapFeatureLeave.bind(this)); -a.addEventListener(netgis.Events.MAP_COPY_FEATURE_TO_EDIT,this.onMapCopyFeatureToEdit.bind(this))};netgis.SearchParcel.prototype.createInput=function(a){var b=document.createElement("label");b.className="netgis-hover-text-primary";b.innerHTML=a;a=document.createElement("input");a.setAttribute("type","text");b.appendChild(a);return b}; -netgis.SearchParcel.prototype.createNameItem=function(a){var b=document.createElement("li"),c=document.createElement("button");c.setAttribute("type","button");c.addEventListener("click",this.onNameItemClick.bind(this));c.className="netgis-color-e netgis-hover-a netgis-text-a netgis-hover-text-e";c.innerHTML=a;b.appendChild(c);return b}; -netgis.SearchParcel.prototype.createTable=function(a){var b=document.createElement("div");b.className="netgis-table-wrapper";var c=document.createElement("table");b.appendChild(c);var d=document.createElement("thead");c.appendChild(d);var e=document.createElement("tr");e.className="netgis-color-d netgis-shadow";d.appendChild(e);d=document.createElement("th");e.appendChild(d);var f=document.createElement("input");f.setAttribute("type","checkbox");f.addEventListener("change",this.onTableFilterChange.bind(this)); -f.setAttribute("title","Nur markierte Parzellen anzeigen");d.appendChild(f);this.tableFilter=f;for(f=0;f"+(b.filter_property+"");netgis.util.request(c+(""+a+""),this.onFieldsResponse.bind(this))}; -netgis.SearchParcel.prototype.onFieldsResponse=function(a){a=JSON.parse(a);this.showDistricts(!1);this.showFields(!0,a);this.showParcels(!1)};netgis.SearchParcel.prototype.selectFirstName=function(){var a=this.nameList.getElementsByTagName("button");0");c+="Z\u00e4hler:"+b.properties.fsn_zae+"";c+="Nenner:"+b.properties.fsn_nen+"";c+="Fl\u00e4che:"+b.properties.flaeche+" qm";this.popup.setContent(c+"");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;bb?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=a;a++);var b=this;window.setTimeout(function(){b.container.scrollLeft=0},1)};netgis.TimeSlider.Config={}; -netgis.TimeSlider.prototype.initElements=function(){this.container=document.createElement("section");this.container.className="netgis-timeslider netgis-footer netgis-noselect netgis-color-e netgis-hide";document.addEventListener("pointermove",this.onPointerMove.bind(this));document.addEventListener("pointerup",this.onPointerUp.bind(this));this.header=document.createElement("button");this.header.className="netgis-header netgis-button netgis-clip-text netgis-color-a netgis-hover-c netgis-shadow";this.header.innerHTML= -"TimeSlider";this.header.setAttribute("type","button");this.header.addEventListener("click",this.onHeaderClick.bind(this));this.container.appendChild(this.header);this.wrapper=document.createElement("div");this.wrapper.className="netgis-wrapper";this.wrapper.addEventListener("pointerdown",this.onPointerDown.bind(this));this.container.appendChild(this.wrapper);this.table=document.createElement("table");this.wrapper.appendChild(this.table); -this.top=document.createElement("tr");this.table.appendChild(this.top);this.bottom=document.createElement("tr")};netgis.TimeSlider.prototype.attachTo=function(a){a.appendChild(this.container);a.addEventListener(netgis.Events.TIMESLIDER_SHOW,this.onTimeSliderShow.bind(this));a.addEventListener(netgis.Events.TIMESLIDER_HIDE,this.onTimeSliderHide.bind(this))}; -netgis.TimeSlider.prototype.setVisible=function(a){a?(this.container.classList.remove("netgis-hide"),this.container.parentNode.classList.add("netgis-footer")):(this.container.classList.add("netgis-hide"),this.container.parentNode.classList.remove("netgis-footer"))};netgis.TimeSlider.prototype.setTitle=function(a){this.header.getElementsByTagName("span")[0].innerHTML=a};netgis.TimeSlider.prototype.clearTimeSteps=function(){this.top.innerHTML=""}; -netgis.TimeSlider.prototype.addTimeStep=function(a,b){var c=document.createElement("td");c.setAttribute("data-id",a);a=document.createElement("button");a.className="netgis-button netgis-color-e netgis-hover-d";a.innerHTML=""+b+"";a.setAttribute("type","button");a.addEventListener("click",this.onTimeStepClick.bind(this));c.appendChild(a);this.top.appendChild(c)}; -netgis.TimeSlider.prototype.addTimeStep_01=function(a,b){a=document.createElement("td");var c=document.createElement("td");this.insertTop?a.innerHTML=b:c.innerHTML=b;this.top.appendChild(a);this.bottom.appendChild(c);this.insertTop=!this.insertTop}; -netgis.TimeSlider.prototype.setActiveTimeStep=function(a){var b=this.top.getElementsByTagName("td"),c=b[a],d=c.getAttribute("data-id");console.info("Set Active Step:",a,d);for(var e=0;ea.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;eAkzeptieren"}]}}}; -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;cAkzeptieren", -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.appendChild(h);!0=== -this.draggable&&(netgis.util.isDefined(f)&&!0!==f||this.setItemDraggable(h));c=document.createElement("label");h.appendChild(c);f=document.createElement("input");f.setAttribute("type","checkbox");f.onchange=this.onFolderChange.bind(this);c.appendChild(f);!0===e&&g.classList.add("netgis-nocheck");e=document.createElement("ul");b.appendChild(e);a=a?a.getElementsByTagName("ul")[0]:this.container;d?a.insertBefore(g,a.firstChild):a.appendChild(g);return g}; -netgis.Tree.prototype.addCheckbox=function(a,b,c,d,e,f){var g=document.createElement("li");g.className="netgis-item";!0===this.draggable&&this.setItemDraggable(g);var h=document.createElement("label");h.className="netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";h.innerHTML=""+c+"";g.appendChild(h);c=document.createElement("span");c.className="netgis-wrapper";h.insertBefore(c,h.firstChild);h=document.createElement("input");h.setAttribute("type","checkbox"); -h.setAttribute("data-id",b);d&&(h.checked=d);h.onchange=this.onItemChange.bind(this);c.appendChild(h);f&&this.addItemDetails(g,b,f);a=a?a.getElementsByTagName("ul")[0]:this.container;e?a.insertBefore(g,a.firstChild):a.appendChild(g);return g}; -netgis.Tree.prototype.addRadioButton=function(a,b,c,d,e){var f=document.createElement("li");f.className="netgis-item";var g=document.createElement("label");g.className="netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";g.innerHTML=""+c+"";f.appendChild(g);c=document.createElement("span");c.className="netgis-wrapper";g.insertBefore(c,g.firstChild);g=a?"radio-"+a.getAttribute("data-id"):"radio-noname";var h=document.createElement("input");h.setAttribute("type", -"radio");h.setAttribute("name",g);h.setAttribute("value","radio-"+b);h.setAttribute("data-id",b);d&&(h.checked=d);h.onchange=this.onItemChange.bind(this);c.appendChild(h);e&&this.addItemDetails(f,b,e);a?a.getElementsByTagName("ul")[0].appendChild(f):this.container.appendChild(f);return f}; -netgis.Tree.prototype.addButton=function(a,b,c,d){var e=document.createElement("li"),f=document.createElement("button");f.innerHTML=c;f.className="netgis-button netgis-color-e netgis-hover-d netgis-clip-text";f.setAttribute("type","button");e.appendChild(f);b&&f.setAttribute("data-id",b);d&&(f.onclick=d);f.addEventListener("click",this.onButtonClick.bind(this));a?a.getElementsByTagName("ul")[0].appendChild(e):this.container.appendChild(e);return e}; -netgis.Tree.prototype.addSpace=function(a){var b=document.createElement("li");b.className="netgis-space";a?a.getElementsByTagName("ul")[0].appendChild(b):this.container.appendChild(b);return b}; -netgis.Tree.prototype.addItemDetails=function(a,b,c){var d=document.createElement("details");d.className="netgis-noselect";var e=document.createElement("summary");e.className="netgis-clickable netgis-hover-d";e.innerHTML="";d.appendChild(e);e=document.createElement("div");d.appendChild(e);for(var f=0;fa.getBoundingClientRect().width:600>document.body.getBoundingClientRect().width},clone:function(a){return JSON.parse(JSON.stringify(a))},stringToID:function(a,b){b||(b="-");a=a.trim();a=a.toLowerCase();a=this.replace(a," ",b);a=this.replace(a,"\n",b);a=this.replace(a,"\t",b);a=this.replace(a,"\\.",b);a=this.replace(a,"\\,",b);a=this.replace(a,"\\!",b);a=this.replace(a,"\\?",b);a= -this.replace(a,":",b);a=this.replace(a,";",b);a=this.replace(a,'"',b);a=this.replace(a,"'",b);a=this.replace(a,"\\\u00a7",b);a=this.replace(a,"\\$",b);a=this.replace(a,"\\%",b);a=this.replace(a,"\\&",b);a=this.replace(a,"\\/",b);a=this.replace(a,"\\\\",b);a=this.replace(a,"\\(",b);a=this.replace(a,"\\)",b);a=this.replace(a,"\\{",b);a=this.replace(a,"\\}",b);a=this.replace(a,"\\[",b);a=this.replace(a,"\\]",b);a=this.replace(a,"=",b);a=this.replace(a,"\\+",b);a=this.replace(a,"\\*",b);a=this.replace(a, -"\\~",b);a=this.replace(a,"\\^",b);a=this.replace(a,"\\\u00b0",b);a=this.replace(a,"\u00b2",b);a=this.replace(a,"\u00b3",b);a=this.replace(a,"\\#",b);a=this.replace(a,"\\<",b);a=this.replace(a,"\\>",b);a=this.replace(a,"\\|",b);a=this.replace(a,"\\@",b);a=this.replace(a,"\u20ac",b);a=this.replace(a,"\u00b5",b);a=this.trim(a,b);a=this.replace(a,"\u00e4","ae");a=this.replace(a,"\u00f6","oe");a=this.replace(a,"\u00fc","ue");a=this.replace(a,"\u00df","ss");a=this.replace(a,"\u00e1","a");a=this.replace(a, -"\u00e0","a");a=this.replace(a,"\u00e2","a");a=this.replace(a,"\u00e9","e");a=this.replace(a,"\u00e8","e");a=this.replace(a,"\u00ea","e");a=this.replace(a,"\u00ed","i");a=this.replace(a,"\u00ec","i");a=this.replace(a,"\u00ee","i");a=this.replace(a,"\u00f3","o");a=this.replace(a,"\u00f2","o");a=this.replace(a,"\u00f4","o");a=this.replace(a,"\u00fa","u");a=this.replace(a,"\u00f9","u");return a=this.replace(a,"\u00fb","u")},replace:function(a,b,e){return a.replace(new RegExp(b,"g"),e)},trim:function(a, -b){a=a.replace(new RegExp("^"+b+"+"),"");return a=a.replace(new RegExp(b+"+$"),"")},foreach:a,template:function(b,d){a(d,function(a,c){b=b.replace(new RegExp("{"+a+"}","g"),c)});return b},newlines:function(a){return a.replace(/\n/g,"
")},create:function(a){var b=document.createElement("tbody");b.innerHTML=a;return b.children[0]},insideElement:function(a,b,e){a=a.getBoundingClientRect();return ba.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.lengthc&&(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(e||1E5))?d?Math.round(a/1E6*1E3)/1E3:Math.round(a/1E6):d?Math.round(100*a)/100:Math.round(a);0===a&&(e=!1);a=a.toLocaleString(b());return a+(e?" km\u00b2":" m\u00b2")},hexToRGB:function(a){"#"===a.charAt(0)&&(a=a.substr(1));a=Number.parseInt(a,16);return[a>>16&255,a>>8&255,a&255]},invoke:function(a,b,e){a.dispatchEvent(new CustomEvent(b,{bubbles:!0,detail:e}))},handler:function(a,b){return function(c){b||(b=c);netgis.util.invoke(this, -a,b)}}}}();netgis=netgis||{};netgis.Window=function(a){this.resizing=this.dragging=!1;this.py=this.px=0;this.initElements(a);this.initEvents();var b=this;window.setTimeout(function(){var a=b.container.getBoundingClientRect();b.container.style.right="auto";b.container.style.bottom="auto";b.container.style.left=a.left+"px";b.container.style.top=a.top+"px"},100)}; -netgis.Window.prototype.initElements=function(a){this.container=document.createElement("section");this.container.className="netgis-window netgis-shadow";this.header=document.createElement("button");this.header.setAttribute("type","button");this.header.className="netgis-mover netgis-button netgis-clip-text netgis-color-c netgis-gradient-a netgis-shadow";this.header.innerHTML=a;this.container.appendChild(this.header);this.closer=document.createElement("button");this.closer.className="netgis-closer netgis-button netgis-text-e"; -this.closer.innerHTML='';this.closer.setAttribute("type","button");this.container.appendChild(this.closer);this.content=document.createElement("div");this.content.className="netgis-content";this.container.appendChild(this.content)}; -netgis.Window.prototype.initEvents=function(){this.closer.addEventListener("click",this.onCloserClick.bind(this));this.header.addEventListener("pointerdown",this.onPointerDown.bind(this));document.addEventListener("pointermove",this.onDocPointerMove.bind(this));document.addEventListener("pointerup",this.onDocPointerUp.bind(this));this.observer=new ResizeObserver(this.onResizeObserve.bind(this));this.observer.observe(this.container,{attributes:!0})};netgis.Window.prototype.attachTo=function(a){a.appendChild(this.container)}; -netgis.Window.prototype.show=function(){this.container.classList.remove("netgis-hide")};netgis.Window.prototype.hide=function(){this.container.classList.add("netgis-hide")};netgis.Window.prototype.toggle=function(){this.container.classList.toggle("netgis-hide")};netgis.Window.prototype.isVisible=function(){return!this.container.classList.contains("netgis-hide")};netgis.Window.prototype.onCloserClick=function(a){this.hide()}; -netgis.Window.prototype.onPointerDown=function(a){var b=this.container.getBoundingClientRect();this.dragging=!0;this.px=a.clientX-b.left;this.py=a.clientY-b.top;this.container.classList.add("netgis-dragging")}; -netgis.Window.prototype.onDocPointerMove=function(a){var b=a.clientX,c=a.clientY,d=this.container.getBoundingClientRect();if(!this.resizing&&this.dragging){b-=this.px;c-=this.py;var e=this.container.parentNode.getBoundingClientRect();0>b&&(b=0,this.px=a.clientX-d.left);40>c&&(c=40,this.py=a.clientY-d.top);b+d.width>e.right&&(b=e.width-d.width,this.px=a.clientX-d.left);c+d.height>e.bottom&&(c=e.height-d.height,this.py=a.clientY-d.top);this.container.style.left=b+"px";this.container.style.top=c+"px"; -this.container.style.right="auto";this.container.style.bottom="auto"}};netgis.Window.prototype.onDocPointerUp=function(a){this.resizing=this.dragging=!1;this.container.classList.remove("netgis-dragging")};netgis.Window.prototype.onResizeObserve=function(a){this.dragging&&(this.dragging=!1,this.resizing=!0);a=this.container.getBoundingClientRect();netgis.util.invoke(this.container,netgis.Events.WINDOW_RESIZE,{x:a.x,y:a.y,w:a.width,h:a.height})};netgis=netgis||{};netgis.WMC=function(a){this.config=a};netgis.WMC.Config={url:"",layers_url:""};netgis.WMC.prototype.requestContext=function(a,b){this.callback=b;netgis.util.request(a,this.onContextResponse.bind(this))};netgis.WMC.prototype.onContextResponse=function(a){var b=JSON.parse(a);this.data=b;a=[];b=b.layerList;for(var c=0;cc?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;qZeichnungsfl\u00e4che: " + netgis.util.formatArea(a, !0) + "" : null; + this.update(); +}; +netgis = netgis || {}; +netgis.Client = function (a, b) { + b || (b = {}); + a = this.initLegacyConfig(b, a); + this.container = this.initContainer(a); + this.debug = !1; + netgis.util.isString(b) + ? netgis.util.isJSON(b, !1) + ? ((b = JSON.parse(b)), this.init(this.container, b)) + : (this.showLoader(!0), netgis.util.request(b, this.onConfigResponse.bind(this))) + : this.init(this.container, b); +}; +netgis.Client.Config = { loading_text: "Geoportal Client wird geladen..." }; +netgis.Client.Output = { id: "netgis-storage" }; +netgis.Client.prototype.init = function (a, b) { + this.config = b; + this.initParams(b); + this.initConfig(b); + this.initElements(a); + this.initEvents(); + this.initModules(b); + this.initOutput(b); + a = new netgis.ContextMenu(); + a.attachTo(this.container); + this.modules.contextmenu = a; + this.popup = new netgis.Popup(); + this.popup.attachTo(this.container); +}; +netgis.Client.prototype.initLegacyConfig = function (a, b) { + var c = netgis.config; + if (!c) return b; + c.MAP_CONTAINER_ID && (b = c.MAP_CONTAINER_ID); + a.modules || + (a.modules = { + menu: !0, + map: !0, + controls: !0, + attribution: !0, + legend: !0, + layertree: !0, + info: !0, + searchplace: !0, + geolocation: !0, + }); + a.map || (a.map = {}); + (!c.INITIAL_CENTER_X && 0 !== c.INITIAL_CENTER_X) || + (!c.INITIAL_CENTER_Y && 0 !== c.INITIAL_CENTER_Y) || + (a.map.center = [c.INITIAL_CENTER_X, c.INITIAL_CENTER_Y]); + a.map.scalebar = !0; + c.INITIAL_SCALE && (a.map.scale = c.INITIAL_SCALE); + c.MAP_SCALES && (a.map.scales = c.MAP_SCALES); + c.MAP_EXTENT && (a.map.extent = c.MAP_EXTENT); + c.MAX_HISTORY && (a.map.max_view_history = c.MAX_HISTORY); + a.attribution = { prefix: "GeoPortal" }; + c.MAP_PROJECTIONS && (a.projections = c.MAP_PROJECTIONS); + c.MAP_PROJECTION && (a.map.projection = c.MAP_PROJECTION); + a.controls = { + buttons: [ + { id: "zoom_in", icon: "", title: "Zoom +" }, + { id: "zoom_out", icon: "", title: "Zoom -" }, + { id: "geolocation", icon: "", title: "Ger\u00e4testandort" }, + { id: "zoom_home", icon: "", title: "Anfangsausdehung" }, + { id: "legend", icon: "", title: "Legende" }, + ], + }; + a.folders || (a.folders = [{ id: "bg", title: "Hintergrund", parent: null, radio: !0 }]); + a.layers || (a.layers = []); + if (c.URL_BACKGROUND_HYBRID) { + var d = c.URL_BACKGROUND_HYBRID; + -1 !== d.indexOf("{x}") || + (-1 !== d.indexOf("{y}") && -1 !== d.indexOf("{-y}")) || + -1 !== d.indexOf("{z}") || + (d += "/{z}/{x}/{-y}.jpeg"); + d = { + id: "bg_hybrid", + active: !0, + folder: "bg", + order: 1, + title: "Hybrid", + type: "TMS", + url: d, + projection: "EPSG:25832", + extent: "map", + scales: "map", + transparency: 0, + }; + a.layers.push(d); + } + c.URL_BACKGROUND_AERIAL && + ((d = c.URL_BACKGROUND_AERIAL), + (d = { + id: "bg_aerial", + folder: "bg", + order: 1, + title: "Luftbild", + type: "WMS", + url: d, + query: !1, + transparency: 0, + }), + a.layers.push(d)); + c.URL_HEIGHT_REQUEST && + ((d = c.URL_HEIGHT_REQUEST), + -1 === d.indexOf("{x}") && -1 === d.indexOf("{y}") && (d += "&coord={x},{y}"), + (d = { + id: "dem_hidden", + title: "Digitales H\u00f6henmodell", + hidden: !0, + active: !0, + query: !0, + type: "HIDDEN", + query_url: d, + }), + a.layers.push(d)); + a.layertree || (a.layertree = {}); + a.layertree.title = "Ebenen"; + a.info || (a.info = {}); + a.info.default_format = "text/html"; + c.URL_FEATURE_INFO_PROXY && 0 < c.URL_FEATURE_INFO_PROXY.length && (a.info.proxy = c.URL_FEATURE_INFO_PROXY); + a.menu || + ((a.menu = { + header: "GeoPortal", + compact: !0, + items: [ + { + title: "Tools", + items: [ + { id: "view", title: "Betrachten" }, + { + id: "zoom_box", + title: "Zoom-Rechteck", + }, + { + id: "measure_line", + title: "Strecke messen", + }, + { + id: "measure_area", + title: "Fl\u00e4che messen", + }, + { + id: "measure_clear", + title: "Messung l\u00f6schen", + }, + ], + }, + { id: "layertree", title: "Ebenen" }, + ], + }), + c.MAP_SCALES && + 0 < c.MAP_SCALES.length && + a.menu.items.unshift({ + title: "Ansicht", + items: [ + { id: "view_prev", title: "Vorherige" }, + { id: "view_next", title: "N\u00e4chste" }, + { + id: "scales", + title: "Ma\u00dfstab", + items: [], + }, + ], + }), + c.URL_USAGE_TERMS && + 0 < c.URL_USAGE_TERMS.length && + a.menu.items.unshift({ + title: "Info", + items: [ + { + url: c.URL_USAGE_TERMS, + title: "Nutzungsbedingungen", + }, + ], + })); + c.URL_SEARCH_REQUEST && + ((d = c.URL_SEARCH_REQUEST), + -1 === d.indexOf("{query}") && + (d += + "?outputFormat=json&resultTarget=web&searchEPSG=4326&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={query}&name_startsWith={query}"), + c.URL_SEARCH_PROXY && 0 < c.URL_SEARCH_PROXY.length && (d = c.URL_SEARCH_PROXY + "?" + d), + a.menu.items.unshift({ id: "searchplace", title: "Suche" }), + (a.searchplace = { title: "Suche...", url: d })); + a.wmc || (a.wmc = {}); + if (c.URL_WMC_REQUEST) { + d = c.URL_WMC_REQUEST; + if (-1 === d.indexOf("{id}")) { + var e = "mobilemap2"; + c.CONF_FILE_NAME && 0 < c.CONF_FILE_NAME.length && (e = c.CONF_FILE_NAME); + d += "?confFileName=" + e + "&epsg=25832&withHierarchy=1&wmc_id={id}"; + } + c.URL_WMC_PROXY && 0 < c.URL_WMC_PROXY.length && (d = c.URL_WMC_PROXY + "?" + d); + a.wmc.url = d; + } + c.URL_LAYERS_REQUEST && + ((d = c.URL_LAYERS_REQUEST), + -1 === d.indexOf("{ids}") && (d += "?languageCode=de&resultTarget=web&maxResults=40&resourceIds={ids}"), + c.URL_LAYERS_PROXY && 0 < c.URL_LAYERS_PROXY.length && (d = c.URL_LAYERS_PROXY + "?" + d), + (a.wmc.layers_url = d)); + return b; +}; +netgis.Client.prototype.initContainer = function (a) { + netgis.util.isString(a) && (a = document.getElementById(a)); + a.classList.add("netgis-client", "netgis-font"); + return a; +}; +netgis.Client.prototype.initParams = function (a) { + var b = window.location.search.substr(1); + b = b.split("&"); + this.params = {}; + for (var c = 0; c < b.length; c++) { + var d = b[c].split("="), + e = d[0].toLowerCase(); + d = d[1]; + e && "" !== e && (this.params[e] = d); + } + for (e in this.params) + switch (((d = this.params[e]), e)) { + case "wmc_id": + a.wmc && (a.wmc.id = d); + break; + case "layerid": + a && + a.wmc && + a.wmc.layers_url && + ((b = a.wmc.layers_url), + (b = netgis.util.replace(b, "{ids}", d)), + netgis.util.request(b, this.onContextResponseLayer.bind(this))); + } +}; +netgis.Client.prototype.initConfig = function (a) { + a && a.wmc && a.wmc.url && this.requestContextWMC(a.wmc.url, a.wmc.id); + a && a.ows && a.ows.url && this.requestContextOWS(a.ows.url); +}; +netgis.Client.prototype.initElements = function (a) { + if (a.hasAttribute("data-lon")) { + var b = Number.parseFloat(a.getAttribute("data-lon")); + this.config.map.center_lonlat || (this.config.map.center_lonlat = []); + this.config.map.center_lonlat[0] = b; + } + a.hasAttribute("data-lat") && + ((b = Number.parseFloat(a.getAttribute("data-lat"))), + this.config.map.center_lonlat || (this.config.map.center_lonlat = []), + (this.config.map.center_lonlat[1] = b)); + a.hasAttribute("data-zoom") && ((b = Number.parseFloat(a.getAttribute("data-zoom"))), (this.config.map.zoom = b)); + a.hasAttribute("data-bounds") && ((b = a.getAttribute("data-bounds")), (this.config.tools.bounds = b)); + a.hasAttribute("data-editable") && + ((a = "true" === a.getAttribute("data-editable")), + this.config.tools || (this.config.tools = {}), + (this.config.tools.editable = a)); +}; +netgis.Client.prototype.initOutput = function (a) { + var b; + if (a.output && a.output.id) { + var c = a.output.id; + console.warn('config[ "output" ][ "id" ] is deprecated, use config[ "tools" ][ "output_id" ] instead'); + } + a.tools && (a.tools.output_id && (c = a.tools.output_id), a.tools.output_name && (b = a.tools.output_name)); + if (c) { + if ((a = document.getElementById(c)) && a.value && 0 < a.value.length) { + var d = JSON.parse(a.value); + netgis.util.invoke(this.container, netgis.Events.MAP_EDIT_LAYER_LOADED, { geojson: d }); + } + this.output = a; + } + this.output || + ((this.output = document.createElement("input")), + (this.output.className = "netgis-storage"), + this.output.setAttribute("type", "hidden"), + c && this.output.setAttribute("id", c), + b && this.output.setAttribute("name", b), + this.container.appendChild(this.output)); +}; +netgis.Client.prototype.initModules = function (a) { + this.modules = {}; + if ((a = a.modules)) + a.map && this.addModule("map", netgis.Map), + a.controls && this.addModule("controls", netgis.Controls), + a.attribution && this.addModule("attribution", netgis.Attribution), + a.legend && this.addModule("legend", netgis.Legend), + a.geolocation && this.addModule("geolocation", netgis.Geolocation), + a.info && this.addModule("info", netgis.Info), + a.menu && this.addModule("menu", netgis.Menu), + a.layertree && this.addModule("layertree", netgis.LayerTree), + a.searchplace && this.addModule("searchplace", netgis.SearchPlace), + a.searchparcel && this.addModule("searchparcel", netgis.SearchParcel), + a.toolbox && this.addModule("toolbox", netgis.Toolbox), + a["import"] && this.addModule("import", netgis.Import), + a["export"] && this.addModule("export", netgis.Export), + a.timeslider && this.addModule("timeslider", netgis.TimeSlider), + a.plugins && this.addModule("plugins", netgis.Plugins); +}; +netgis.Client.prototype.initEvents = function () { + this.container.addEventListener(void 0, function (a) { + console.error("undefined event invoked", a); + }); + for (var a in netgis.Events) this.container.addEventListener(netgis.Events[a], this.handleEvent.bind(this)); + this.container.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onMapEditLayerChange.bind(this)); +}; +netgis.Client.prototype.showLoader = function (a) { + this.loader || + ((this.loader = document.createElement("div")), + (this.loader.className = "netgis-loader netgis-color-e netgis-text-a"), + (this.loader.innerHTML = ""), + this.config && + this.config.client && + this.config.client.loading_text && + (this.loader.innerHTML += "

" + this.config.client.loading_text + "

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

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
" + ); + this.addButton( + this.sections.geojson, + "Datei laden", + this.onGeoJSONAcceptClick.bind(this) + ); + this.sections.gml = this.tabs.getContentSection(b); + b += 1; + this.addInputFile(this.sections.gml, "GML-Datei:", ".gml,.xml"); + this.addText( + this.sections.gml, + "

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
" + ); + this.addButton( + this.sections.gml, + "Datei laden", + this.onGMLAcceptClick.bind(this) + ); + this.sections.geopackage = this.tabs.getContentSection(b); + b += 1; + this.addInputFile(this.sections.geopackage, "GeoPackage-Datei:", ".gpkg"); + this.addText( + this.sections.geopackage, + "

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
" + ); + this.addButton( + this.sections.geopackage, + "Datei laden", + this.onGeoPackageAcceptClick.bind(this) + ); + this.sections.spatialite = this.tabs.getContentSection(b); + b += 1; + this.addInputFile(this.sections.spatialite, "Spatialite-Datei:", ".sqlite"); + this.addText( + this.sections.spatialite, + "

Unterst\u00fctzte Koordinatensysteme:

  • Web Mercator (EPSG:3857)
  • WGS84 / Lon-Lat (EPSG:4326)
  • ETRS89 / UTM Zone 32N (EPSG:25832)
" + ); + this.addButton( + this.sections.spatialite, + "Datei laden", + this.onSpatialiteAcceptClick.bind(this) + ); + this.sections.shapefile = this.tabs.getContentSection(b); + this.addInputFile(this.sections.shapefile, "Shapefile-Zip-Datei:", ".zip"); + this.addText( + this.sections.shapefile, + "

Unterst\u00fctzte Koordinatensysteme:

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