diff --git a/konova/forms/geometry_form.py b/konova/forms/geometry_form.py index bc5bea62..de111b8d 100644 --- a/konova/forms/geometry_form.py +++ b/konova/forms/geometry_form.py @@ -27,13 +27,12 @@ class SimpleGeomForm(BaseForm): """ read_only = True geometry_simplified = False - geom = JSONField( + output = JSONField( label=_("Geometry"), help_text=_(""), label_suffix="", required=False, disabled=False, - template_name="output" ) def __init__(self, *args, **kwargs): @@ -49,29 +48,32 @@ class SimpleGeomForm(BaseForm): raise AttributeError geojson = self.instance.geometry.as_feature_collection(srid=DEFAULT_SRID_RLP) + + geojson = self._set_editable_status(geojson) + geom = json.dumps(geojson) except AttributeError: # If no geometry exists for this form, we simply set the value to None and zoom to the maximum level geom = "" self.empty = True - self.initialize_form_field("geom", geom) + self.initialize_form_field("output", geom) def is_valid(self): super().is_valid() is_valid = True # Get geojson from form - geom = self.data["geom"] + geom = self.data["output"] if geom is None or len(geom) == 0: # empty geometry is a valid geometry - self.cleaned_data["geom"] = MultiPolygon(srid=DEFAULT_SRID_RLP).ewkt + self.cleaned_data["output"] = MultiPolygon(srid=DEFAULT_SRID_RLP).ewkt return is_valid geom = json.loads(geom) # Write submitted data back into form field to make sure invalid geometry # will be rendered again on failed submit - self.initialize_form_field("geom", self.data["geom"]) + self.initialize_form_field("output", self.data["output"]) # Read geojson into gdal geometry # HINT: This can be simplified if the geojson format holds data in epsg:4326 (GDAL provides direct creation for @@ -98,7 +100,7 @@ class SimpleGeomForm(BaseForm): g = self.__flatten_geom_to_2D(g) if g.geom_type not in accepted_ogr_types: - self.add_error("geom", _("Only surfaces allowed. Points or lines must be buffered.")) + self.add_error("output", _("Only surfaces allowed. Points or lines must be buffered.")) is_valid &= False return is_valid @@ -107,7 +109,7 @@ class SimpleGeomForm(BaseForm): polygon = Polygon.from_ewkt(g.ewkt) is_valid &= polygon.valid if not polygon.valid: - self.add_error("geom", polygon.valid_reason) + self.add_error("output", polygon.valid_reason) return is_valid features.append(polygon) @@ -124,7 +126,7 @@ class SimpleGeomForm(BaseForm): # Write unioned Multipolygon into cleaned data if self.cleaned_data is None: self.cleaned_data = {} - self.cleaned_data["geom"] = form_geom.ewkt + self.cleaned_data["output"] = form_geom.ewkt return is_valid @@ -134,7 +136,7 @@ class SimpleGeomForm(BaseForm): Returns: """ - geom = self.cleaned_data.get("geom") + geom = self.cleaned_data.get("output") g = gdal.OGRGeometry(geom, srs=DEFAULT_SRID_RLP) num_vertices = g.num_coords @@ -150,7 +152,7 @@ class SimpleGeomForm(BaseForm): if not is_area_valid: self.add_error( - "geom", + "output", _("Geometry must be greater than 1m². Currently is {}m²").format( float(geom.area) ) @@ -193,14 +195,14 @@ class SimpleGeomForm(BaseForm): if self.instance is None or self.instance.geometry is None: raise LookupError geometry = self.instance.geometry - geometry.geom = self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID_RLP)) + geometry.geom = self.cleaned_data.get("output", MultiPolygon(srid=DEFAULT_SRID_RLP)) geometry.modified = action geometry.save() except LookupError: # No geometry or linked instance holding a geometry exist --> create a new one! geometry = Geometry.objects.create( - geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID_RLP)), + geom=self.cleaned_data.get("output", MultiPolygon(srid=DEFAULT_SRID_RLP)), created=action, ) @@ -224,3 +226,19 @@ class SimpleGeomForm(BaseForm): g_wkt = wkt_w.write(geom.geos).decode("utf-8") geom = gdal.OGRGeometry(g_wkt) return geom + + def _set_editable_status(self, geojson: dict): + """ Toggles the editable property of the geojson for proper handling in map client + + Args: + geojson (dict): The GeoJson + + Returns: + geojson (dict): The altered GeoJson + """ + features = geojson.get("features", []) + for feature in features: + feature["properties"] = { + "editable": not self.read_only + } + return geojson diff --git a/templates/map/client/config.json b/templates/map/client/config.json index e41ae5ce..18332bc6 100644 --- a/templates/map/client/config.json +++ b/templates/map/client/config.json @@ -15,7 +15,7 @@ }, "menu": { - "header": "LANIS Demo", + "header": "", "items": [ { "id": "searchplace", "title": "Suche" }, @@ -39,7 +39,7 @@ }, "folders": [ - { "id": "bg", "title": "Hintergrund", "parent": null }, + { "id": "bg", "title": "Hintergrund", "parent": null , "radio": true}, { "id": "alkis", "title": "ALKIS Liegenschaften", "parent": null }, { "id": "verwaltung", "title": "Verwaltungsgrenzen", "parent": null }, { "id": "fachdaten", "title": "Geofachdaten", "parent": null }, @@ -123,7 +123,7 @@ "searchplace": { "title": "Adresse...", - "url": "/client/proxy?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}", + "url": "/client/proxy?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={query}&name_startsWith={query}", "zoom": 17, "marker_color": "darkgray", "marker_title": "Such-Ergebnis" @@ -219,7 +219,7 @@ "interactive_render": true, "buffer": { - "default_radius": 300, + "default_radius": 5, "default_segments": 3 }, "snapping": diff --git a/templates/map/client/dist/netgis.min.css b/templates/map/client/dist/netgis.min.css index 496927f2..2bbd6455 100644 --- a/templates/map/client/dist/netgis.min.css +++ b/templates/map/client/dist/netgis.min.css @@ -1 +1 @@ -.netgis-attribution{position:absolute;right:0;bottom:0;padding:1mm;background:rgba(255,255,255,0.5);font-size:2.5mm;z-index:100}.netgis-client{position:relative;box-sizing:border-box;font-size:4mm;overflow:hidden}.netgis-client *{box-sizing:border-box}.netgis-client button{font-size:inherit}.netgis-contextmenu{position:absolute;width:64mm;z-index:90000}.netgis-contextmenu>*{display:block;position:relative;width:100%;height:12mm;line-height:12mm;padding:0 4mm;text-align:left;background:none}.netgis-contextmenu>label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm}.netgis-contextmenu>label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-contextmenu>label span:only-of-type{left:12mm;right:0;padding:0 4mm;padding-left:0;cursor:pointer}.netgis-contextmenu>label input[type=range]{width:100%;cursor:pointer}.netgis-controls{position:absolute;width:12mm;right:4mm;bottom:8mm;overflow:hidden;z-index:100}.netgis-client.netgis-footer>.netgis-controls{bottom:44mm}.netgis-controls button{font-size:5mm!important;color:inherit;width:100%;height:12mm;padding:0;border:none;background-color:inherit;cursor:pointer}.netgis-dropdown{display:inline-block;position:relative;padding:0}.netgis-dropdown>:first-child{z-index:10}.netgis-dropdown ul{display:none;position:absolute;margin:0;padding:0;list-style-type:none}.netgis-dropdown:hover>ul{display:block}.netgis-dropdown li{position:relative;height:12mm}.netgis-dropdown li>button,.netgis-dropdown li>a{display:inline-block;width:100%;height:100%;text-align:left}.netgis-dropdown li>ul{display:none;top:0;left:100%}.netgis-dropdown li:hover>ul{display:block}.netgis-dropdown li i{margin-right:4mm!important}.netgis-dropdown li>label{display:block;text-align:left}.netgis-dropdown li>label input{width:4mm;margin:0;margin-right:4mm}.netgis-compact .netgis-dropdown li{height:9mm;line-height:9mm}.netgis-compact .netgis-dropdown li button,.netgis-compact .netgis-dropdown li .netgis-button{padding:0 3mm}.netgis-compact .netgis-dropdown li i{margin-right:4mm}@media (max-width:599px){}.netgis-import .netgis-preview-map{position:absolute;width:100%;height:40mm;cursor:grab}.netgis-import .netgis-preview-map:active:hover{cursor:grabbing}.netgis-import .netgis-preview-tree{position:absolute;width:100%;top:52mm;bottom:12mm;overflow-y:auto}.netgis-import .netgis-import-submit{position:absolute;width:100%;height:12mm;bottom:0}.netgis-import .netgis-geoportal .netgis-tree{padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree li{padding-left:0}.netgis-import .netgis-geoportal .netgis-tree label{padding-left:0;margin-bottom:0;font-weight:normal}.netgis-import .netgis-geoportal .netgis-tree .netgis-item input{margin-right:0}.netgis-map{position:absolute;left:0;right:0;top:12mm;bottom:0;cursor:grab;background:#e0dfdf}.netgis-map:active:hover{cursor:grabbing!important}.netgis-map-overlay{width:1px;height:1px;background:none}.netgis-map.netgis-clickable{cursor:pointer}.netgis-map.netgis-mode-zoom-box,.netgis-map.netgis-mode-zoom-box:active:hover,.netgis-map.netgis-mode-measure-line,.netgis-map.netgis-mode-measure-area{cursor:crosshair}.netgis-map.netgis-mode-measure-line:active:hover,.netgis-map.netgis-mode-measure-area:active:hover{cursor:grabbing}.netgis-map.netgis-mode-draw-points,.netgis-map.netgis-mode-draw-lines,.netgis-map.netgis-mode-draw-polygons,.netgis-map.netgis-mode-cut-features-draw{cursor:crosshair}.netgis-map.netgis-mode-draw-points.netgis-not-allowed,.netgis-map.netgis-mode-draw-lines.netgis-not-allowed,.netgis-map.netgis-mode-draw-polygons.netgis-not-allowed{cursor:no-drop}.netgis-map .ol-scale-bar{right:24mm;bottom:10mm;left:auto}.netgis-client.netgis-footer>.netgis-map .ol-scale-bar{bottom:46mm}.netgis-menu{position:absolute;left:0;right:0;top:0;max-height:12mm;line-height:12mm;white-space:nowrap;text-align:right;font-size:0;z-index:10000}.netgis-menu.netgis-menu-large{max-height:100%}.netgis-menu .netgis-menu-toggle{z-index:1}.netgis-menu>*{display:inline-block;min-width:12mm;height:12mm;padding:0 4mm;margin:0;font-size:4mm!important}.netgis-menu>h1{position:absolute;left:0;top:0;bottom:0;font-weight:bold;cursor:default}.netgis-menu a{color:inherit;text-decoration:none}.netgis-menu button,.netgis-menu select{background:none;border:none;outline:none;cursor:pointer}.netgis-menu>*:hover{background:#eee}.netgis-menu button img,.netgis-menu a img{position:relative;top:.7mm;height:1em}.netgis-menu button i:not(:only-child),.netgis-menu a i:not(:only-child),.netgis-menu button img:not(:only-child),.netgis-menu a img:not(:only-child){width:4mm;margin-right:3mm;text-align:center}.netgis-menu>.netgis-wrapper{display:inline-block;position:relative;padding:0}.netgis-menu>.netgis-wrapper>.netgis-icon{position:absolute;left:0;top:0;padding-left:4mm;pointer-events:none}.netgis-menu>.netgis-wrapper select{width:100%;height:100%;padding-left:11mm}.netgis-menu>.netgis-wrapper select:last-child{padding-left:4mm}@media (max-width:599px){.netgis-menu>*:not(.netgis-menu-toggle){display:block;width:100%;text-align:left}.netgis-menu{overflow:hidden}.netgis-menu.netgis-menu-large{overflow-y:auto}.netgis-menu .netgis-dropdown{height:auto}.netgis-menu .netgis-dropdown ul{position:relative}.netgis-menu .netgis-dropdown li{height:auto}.netgis-menu .netgis-dropdown li>ul{top:auto;left:auto}}@media (min-width:600px){.netgis-menu-toggle{display:none!important}}.netgis-modal{display:none;position:absolute;width:100%;height:100%;top:0;left:0;padding:6mm;z-index:10000;background:rgba(0,0,0,0.6)}.netgis-modal.netgis-show{display:block}.netgis-modal>*{position:relative;width:100%;height:100%;max-width:150mm;margin:0 auto}.netgis-modal .netgis-content{position:absolute;width:100%;top:12mm;bottom:0;padding:12mm;overflow:auto}.netgis-modal .netgis-button{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel{position:absolute;left:0;width:80mm;top:12mm;bottom:0;z-index:1000;-webkit-transform:translateX(-110%);transform:translateX(-110%);transition:transform 150ms ease;will-change:transform}.netgis-panel.netgis-show{-webkit-transform:none;transform:none}.netgis-client.netgis-footer>.netgis-panel{bottom:36mm}.netgis-panel>div{position:absolute;left:0;right:0;top:12mm;bottom:0;overflow:auto}.netgis-panel h2{margin:0 4mm;font-size:1em}.netgis-panel .netgis-button,.netgis-panel label{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel input[type=text]{margin-top:3mm}.netgis-panel .netgis-half{display:inline-block;width:50%!important;padding-right:1mm}.netgis-panel .netgis-half+.netgis-half{padding-left:1mm;padding-right:0}.netgis-panel .netgis-anim-bottom{transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-panel .netgis-anim-bottom.netgis-hide{display:initial;-webkit-transform:translateY(110%);transform:translateY(110%)}.netgis-panel .netgis-resize-bottom{max-height:80%}.netgis-popup{display:none;position:absolute;width:80mm;max-width:100mm;height:20mm;left:0;top:0;transform:translate(-50%,-100%);z-index:1000}.netgis-popup.netgis-fade{opacity:.5;transition:opacity .5s ease}.netgis-popup.netgis-fade:hover{opacity:1}.netgis-popup.netgis-show{display:block}.netgis-popup .netgis-arrow-down{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:0;height:0;border-left:3mm solid transparent;border-right:3mm solid transparent;border-top:3mm solid white}.netgis-popup .netgis-content{position:absolute;width:100%;min-height:12mm;max-height:100mm;left:0;bottom:2.9mm;padding:4mm 0;overflow:auto;cursor:default;box-shadow:0 1mm 4mm 0 rgba(0,0,0,0.3)}.netgis-popup .netgis-closer{position:absolute;right:0;top:0;height:9mm;background:none;width:100%;text-align:left}.netgis-popup .netgis-closer i{position:absolute;right:3mm}.netgis-popup .netgis-loader{font-size:6mm;text-align:center}.netgis-popup .netgis-wrapper{max-height:80mm;margin-top:5mm;padding:0 3mm;overflow:auto}.netgis-popup table{width:100%;border:0;border-collapse:collapse;table-layout:fixed;word-wrap:break-word}.netgis-popup th,.netgis-popup td{padding:2mm;text-align:left;vertical-align:top}.netgis-popup th[colspan]{padding-top:4mm}.netgis-popup tr:first-of-type th[colspan]{padding-top:0}.netgis-popup .netgis-wrapper button{width:100%;height:12mm;text-align:left}.netgis-popup summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-popup details>div{padding:4mm}.netgis-search{width:100%;transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-search.netgis-hide{display:initial!important;-webkit-transform:translateY(-200%);transform:translateY(-200%)}.netgis-search>label{display:inline-block;position:relative;width:100%;min-height:12mm}@media (max-width:599px){.netgis-search.netgis-responsive{left:0;right:0}}.netgis-search>label>input{width:100%;min-width:60mm;height:12mm;padding:1mm 4mm;vertical-align:top;border:none}.netgis-search>label>button{position:absolute!important;width:12mm;height:12mm;top:0;right:0;background:none}.netgis-search>ul{max-height:60mm;overflow-y:auto;margin:0;padding:0;list-style-type:none}.netgis-search li .netgis-button{width:100%;height:12mm;padding:0 3mm;text-align:left}.netgis-search li .netgis-button span{opacity:.5}.netgis-search-parcel{position:absolute;top:0;bottom:0;width:100%;overflow:hidden;padding:4mm}.netgis-search-parcel section{position:absolute;left:0;right:0;overflow:auto}.netgis-search-parcel section:first-of-type{top:0;bottom:0;padding:6mm}.netgis-search-parcel section:last-of-type{top:50%;bottom:0}.netgis-search-parcel h3{margin:0;margin-bottom:4mm}.netgis-search-parcel label{display:block;margin:3mm 0;margin-bottom:0;cursor:pointer;font-weight:bold}.netgis-search-parcel label:first-child{margin-top:0}.netgis-search-parcel label span:first-child{display:block}.netgis-search-parcel input{width:100%;height:12mm;margin:3mm 0;padding:0 3mm}.netgis-search-parcel .netgis-loader{width:6mm;height:6mm;top:8mm;right:3mm;font-size:6mm}.netgis-search-parcel ul{margin:0;padding:0;list-style-type:none}.netgis-search-parcel li button{text-align:left}.netgis-search-parcel button{display:block;width:100%;height:12mm;padding:0 3mm;margin:0}.netgis-search-parcel .netgis-table-wrapper{width:100%;margin-top:4mm;overflow:auto}.netgis-search-parcel table{min-width:100%;border-collapse:collapse;white-space:nowrap}.netgis-search-parcel table thead{position:-webkit-sticky;position:sticky;top:0;z-index:10}.netgis-search-parcel tr{height:12mm}.netgis-search-parcel th{text-align:left;padding:0 3mm}.netgis-search-parcel td{text-align:left;padding:0 3mm;cursor:pointer}.netgis-search-parcel td:first-child{padding:0}.netgis-search-parcel table button{display:inline-block;width:12mm;height:12mm;background:none}.netgis-search-parcel p{margin:4mm 3mm;font-style:italic}.netgis-search-place{position:absolute;width:100%;max-width:100mm;right:4mm;top:16mm;z-index:900}.netgis-tabs{position:relative}.netgis-tabs>.netgis-header{position:absolute;width:100%;height:12mm;left:0;top:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.netgis-tabs>.netgis-content{position:absolute;width:100%;left:0;top:12mm;bottom:0}.netgis-tabs.netgis-scroll>.netgis-header{height:16mm}.netgis-tabs.netgis-scroll>.netgis-content{top:16mm}.netgis-tabs>.netgis-header .netgis-button{display:inline-block;width:auto}.netgis-tabs>.netgis-content section{position:absolute;width:100%;height:100%;left:0;top:0;padding:12mm;overflow:auto}.netgis-tabs>.netgis-content section.netgis-hide{display:none}.netgis-font{font-family:Arial,sans-serif}.netgis-color-a{background-color:#900;color:#fff}.netgis-color-b{background-color:#430433;color:#fff}.netgis-color-c{background-color:#470f1b;color:#fff}.netgis-color-d{background-color:#f6f5f5;color:#000}.netgis-color-e{background-color:#fff;color:#000}.netgis-hover-a:hover{background-color:#900;color:#fff}.netgis-hover-b:hover{background-color:#430433;color:#fff}.netgis-hover-c:hover{background-color:#470f1b;color:#fff}.netgis-hover-d:hover{background-color:#f6f5f5;color:#000}.netgis-hover-e:hover{background-color:#fff;color:#000}.netgis-text-a{color:#900}.netgis-text-b{color:#430433}.netgis-text-c{color:#470f1b}.netgis-text-d{color:#f6f5f5}.netgis-text-e{color:#fff}.netgis-hover-text-a:hover{color:#900}.netgis-hover-text-b:hover{color:#430433}.netgis-hover-text-c:hover{color:#470f1b}.netgis-hover-text-d:hover{color:#f6f5f5}.netgis-hover-text-e:hover{color:#fff}.netgis-timeslider{position:absolute;width:100%;height:36mm;bottom:0;box-shadow:0 0 4mm 0 rgba(0,0,0,0.3);z-index:1000}.netgis-timeslider:hover{z-index:1000}.netgis-timeslider.netgis-active{z-index:1000;cursor:grabbing}.netgis-timeslider>.netgis-header{position:absolute;width:100%;height:12mm;text-align:left;z-index:1}.netgis-timeslider>.netgis-wrapper{position:absolute;width:100%;top:12mm;bottom:0;overflow-x:auto;cursor:grab}.netgis-timeslider.netgis-active>.netgis-wrapper{cursor:grabbing}.netgis-timeslider table{height:100%;border-collapse:collapse}.netgis-timeslider td{position:relative;min-width:32mm;height:100%;white-space:nowrap}.netgis-timeslider td:not(:empty){padding:0}.netgis-timeslider td .netgis-button{height:100%;opacity:.5;cursor:inherit!important}.netgis-timeslider td .netgis-button .netgis-icon{position:relative}.netgis-timeslider td .netgis-button span{margin-left:2mm!important;margin-right:3mm}.netgis-timeslider td.netgis-active .netgis-button,.netgis-timeslider:not(.netgis-active) td:hover .netgis-button{opacity:1}.netgis-toolbox{position:absolute;top:12mm!important;bottom:0!important;width:100%;overflow:hidden}.netgis-toolbox section{position:absolute;left:0;right:0;overflow:auto}.netgis-toolbox section:first-of-type{top:0;bottom:0}.netgis-toolbox section:last-of-type{top:50%;bottom:0}.netgis-toolbox section:last-of-type>div{position:absolute;width:100%;top:12mm;bottom:0;overflow:auto}.netgis-toolbox button:hover i{color:inherit!important}.netgis-toolbox button.netgis-active{font-weight:bold}.netgis-toolbox label{display:block;width:100%;min-height:12mm;text-align:left;position:relative;padding:4mm;cursor:pointer}.netgis-toolbox input[type=checkbox]{width:4mm;height:4mm;margin:0 4mm 0 0}.netgis-toolbox input[type=checkbox]:last-child{float:right;margin-right:0}.netgis-toolbox input[type=text]{width:100%;height:10mm;padding:0 2mm;margin-top:3mm}.netgis-toolbox input[type=number]{position:absolute;right:2mm;width:24mm;top:2.5mm;height:8mm;padding:0 1mm}.netgis-tree{display:block;line-height:12mm;padding:0;margin:0;list-style-type:none}.netgis-tree ul{padding:0;margin:0;padding-left:9mm;list-style-type:none}.netgis-tree .netgis-folder{position:relative}.netgis-tree summary{display:block}.netgis-tree summary label{text-align:center}.netgis-tree .netgis-folder .netgis-icon{width:6mm;left:12mm;color:#eab000}.netgis-tree .netgis-folder .netgis-partial{opacity:.5}.netgis-tree details[open]>summary>.netgis-hide-open,.netgis-tree details>summary>.netgis-show-open{display:none}.netgis-tree details[open]>summary>.netgis-show-open{display:initial}.netgis-tree .netgis-folder>details>summary>label{position:absolute;width:12mm;top:0;left:0}.netgis-tree .netgis-folder>details>summary>span{margin-left:17mm!important}.netgis-tree .netgis-item{position:relative}.netgis-tree .netgis-item label{padding:0 4mm;padding-left:3mm}.netgis-tree .netgis-item label input{margin-right:4mm}.netgis-tree .netgis-item summary{position:absolute;width:12mm;height:12mm;right:0;top:0;text-align:center}.netgis-tree .netgis-item summary+*{position:relative;margin-left:7.5mm}.netgis-tree .netgis-item details label{position:relative}.netgis-tree .netgis-item details label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm;overflow:hidden}.netgis-tree .netgis-item details label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-tree .netgis-item details label input[type=range]{width:100%;cursor:pointer}.netgis-bold{font-weight:bold}.netgis-clip-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.netgis-center{text-align:center!important}.netgis-clickable{cursor:pointer!important}.netgis-resize-right{resize:horizontal;overflow-x:auto;min-width:40mm;max-width:100%}.netgis-resize-bottom{resize:vertical;overflow-y:auto;min-height:24mm;max-height:100%}.netgis-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.netgis-shadow{box-shadow:0 .5mm 1mm 0 rgba(0,0,0,0.1),0 1mm 2.5mm 0 rgba(0,0,0,0.05)!important}.netgis-shadow-large{box-shadow:0 1mm 2mm 0 rgba(0,0,0,0.1),0 2mm 5mm 0 rgba(0,0,0,0.05)!important}.netgis-text-shadow{text-shadow:0 0 1mm rgba(0,0,0,1.0)}.netgis-round{border-radius:2mm}.netgis-hide{display:none!important}.netgis-client button,.netgis-button{position:relative;padding:0 4mm;font-family:inherit;text-decoration:none;border:none;outline:none;cursor:pointer}.netgis-button .netgis-icon{display:inline-block;position:absolute;width:12mm;left:0;top:0;bottom:0;line-height:12mm;text-align:center;font-size:1.2em}.netgis-button.netgis-center .netgis-icon:first-child{position:static}.netgis-button .netgis-icon:last-child{left:auto;right:0}.netgis-button:not(.netgis-center) .netgis-icon+*:not(.netgis-icon){margin-left:8mm}.netgis-form h3{font-size:1em;margin-top:0;margin-bottom:4mm}.netgis-form ul{padding:0;padding-left:12mm;margin-top:0;margin-bottom:6mm;list-style-type:square}.netgis-form li{padding-left:2mm}.netgis-form label{display:block;margin-bottom:6mm;font-weight:bold;cursor:pointer;user-select:none}.netgis-form input,.netgis-form select{display:block;width:100%;margin-top:4mm;padding:2mm}.netgis-form input[type=file]{padding:6mm;cursor:pointer;background:#efefef}.netgis-form input[type=checkbox]{display:inline-block;width:12mm;margin:0}.netgis-form input[type=checkbox]:first-child{width:4mm;margin-right:3mm;margin-top:2mm;margin-bottom:2mm}.netgis-form button{display:block;width:100%;height:12mm}.netgis-form button:not(:last-child){margin-bottom:6mm}.netgis-form select{cursor:pointer}.netgis-loader{position:absolute;width:100%;height:100%;z-index:999999;text-align:center;font-size:12mm}.netgis-loader *{position:absolute;width:100%;left:0;top:50%;transform:translateY(-50%);animation:netgis-spin 2s linear infinite}@keyframes netgis-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@media (max-width:599px){.netgis-hide-mobile{display:none!important}}@media (min-width:600px){.netgis-hide-desktop{display:none!important}} \ No newline at end of file +.netgis-attribution{position:absolute;right:0;bottom:0;padding:1mm;background:rgba(255,255,255,0.5);font-size:2.5mm;z-index:100}.netgis-client{position:relative;box-sizing:border-box;font-size:4mm;overflow:hidden}.netgis-client *{box-sizing:border-box}.netgis-client button{font-size:inherit}.netgis-contextmenu{position:absolute;width:64mm;z-index:90000}.netgis-contextmenu>*{display:block;position:relative;width:100%;height:12mm;line-height:12mm;padding:0 4mm;text-align:left;background:none}.netgis-contextmenu>label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm}.netgis-contextmenu>label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-contextmenu>label span:only-of-type{left:12mm;right:0;padding:0 4mm;padding-left:0;cursor:pointer}.netgis-contextmenu>label input[type=range]{width:100%;cursor:pointer}.netgis-controls{position:absolute;width:12mm;right:4mm;bottom:8mm;overflow:hidden;z-index:100}.netgis-client.netgis-footer>.netgis-controls{bottom:44mm}.netgis-controls button{font-size:5mm!important;color:inherit;width:100%;height:12mm;padding:0;border:none;background-color:inherit;cursor:pointer}.netgis-dropdown{display:inline-block;position:relative;padding:0}.netgis-dropdown>:first-child{z-index:10}.netgis-dropdown ul{display:none;position:absolute;margin:0;padding:0;list-style-type:none}.netgis-dropdown:hover>ul{display:block}.netgis-dropdown li{position:relative;height:12mm}.netgis-dropdown li>button,.netgis-dropdown li>a{display:inline-block;width:100%;height:100%;text-align:left}.netgis-dropdown li>ul{display:none;top:0;left:100%}.netgis-dropdown li:hover>ul{display:block}.netgis-dropdown li i{margin-right:4mm!important}.netgis-dropdown li>label{display:block;text-align:left}.netgis-dropdown li>label input{width:4mm;margin:0;margin-right:4mm}.netgis-compact .netgis-dropdown li{height:9mm;line-height:9mm}.netgis-compact .netgis-dropdown li button,.netgis-compact .netgis-dropdown li .netgis-button{padding:0 3mm}.netgis-compact .netgis-dropdown li i{margin-right:4mm}@media (max-width:599px){}.netgis-import .netgis-preview-map{position:absolute;width:100%;height:40mm;cursor:grab}.netgis-import .netgis-preview-map:active:hover{cursor:grabbing}.netgis-import .netgis-preview-tree{position:absolute;width:100%;top:52mm;bottom:12mm;overflow-y:auto}.netgis-import .netgis-import-submit{position:absolute;width:100%;height:12mm;bottom:0}.netgis-import .netgis-geoportal .netgis-tree{padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree li{padding-left:0}.netgis-import .netgis-geoportal .netgis-tree label{padding-left:0;margin-bottom:0;font-weight:normal}.netgis-import .netgis-geoportal .netgis-tree .netgis-item input{margin-right:0}.netgis-map{position:absolute;left:0;right:0;top:12mm;bottom:0;cursor:grab;background:#e0dfdf}.netgis-map:active:hover{cursor:grabbing!important}.netgis-map-overlay{width:1px;height:1px;background:none}.netgis-map.netgis-clickable{cursor:pointer}.netgis-map.netgis-mode-zoom-box,.netgis-map.netgis-mode-zoom-box:active:hover,.netgis-map.netgis-mode-measure-line,.netgis-map.netgis-mode-measure-area{cursor:crosshair}.netgis-map.netgis-mode-measure-line:active:hover,.netgis-map.netgis-mode-measure-area:active:hover{cursor:grabbing}.netgis-map.netgis-mode-draw-points,.netgis-map.netgis-mode-draw-lines,.netgis-map.netgis-mode-draw-polygons,.netgis-map.netgis-mode-cut-features-draw{cursor:crosshair}.netgis-map.netgis-mode-draw-points.netgis-not-allowed,.netgis-map.netgis-mode-draw-lines.netgis-not-allowed,.netgis-map.netgis-mode-draw-polygons.netgis-not-allowed{cursor:no-drop}.netgis-map .ol-scale-bar{right:24mm;bottom:10mm;left:auto}.netgis-client.netgis-footer>.netgis-map .ol-scale-bar{bottom:46mm}.netgis-menu{position:absolute;left:0;right:0;top:0;max-height:12mm;line-height:12mm;white-space:nowrap;text-align:right;font-size:0;z-index:10000}.netgis-menu.netgis-menu-large{max-height:100%}.netgis-menu .netgis-menu-toggle{z-index:1}.netgis-menu>*{display:inline-block;min-width:12mm;height:12mm;padding:0 4mm;margin:0;font-size:4mm!important}.netgis-menu>h1{position:absolute;left:0;top:0;bottom:0;font-weight:bold;cursor:default}.netgis-menu a{color:inherit;text-decoration:none}.netgis-menu button,.netgis-menu select{color:inherit;background:none;border:none;outline:none;cursor:pointer}.netgis-menu button img,.netgis-menu a img{position:relative;top:.7mm;height:1em}.netgis-menu button i:not(:only-child),.netgis-menu a i:not(:only-child),.netgis-menu button img:not(:only-child),.netgis-menu a img:not(:only-child){width:4mm;margin-right:3mm;text-align:center}.netgis-menu>.netgis-wrapper{display:inline-block;position:relative;padding:0}.netgis-menu>.netgis-wrapper>.netgis-icon{position:absolute;left:0;top:0;padding-left:4mm;pointer-events:none}.netgis-menu>.netgis-wrapper select{width:100%;height:100%;padding-left:11mm}.netgis-menu>.netgis-wrapper select:last-child{padding-left:4mm}@media (max-width:599px){.netgis-menu>*:not(.netgis-menu-toggle){display:block;width:100%;text-align:left}.netgis-menu{overflow:hidden}.netgis-menu.netgis-menu-large{overflow-y:auto}.netgis-menu .netgis-dropdown{height:auto}.netgis-menu .netgis-dropdown ul{position:relative}.netgis-menu .netgis-dropdown li{height:auto}.netgis-menu .netgis-dropdown li>ul{top:auto;left:auto}}@media (min-width:600px){.netgis-menu-toggle{display:none!important}}.netgis-modal{display:none;position:absolute;width:100%;height:100%;top:0;left:0;padding:6mm;z-index:10000;background:rgba(0,0,0,0.6)}.netgis-modal.netgis-show{display:block}.netgis-modal>*{position:relative;width:100%;height:100%;max-width:150mm;margin:0 auto}.netgis-modal .netgis-content{position:absolute;width:100%;top:12mm;bottom:0;padding:12mm;overflow:auto}.netgis-modal .netgis-button{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel{position:absolute;left:0;width:80mm;top:12mm;bottom:0;z-index:1000;-webkit-transform:translateX(-110%);transform:translateX(-110%);transition:transform 150ms ease;will-change:transform}.netgis-panel.netgis-show{-webkit-transform:none;transform:none}.netgis-client.netgis-footer>.netgis-panel{bottom:36mm}.netgis-panel>div{position:absolute;left:0;right:0;top:12mm;bottom:0;overflow:auto}.netgis-panel h2{margin:0 4mm;font-size:1em}.netgis-panel .netgis-button,.netgis-panel label{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel input[type=text]{margin-top:3mm}.netgis-panel .netgis-half{display:inline-block;width:50%!important;padding-right:1mm}.netgis-panel .netgis-half+.netgis-half{padding-left:1mm;padding-right:0}.netgis-panel .netgis-anim-bottom{transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-panel .netgis-anim-bottom.netgis-hide{display:initial;-webkit-transform:translateY(110%);transform:translateY(110%)}.netgis-panel .netgis-resize-bottom{max-height:80%}.netgis-popup{display:none;position:absolute;width:80mm;max-width:100mm;height:20mm;left:0;top:0;transform:translate(-50%,-100%);z-index:1000}.netgis-popup.netgis-fade{opacity:.5;transition:opacity .5s ease}.netgis-popup.netgis-fade:hover{opacity:1}.netgis-popup.netgis-show{display:block}.netgis-popup .netgis-arrow-down{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:0;height:0;border-left:3mm solid transparent;border-right:3mm solid transparent;border-top:3mm solid white}.netgis-popup .netgis-content{position:absolute;width:100%;min-height:12mm;max-height:100mm;left:0;bottom:2.9mm;padding:4mm 0;overflow:auto;cursor:default;box-shadow:0 1mm 4mm 0 rgba(0,0,0,0.3)}.netgis-popup .netgis-closer{position:absolute;right:0;top:0;height:9mm;background:none;width:100%;text-align:left}.netgis-popup .netgis-closer i{position:absolute;right:3mm}.netgis-popup .netgis-loader{font-size:6mm;text-align:center}.netgis-popup .netgis-wrapper{max-height:80mm;margin-top:5mm;padding:0 3mm;overflow:auto}.netgis-popup table{width:100%;border:0;border-collapse:collapse;table-layout:fixed;word-wrap:break-word}.netgis-popup th,.netgis-popup td{padding:2mm;text-align:left;vertical-align:top}.netgis-popup th[colspan]{padding-top:4mm}.netgis-popup tr:first-of-type th[colspan]{padding-top:0}.netgis-popup .netgis-wrapper button{width:100%;height:12mm;text-align:left}.netgis-popup summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-popup details>div{padding:4mm}.netgis-search{width:100%;transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-search.netgis-hide{display:initial!important;-webkit-transform:translateY(-200%);transform:translateY(-200%)}.netgis-search>label{display:inline-block;position:relative;width:100%;min-height:12mm}@media (max-width:599px){.netgis-search.netgis-responsive{left:0;right:0}}.netgis-search>label>input{width:100%;min-width:60mm;height:12mm;padding:1mm 4mm;vertical-align:top;border:none}.netgis-search>label>button{position:absolute!important;width:12mm;height:12mm;top:0;right:0;background:none}.netgis-search>ul{max-height:60mm;overflow-y:auto;margin:0;padding:0;list-style-type:none}.netgis-search li .netgis-button{width:100%;height:12mm;padding:0 3mm;text-align:left}.netgis-search li .netgis-button span{opacity:.5}.netgis-search-parcel{position:absolute;top:0;bottom:0;width:100%;overflow:hidden;padding:4mm}.netgis-search-parcel section{position:absolute;left:0;right:0;overflow:auto}.netgis-search-parcel section:first-of-type{top:0;bottom:0;padding:6mm}.netgis-search-parcel section:last-of-type{top:50%;bottom:0}.netgis-search-parcel h3{margin:0;margin-bottom:4mm}.netgis-search-parcel label{display:block;margin:3mm 0;margin-bottom:0;cursor:pointer;font-weight:bold}.netgis-search-parcel label:first-child{margin-top:0}.netgis-search-parcel label span:first-child{display:block}.netgis-search-parcel input{width:100%;height:12mm;margin:3mm 0;padding:0 3mm}.netgis-search-parcel .netgis-loader{width:6mm;height:6mm;top:8mm;right:3mm;font-size:6mm}.netgis-search-parcel ul{margin:0;padding:0;list-style-type:none}.netgis-search-parcel li button{text-align:left}.netgis-search-parcel button{display:block;width:100%;height:12mm;padding:0 3mm;margin:0}.netgis-search-parcel .netgis-table-wrapper{width:100%;margin-top:4mm;overflow:auto}.netgis-search-parcel table{min-width:100%;border-collapse:collapse;white-space:nowrap}.netgis-search-parcel table thead{position:-webkit-sticky;position:sticky;top:0;z-index:10}.netgis-search-parcel tr{height:12mm}.netgis-search-parcel th{text-align:left;padding:0 3mm}.netgis-search-parcel td{text-align:left;padding:0 3mm;cursor:pointer}.netgis-search-parcel td:first-child{padding:0}.netgis-search-parcel table button{display:inline-block;width:12mm;height:12mm;background:none}.netgis-search-parcel p{margin:4mm 3mm;font-style:italic}.netgis-search-place{position:absolute;width:100%;max-width:100mm;right:4mm;top:16mm;z-index:900}.netgis-tabs{position:relative}.netgis-tabs>.netgis-header{position:absolute;width:100%;height:12mm;left:0;top:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.netgis-tabs>.netgis-content{position:absolute;width:100%;left:0;top:12mm;bottom:0}.netgis-tabs.netgis-scroll>.netgis-header{height:16mm}.netgis-tabs.netgis-scroll>.netgis-content{top:16mm}.netgis-tabs>.netgis-header .netgis-button{display:inline-block;width:auto}.netgis-tabs>.netgis-content section{position:absolute;width:100%;height:100%;left:0;top:0;padding:12mm;overflow:auto}.netgis-tabs>.netgis-content section.netgis-hide{display:none}.netgis-font{font-family:Arial,sans-serif}.netgis-color-a{background-color:#900;color:#fff}.netgis-color-b{background-color:#430433;color:#fff}.netgis-color-c{background-color:#470f1b;color:#fff}.netgis-color-d{background-color:#f6f5f5;color:#000}.netgis-color-e{background-color:#fff;color:#000}.netgis-hover-a:hover{background-color:#900;color:#fff}.netgis-hover-b:hover{background-color:#430433;color:#fff}.netgis-hover-c:hover{background-color:#470f1b;color:#fff}.netgis-hover-d:hover{background-color:#f6f5f5;color:#000}.netgis-hover-e:hover{background-color:#fff;color:#000}.netgis-text-a{color:#900}.netgis-text-b{color:#430433}.netgis-text-c{color:#470f1b}.netgis-text-d{color:#f6f5f5}.netgis-text-e{color:#fff}.netgis-hover-text-a:hover{color:#900}.netgis-hover-text-b:hover{color:#430433}.netgis-hover-text-c:hover{color:#470f1b}.netgis-hover-text-d:hover{color:#f6f5f5}.netgis-hover-text-e:hover{color:#fff}.netgis-timeslider{position:absolute;width:100%;height:36mm;bottom:0;box-shadow:0 0 4mm 0 rgba(0,0,0,0.3);z-index:1000}.netgis-timeslider:hover{z-index:1000}.netgis-timeslider.netgis-active{z-index:1000;cursor:grabbing}.netgis-timeslider>.netgis-header{position:absolute;width:100%;height:12mm;text-align:left;z-index:1}.netgis-timeslider>.netgis-wrapper{position:absolute;width:100%;top:12mm;bottom:0;overflow-x:auto;cursor:grab}.netgis-timeslider.netgis-active>.netgis-wrapper{cursor:grabbing}.netgis-timeslider table{height:100%;border-collapse:collapse}.netgis-timeslider td{position:relative;min-width:32mm;height:100%;white-space:nowrap}.netgis-timeslider td:not(:empty){padding:0}.netgis-timeslider td .netgis-button{height:100%;opacity:.5;cursor:inherit!important}.netgis-timeslider td .netgis-button .netgis-icon{position:relative}.netgis-timeslider td .netgis-button span{margin-left:2mm!important;margin-right:3mm}.netgis-timeslider td.netgis-active .netgis-button,.netgis-timeslider:not(.netgis-active) td:hover .netgis-button{opacity:1}.netgis-toolbox{position:absolute;top:12mm!important;bottom:0!important;width:100%;overflow:hidden}.netgis-toolbox section{position:absolute;left:0;right:0;overflow:auto}.netgis-toolbox section:first-of-type{top:0;bottom:0}.netgis-toolbox section:last-of-type{top:50%;bottom:0}.netgis-toolbox section:last-of-type>div{position:absolute;width:100%;top:12mm;bottom:0;overflow:auto}.netgis-toolbox button:hover i{color:inherit!important}.netgis-toolbox button.netgis-active{font-weight:bold}.netgis-toolbox label{display:block;width:100%;min-height:12mm;text-align:left;position:relative;padding:4mm;cursor:pointer}.netgis-toolbox input[type=checkbox]{width:4mm;height:4mm;margin:0 4mm 0 0}.netgis-toolbox input[type=checkbox]:last-child{float:right;margin-right:0}.netgis-toolbox input[type=text]{width:100%;height:10mm;padding:0 2mm;margin-top:3mm}.netgis-toolbox input[type=number]{position:absolute;right:2mm;width:24mm;top:2.5mm;height:8mm;padding:0 1mm}.netgis-tree{display:block;line-height:12mm;padding:0;margin:0;list-style-type:none}.netgis-tree ul{padding:0;margin:0;padding-left:9mm;list-style-type:none}.netgis-tree .netgis-folder{position:relative}.netgis-tree summary{display:block}.netgis-tree summary label{text-align:center}.netgis-tree .netgis-folder .netgis-icon{width:6mm;left:12mm;color:#eab000}.netgis-tree .netgis-folder .netgis-partial{opacity:.5}.netgis-tree details[open]>summary>.netgis-hide-open,.netgis-tree details>summary>.netgis-show-open{display:none}.netgis-tree details[open]>summary>.netgis-show-open{display:initial}.netgis-tree .netgis-folder>details>summary>label{position:absolute;width:12mm;top:0;left:0}.netgis-tree .netgis-folder>details>summary>span{margin-left:17mm!important}.netgis-tree .netgis-item{position:relative}.netgis-tree .netgis-item label{padding:0 4mm;padding-left:3mm}.netgis-tree .netgis-item label input{margin-right:4mm}.netgis-tree .netgis-item summary{position:absolute;width:12mm;height:12mm;right:0;top:0;text-align:center}.netgis-tree .netgis-item summary+*{position:relative;margin-left:7.5mm}.netgis-tree .netgis-item details label{position:relative}.netgis-tree .netgis-item details label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm;overflow:hidden}.netgis-tree .netgis-item details label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-tree .netgis-item details label input[type=range]{width:100%;cursor:pointer}.netgis-bold{font-weight:bold}.netgis-clip-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.netgis-center{text-align:center!important}.netgis-clickable{cursor:pointer!important}.netgis-resize-right{resize:horizontal;overflow-x:auto;min-width:40mm;max-width:100%}.netgis-resize-bottom{resize:vertical;overflow-y:auto;min-height:24mm;max-height:100%}.netgis-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.netgis-shadow{box-shadow:0 .5mm 1mm 0 rgba(0,0,0,0.1),0 1mm 2.5mm 0 rgba(0,0,0,0.05)!important}.netgis-shadow-large{box-shadow:0 1mm 2mm 0 rgba(0,0,0,0.1),0 2mm 5mm 0 rgba(0,0,0,0.05)!important}.netgis-text-shadow{text-shadow:0 0 1mm rgba(0,0,0,1.0)}.netgis-round{border-radius:2mm}.netgis-hide{display:none!important}.netgis-client button,.netgis-button{position:relative;padding:0 4mm;font-family:inherit;text-decoration:none;border:none;outline:none;cursor:pointer}.netgis-button .netgis-icon{display:inline-block;position:absolute;width:12mm;left:0;top:0;bottom:0;line-height:12mm;text-align:center;font-size:1.2em}.netgis-button.netgis-center .netgis-icon:first-child{position:static}.netgis-button .netgis-icon:last-child{left:auto;right:0}.netgis-button:not(.netgis-center) .netgis-icon+*:not(.netgis-icon){margin-left:8mm}.netgis-form h3{font-size:1em;margin-top:0;margin-bottom:4mm}.netgis-form ul{padding:0;padding-left:12mm;margin-top:0;margin-bottom:6mm;list-style-type:square}.netgis-form li{padding-left:2mm}.netgis-form label{display:block;margin-bottom:6mm;font-weight:bold;cursor:pointer;user-select:none}.netgis-form input,.netgis-form select{display:block;width:100%;margin-top:4mm;padding:2mm}.netgis-form input[type=file]{padding:6mm;cursor:pointer;background:#efefef}.netgis-form input[type=checkbox]{display:inline-block;width:12mm;margin:0}.netgis-form input[type=checkbox]:first-child{width:4mm;margin-right:3mm;margin-top:2mm;margin-bottom:2mm}.netgis-form button{display:block;width:100%;height:12mm}.netgis-form button:not(:last-child){margin-bottom:6mm}.netgis-form select{cursor:pointer}.netgis-loader{position:absolute;width:100%;height:100%;z-index:999999;text-align:center;font-size:12mm;cursor:progress}.netgis-loader *{position:absolute;width:100%;left:0;top:50%;transform:translateY(-50%);animation:netgis-spin 2s linear infinite}@keyframes netgis-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@media (max-width:599px){.netgis-hide-mobile{display:none!important}}@media (min-width:600px){.netgis-hide-desktop{display:none!important}} \ No newline at end of file diff --git a/templates/map/client/dist/netgis.min.js b/templates/map/client/dist/netgis.min.js index 587a5af5..346717df 100644 --- a/templates/map/client/dist/netgis.min.js +++ b/templates/map/client/dist/netgis.min.js @@ -1,5733 +1,445 @@ -var $jscomp = $jscomp || {}; -$jscomp.scope = {}; -$jscomp.ASSUME_ES5 = !1; -$jscomp.ASSUME_NO_NATIVE_MAP = !1; -$jscomp.ASSUME_NO_NATIVE_SET = !1; -$jscomp.SIMPLE_FROUND_POLYFILL = !1; -$jscomp.defineProperty = - $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties - ? Object.defineProperty - : function (a, b, c) { - a != Array.prototype && a != Object.prototype && (a[b] = c.value); - }; -$jscomp.getGlobal = function (a) { - return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a; -}; -$jscomp.global = $jscomp.getGlobal(this); -$jscomp.polyfill = function (a, b, c, d) { - if (b) { - c = $jscomp.global; - a = a.split("."); - for (d = 0; d < a.length - 1; d++) { - var e = a[d]; - e in c || (c[e] = {}); - c = c[e]; - } - a = a[a.length - 1]; - d = c[a]; - b = b(d); - b != d && null != b && $jscomp.defineProperty(c, a, { configurable: !0, writable: !0, value: b }); - } -}; -$jscomp.polyfill( - "Number.parseFloat", - function (a) { - return a || parseFloat; - }, - "es6", - "es3" -); -$jscomp.polyfill( - "Number.parseInt", - function (a) { - return a || parseInt; - }, - "es6", - "es3" -); -$jscomp.arrayIteratorImpl = function (a) { - var b = 0; - return function () { - return b < a.length ? { done: !1, value: a[b++] } : { done: !0 }; - }; -}; -$jscomp.arrayIterator = function (a) { - return { next: $jscomp.arrayIteratorImpl(a) }; -}; -$jscomp.SYMBOL_PREFIX = "jscomp_symbol_"; -$jscomp.initSymbol = function () { - $jscomp.initSymbol = function () {}; - $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); -}; -$jscomp.SymbolClass = function (a, b) { - this.$jscomp$symbol$id_ = a; - $jscomp.defineProperty(this, "description", { configurable: !0, writable: !0, value: b }); -}; -$jscomp.SymbolClass.prototype.toString = function () { - return this.$jscomp$symbol$id_; -}; -$jscomp.Symbol = (function () { - function a(c) { - if (this instanceof a) throw new TypeError("Symbol is not a constructor"); - return new $jscomp.SymbolClass($jscomp.SYMBOL_PREFIX + (c || "") + "_" + b++, c); - } - var b = 0; - return a; -})(); -$jscomp.initSymbolIterator = function () { - $jscomp.initSymbol(); - var a = $jscomp.global.Symbol.iterator; - a || (a = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("Symbol.iterator")); - "function" != typeof Array.prototype[a] && - $jscomp.defineProperty(Array.prototype, a, { - configurable: !0, - writable: !0, - value: function () { - return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this)); - }, - }); - $jscomp.initSymbolIterator = function () {}; -}; -$jscomp.initSymbolAsyncIterator = function () { - $jscomp.initSymbol(); - var a = $jscomp.global.Symbol.asyncIterator; - a || (a = $jscomp.global.Symbol.asyncIterator = $jscomp.global.Symbol("Symbol.asyncIterator")); - $jscomp.initSymbolAsyncIterator = function () {}; -}; -$jscomp.iteratorPrototype = function (a) { - $jscomp.initSymbolIterator(); - a = { next: a }; - a[$jscomp.global.Symbol.iterator] = function () { - return this; - }; - return a; -}; -$jscomp.iteratorFromArray = function (a, b) { - $jscomp.initSymbolIterator(); - a instanceof String && (a += ""); - var c = 0, - d = { - next: function () { - if (c < a.length) { - var e = c++; - return { value: b(e, a[e]), done: !1 }; - } - d.next = function () { - return { done: !0, value: void 0 }; - }; - return d.next(); - }, - }; - d[Symbol.iterator] = function () { - return d; - }; - return d; -}; -$jscomp.polyfill( - "Array.prototype.values", - function (a) { - return a - ? a - : function () { - return $jscomp.iteratorFromArray(this, function (a, c) { - return c; - }); - }; - }, - "es8", - "es3" -); -$jscomp.polyfill( - "Number.isNaN", - function (a) { - return a - ? a - : function (a) { - return "number" === typeof a && isNaN(a); - }; - }, - "es6", - "es3" -); -$jscomp.owns = function (a, b) { - return Object.prototype.hasOwnProperty.call(a, b); -}; -$jscomp.assign = - "function" == typeof Object.assign - ? Object.assign - : function (a, b) { - for (var c = 1; c < arguments.length; c++) { - var d = arguments[c]; - if (d) for (var e in d) $jscomp.owns(d, e) && (a[e] = d[e]); - } - return a; - }; -$jscomp.polyfill( - "Object.assign", - function (a) { - return a || $jscomp.assign; - }, - "es6", - "es3" -); -var netgis = netgis || {}; -netgis.Attribution = function (a) { - this.config = a; - this.layers = this.client = null; - this.items = []; - this.initElements(a); -}; -netgis.Attribution.prototype.initElements = function (a) { - this.container = document.createElement("section"); - this.container.className = "netgis-attribution netgis-text-a"; - a.attribution && a.attribution.prefix && this.items.push(a.attribution.prefix); - this.update(); -}; -netgis.Attribution.prototype.attachTo = function (a) { - a.appendChild(this.container); - a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); - a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onEditLayerChange.bind(this)); -}; -netgis.Attribution.prototype.update = function () { - var a = "© " + this.items.join(", "); - this.appendix && (a += ", " + this.appendix); - this.container.innerHTML = a; -}; -netgis.Attribution.prototype.add = function (a) { - for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) return; - this.items.push(a); - this.update(); -}; -netgis.Attribution.prototype.remove = function (a) { - for (var b = 0; b < this.items.length; b++) - if (this.items[b] === a) { - this.items.splice(b, 1); - break; - } - this.update(); -}; -netgis.Attribution.prototype.onMapLayerToggle = function (a) { - a = a.detail; - for (var b = this.config.layers, c = null, d = 0; d < b.length; d++) { - var e = b[d]; - e.id === a.id && (c = e.attribution); - } - c && (a.on ? this.add(c) : this.remove(c)); -}; -netgis.Attribution.prototype.onContextUpdate = function (a) { - this.layers = []; - for (var b = 0; b < a.layers.length; b++) { - var c = a.layers[b]; - c.attribution && 0 < c.attribution.length && (this.layers[c.id] = c.attribution); - } - for (b = 0; b < a.layers.length; b++) if (((c = a.layers[b]), c.active)) this.onLayerShow({ id: c.id }); -}; -netgis.Attribution.prototype.onLayerShow = function (a) { - if ((a = this.layers[a.id])) { - for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) return; - this.items.push(a); - this.update(); - } -}; -netgis.Attribution.prototype.onLayerHide = function (a) { - if ((a = this.layers[a.id])) { - for (var b = 0; b < this.items.length; b++) - if (this.items[b] === a) { - this.items.splice(b, 1); - break; - } - this.update(); - } -}; -netgis.Attribution.prototype.onEditLayerChange = function (a) { - a = a.detail.geojson.area; - for (var b = 0; b < this.items.length; b++) - if (-1 < this.items[b].search("Zeichnungsfl\u00e4che: ")) { - this.items.splice(b, 1); - break; - } - this.appendix = a && 0 < a ? "Zeichnungsfl\u00e4che: " + netgis.util.formatArea(a, !0) + "" : null; - this.update(); -}; -netgis = netgis || {}; -netgis.Client = function (a, b) { - this.config = b; - this.logEvents = !1; - this.initParams(b); - this.initConfig(b); - this.initElements(a); - this.initModules(b); - this.initEvents(); - 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.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); - } -}; -netgis.Client.prototype.initConfig = function (a) { - a.wmc && a.wmc.url && this.requestContextWMC(a.wmc.url, a.wmc.id); - a.ows && a.ows.url && this.requestContextOWS(a.ows.url); -}; -netgis.Client.prototype.initElements = function (a) { - alert(this.config); - netgis.util.isString(a) && (a = document.getElementById(a)); - a.classList.add("netgis-client", "netgis-font"); - if (a.hasAttribute("data-lon") && a.hasAttribute("data-lat")) { - var b = Number.parseFloat(a.getAttribute("data-lon")), - c = Number.parseFloat(a.getAttribute("data-lat")); - this.config.map.center_lonlat = [b, c]; - } - 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") && ((b = "true" === a.getAttribute("data-editable")), (this.config.tools.editable = b)); - this.container = a; -}; -netgis.Client.prototype.initOutput = function (a) { - if (a.output && a.output.id) { - if ((a = document.getElementById(a.output.id)) && a.value && 0 < a.value.length) { - var b = JSON.parse(a.value); - netgis.util.invoke(this.container, netgis.Events.MAP_EDIT_LAYER_LOADED, { geojson: b }); - } - this.output = a; - } - this.output || ((this.output = document.createElement("input")), this.output.setAttribute("type", "hidden"), (this.output.className = "netgis-storage"), 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.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); -}; -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.handleEvent = function (a) { - var b = a.type; - a = a.detail; - !0 === this.logEvents && 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 600 > this.container.getBoundingClientRect().width; -}; -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().requestContext(a, this.onContextResponseWMC.bind(this)); -}; -netgis.Client.prototype.onContextResponseWMC = function (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.CONTEXT_RESPONSE, { context: 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) { - switch (b) { - case netgis.Commands.LAYERTREE: - netgis.util.invoke(a, netgis.Events.LAYERTREE_TOGGLE, null); - break; - case netgis.Commands.SEARCHPLACE: - netgis.util.invoke(a, netgis.Events.SEARCHPLACE_TOGGLE, null); - break; - case netgis.Commands.SEARCHPARCEL: - netgis.util.invoke(a, netgis.Events.SEARCHPARCEL_TOGGLE, null); - break; - case netgis.Commands.TOOLBOX: - netgis.util.invoke(a, netgis.Events.TOOLBOX_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.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 }); - 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; - default: - console.warn("unhandled command id", b); - } -}; -netgis = netgis || {}; -netgis.Commands = Object.freeze({ - LAYERTREE: "layertree", - SEARCHPLACE: "searchplace", - SEARCHPARCEL: "searchparcel", - TOOLBOX: "toolbox", - VIEW_PREV: "view_prev", - VIEW_NEXT: "view_next", - VIEW: "view", - ZOOM_BOX: "zoom_box", - 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", -}); -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(); - this.initConfig(a); -}; -netgis.Controls.Events = Object.freeze({ BUTTON_CLICK: "controls-button-click" }); -netgis.Controls.prototype.initElements = function () { - this.container = document.createElement("section"); - this.container.className = "netgis-controls netgis-color-e netgis-text-a netgis-shadow netgis-round"; -}; -netgis.Controls.prototype.initConfig = function (a) { - a = a.controls.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); -}; -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; - switch (a.getAttribute("data-id")) { - 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); - } -}; -netgis = netgis || {}; -netgis.Events = Object.freeze({ - CLIENT_CONTEXT_RESPONSE: "client-context-response", - CLIENT_SET_MODE: "client-set-mode", - 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_TOGGLE: "map-layer-toggle", - MAP_LAYER_TRANSPARENCY: "map-layer-transparency", - 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", - TREE_ITEM_CHANGE: "tree-item-change", - TREE_ITEM_SLIDER_CHANGE: "tree-item-slider-change", - TREE_BUTTON_CLICK: "tree-button-click", - LAYERTREE_TOGGLE: "layertree-toggle", - 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", - 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.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.Import = function (a) { - this.config = a; - this.initElements(a); - this.initSections(); - this.initPreview(); -}; -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 () { - this.sections = {}; - var a = 0; - this.config["import"].geoportal_tab && - ((this.sections.geoportal = this.tabs.getContentSection(a)), - (a += 1), - this.sections.geoportal.classList.add("netgis-geoportal"), - (this.geoportalSearch = this.addInputText(this.sections.geoportal, "Suche im Datenkatalog:")), - this.geoportalSearch.addEventListener("change", this.onGeoportalSearchChange.bind(this)), - this.geoportalSearch.setAttribute("placeholder", "Thema, Schlagwort..."), - (this.geoportalResults = new netgis.Tree()), - 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(a); - a += 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(a); - a += 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(a); - a += 1; - this.addInputFile(this.sections.geojson, "GeoJSON-Datei:", ".geojson,.json"); - this.addText(this.sections.geojson, "

Unterst\u00fctzte Koordinatensysteme:

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

Unterst\u00fctzte Koordinatensysteme:

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

Unterst\u00fctzte Koordinatensysteme:

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

Unterst\u00fctzte Koordinatensysteme:

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

Unterst\u00fctzte Koordinatensysteme:

"); - this.addButton(this.sections.shapefile, "Datei laden", this.onShapefileAcceptClick.bind(this)); -}; -netgis.Import.prototype.initPreview = function () { - this.preview = new netgis.Modal("Vorschau"); - this.preview.attachTo(this.modal.content); - this.previewMapContainer = document.createElement("div"); - this.previewMapContainer.className = "netgis-preview-map"; - this.preview.content.appendChild(this.previewMapContainer); - if (ol) { - var a = this.config.map; - a = { projection: a.projection, center: a.centerLonLat ? ol.proj.fromLonLat(a.centerLonLat) : a.center, zoom: a.zoom }; - this.previewMap = new ol.Map({ target: this.previewMapContainer, view: new ol.View(a), pixelRatio: 1, moveTolerance: 3, controls: [] }); - this.previewMap.getView().padding = [10, 10, 10, 10]; - this.previewMap.addLayer(new ol.layer.Tile({ source: new ol.source.OSM() })); - } - this.previewTree = new netgis.Tree(); - this.previewTree.container.classList.add("netgis-preview-tree"); - this.previewTree.attachTo(this.preview.content); - this.previewTree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE, this.onPreviewTreeItemChange.bind(this)); - this.previewSubmit = document.createElement("button"); - this.previewSubmit.setAttribute("type", "button"); - this.previewSubmit.className = "netgis-import-submit netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow"; - this.previewSubmit.innerHTML = "Hinzuf\u00fcgen"; - this.previewSubmit.addEventListener("click", this.onPreviewSubmitClick.bind(this)); - this.preview.content.appendChild(this.previewSubmit); -}; -netgis.Import.prototype.attachTo = function (a) { - a.appendChild(this.modal.container); - a.addEventListener(netgis.Events.IMPORT_LAYER_SHOW, this.onImportShow.bind(this)); - a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES, this.onImportPreviewFeatures.bind(this)); -}; -netgis.Import.prototype.addText = function (a, b) { - var c = document.createElement("div"); - c.innerHTML = b; - a.appendChild(c); - return c; -}; -netgis.Import.prototype.addButton = function (a, b, c) { - var d = document.createElement("button"); - d.className = "netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow"; - d.setAttribute("type", "button"); - d.innerHTML = b; - c && (d.onclick = c); - a.appendChild(d); - return d; -}; -netgis.Import.prototype.addInputText = function (a, b, c) { - var d = document.createElement("label"); - d.innerHTML = b; - var e = document.createElement("input"); - e.setAttribute("type", "text"); - d.appendChild(e); - if (c) { - b = "list-" + netgis.util.stringToID(b); - var f = document.createElement("datalist"); - f.setAttribute("id", b); - for (var g = 0; g < c.length; g++) { - var h = document.createElement("option"); - h.setAttribute("value", c[g]); - f.appendChild(h); - } - a.appendChild(f); - e.setAttribute("list", b); - } - a.appendChild(d); - return e; -}; -netgis.Import.prototype.addInputSelect = function (a, b, c) { - c = document.createElement("label"); - c.innerHTML = b; - b = document.createElement("select"); - c.appendChild(b); - a.appendChild(c); - return b; -}; -netgis.Import.prototype.addInputFile = function (a, b, c) { - var d = document.createElement("label"); - d.innerHTML = b; - b = document.createElement("input"); - b.setAttribute("type", "file"); - b.setAttribute("accept", c); - d.appendChild(b); - a.appendChild(d); - return b; -}; -netgis.Import.prototype.getLayerOrder = function () { - return 1e4; -}; -netgis.Import.prototype.showDetailsWMS = function (a) { - var b = this.sections.wms, - c = b.getElementsByTagName("label"); - b = b.getElementsByTagName("button"); - a - ? (c[1].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"), b[1].classList.remove("netgis-hide")) - : (c[1].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"), b[1].classList.add("netgis-hide")); -}; -netgis.Import.prototype.showDetailsWFS = function (a) { - var b = this.sections.wfs, - c = b.getElementsByTagName("label"); - b = b.getElementsByTagName("button"); - a - ? (c[1].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"), b[1].classList.remove("netgis-hide")) - : (c[1].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"), b[1].classList.add("netgis-hide")); -}; -netgis.Import.prototype.submitImportLayer = function (a) { - !0 === this.config["import"].preview - ? netgis.util.invoke(this.modal.container, netgis.Events.IMPORT_LAYER_PREVIEW, a) - : (this.config.layers.push(a), netgis.util.invoke(this.modal.container, netgis.Events.IMPORT_LAYER_ACCEPT, a), this.modal.hide()); -}; -netgis.Import.prototype.onImportShow = function (a) { - this.modal.show(); - this.tabs.updateHeaderScroll(); -}; -netgis.Import.prototype.onWMSLoadClick = function (a) { - this.showDetailsWMS(!1); - var b = this.sections.wms.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) : e.search("request"); - } - d = d.join("&"); - -1 === d.search("service=") && (d += "&service=WMS"); - netgis.util.request(a + "?" + d, 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), 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); - 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="); - d = { id: d, folder: null, active: !0, order: this.getLayerOrder(), type: netgis.LayerTypes.WMS, url: b, title: e, name: f, format: c, tiled: !0 }; - this.config.layers.push(d); - netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_ACCEPT, d); - 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); -}; -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 = 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.onGeoportalSearchChange = function (a) { - a = this.geoportalSearch.value; - a = a.trim(); - var b = this.config["import"].geoportal_search_url; - b = netgis.util.replace(b, "{query}", a); - console.info("Geoportal Search:", b); - netgis.util.request(b, this.onGeoportalSearchResponse.bind(this)); -}; -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(); - console.info("Geoportal Response:", a); - this.geoportalDataRaw = a = a.wms.srv; - this.geoportalData = []; - for (var c = 0; c < a.length; c++) { - var d = a[c]; - console.info("Result Layer:", d); - 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++) { - var h = e[g]; - console.info("Result Child:", h); - this.geoportalResults.addCheckbox(f, g, h.title); - } - d.children = e; - this.geoportalData.push(d); - } -}; -netgis.Import.prototype.onGeoportalSubmit = function (a) { - console.info("Geoportal Submit..."); - 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]; - console.info("Item:", d, e, f, g); - var 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.prototype.initConfig = function (a) { - for (a = a.layers.length - 1; 0 <= a; a--); -}; -netgis.Info.prototype.attachTo = function (a) { - this.popup.attachTo(a); - a.addEventListener(netgis.Events.MAP_CLICK, this.onMapClick.bind(this)); - a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this)); -}; -netgis.Info.prototype.onContextResponse = function (a) { - this.initConfig(a.detail.context.config); -}; -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; - } - if (c) - switch (c.type) { - case netgis.LayerTypes.WMS: - case netgis.LayerTypes.WMST: - this.queryLayers[a] = c; - } - } else delete this.queryLayers[a]; -}; -netgis.Info.prototype.onMapClick = function (a) { - a = a.detail; - if (a.mode === netgis.Modes.VIEW) { - this.popup.container !== a.overlay && this.popup.attachTo(a.overlay); - this.popup.clearContent(); - var b = 0, - c; - for (c in this.queryLayers) { - var d = this.queryLayers[c]; - switch (d.type) { - case netgis.LayerTypes.WMS: - case netgis.LayerTypes.WMST: - var e = d.url; - d.query_url && (e = d.query_url); - var f = [ - "service=WMS", - "version=1.1.0", - "request=GetFeatureInfo", - "styles=", - "layers=" + window.encodeURIComponent(d.name), - "query_layers=" + window.encodeURIComponent(d.name), - "bbox=" + a.view.bbox.join(","), - "srs=" + a.view.projection, - "width=" + a.view.width, - "height=" + a.view.height, - "x=" + a.pixel[0], - "y=" + a.pixel[1], - "info_format=text/html", - ]; - e = e + (-1 === e.indexOf("?") ? "?" : "") + f.join("&"); - console.info("WMS REQUEST 1:", e); - netgis.util.request(e, this.onLayerResponseWMS.bind(this), { title: d.title }); - b += 1; - } - (e = d.query_url) && - "" !== e && - ((e = netgis.util.replace(e, "{bbox}", a.view.bbox.join(","))), - (e = netgis.util.replace(e, "{proj}", a.view.projection)), - (e = netgis.util.replace(e, "{width}", a.view.width)), - (e = netgis.util.replace(e, "{height}", a.view.height)), - (e = netgis.util.replace(e, "{x}", a.pixel[0])), - (e = netgis.util.replace(e, "{y}", a.pixel[1])), - (e = netgis.util.replace(e, "{lon}", a.lon)), - (e = netgis.util.replace(e, "{lat}", a.lat)), - console.info("WMS REQUEST 2:", e), - netgis.util.request(e, this.onLayerResponseWMS.bind(this), { title: d.title }), - (b += 1)); - } - 0 < b ? (this.popup.showLoader(), this.popup.show()) : this.popup.hide(); - } -}; -netgis.Info.prototype.onLayerResponseWMS = function (a, b) { - this.popup.hideLoader(); - this.popup.addContent(["
", b.title, "
", a, "
"].join("")); -}; -netgis = netgis || {}; -netgis.LayerID = Object.freeze({ EDITABLE: "editable-layer", NON_EDITABLE: "non-editable-layer" }); -netgis = netgis || {}; -netgis.LayerTree = function (a) { - this.config = a; - this.importFolder = null; - this.initElements(); - this.initConfig(a); - this.initFolders(); -}; -netgis.LayerTree.prototype.initElements = function () { - this.panel = new netgis.Panel("Layers"); - this.tree = new netgis.Tree(); - 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)); -}; -netgis.LayerTree.prototype.initFolders = function () { - this.editFolder = this.tree.addFolder(null, "edit-folder", "Zeichnung", !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) { - a.layertree && a.layertree.title && this.panel.setTitle(a.layertree.title); - for (var c = a.folders, d = {}, e = 0; e < c.length; e++) { - var f = c[e], - g = this.tree.addFolder(null, f.id, f.title, b, !1); - d[f.id] = g; - !0 === f.open && this.tree.setFolderOpen(f.id, !0); - } - b = a.layers; - for (e = 0; e < b.length; e++) { - g = b[e]; - f = d[g.folder] ? d[g.folder] : null; - var h = g.id ? g.id : e.toString(), - k = !1; - if (f) - for (var l = 0; l < c.length; l++) { - var m = c[l]; - m.id === g.folder && (k = m.radio); - } - g = !0 === k ? this.tree.addRadioButton(f, h, g.title, g.active, this.createDefaultDetails(g)) : this.tree.addCheckbox(f, h, g.title, g.active, !1, this.createDefaultDetails(g)); - g.addEventListener("contextmenu", this.onTreeItemMenu.bind(this)); - } - this.tree.updateFolderChecks(); - c = a.layertree.buttons; - for (e = 0; e < c.length; e++) (d = c[e]), this.tree.addButton(null, d.id, d.title, this.onTreeButtonClick.bind(this)); - a.layertree && !0 === a.layertree.open && this.panel.show(); -}; -netgis.LayerTree.prototype.attachTo = function (a) { - a.appendChild(this.panel.container); - 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.TOOLBOX_TOGGLE, this.onToolboxToggle.bind(this)); - a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE, this.onSearchParcelToggle.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) { - return [{ title: "Transparenz:", type: "slider", val: a.transparency ? Math.round(100 * a.transparency) : 0 }]; -}; -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.onToolboxToggle = function (a) { - this.panel.hide(); -}; -netgis.LayerTree.prototype.onSearchParcelToggle = function (a) { - this.panel.hide(); -}; -netgis.LayerTree.prototype.onTreeButtonClick = function (a) { - a = a.currentTarget; - var b = a.getAttribute("data-id"); - netgis.Client.handleCommand(a, b); -}; -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.tree.addCheckbox(this.importFolder, a.id, a.title, !0, !0, this.createDefaultDetails(a)).addEventListener("contextmenu", this.onTreeItemMenu.bind(this)); - this.tree.updateFolderChecks(); -}; -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)); - 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.onMapEditLayerChange = function (a) { - this.editFolder.classList.remove("netgis-hide"); -}; -netgis = netgis || {}; -netgis.LayerTypes = Object.freeze({ - TMS: "TMS", - WMTS: "WMTS", - WMS: "WMS", - WMST: "WMST", - GEOJSON: "GEOJSON", - VTILES: "VTILES", - WFS: "WFS", - GML: "GML", - GEOPACKAGE: "GEOPACKAGE", - SPATIALITE: "SPATIALITE", - SHAPEFILE: "SHAPEFILE", - WKT: "WKT", - OSM: "OSM", - XYZ: "XYZ", -}); -netgis = netgis || {}; -netgis.Logic = function (a) { - this.client = a; - this.config = a.config; - this.container = a.container; - this.modules = a.modules; - this.initConfig(config); - this.initEvents(); -}; -netgis.Logic.prototype.initConfig = function (a) { - a.wmc && a.wmc.url && new netgis.WMC().requestContext(a.wmc.url, this.onContextLoaded.bind(this)); -}; -netgis.Logic.prototype.initEvents = function () {}; -netgis.Logic.prototype.onMenuButtonClick = function (a) { - a = a.detail; - switch (a.id) { - case "layertree": - this.modules.layertree.panel.toggle(); - break; - case "searchplace": - this.modules.searchplace.search.toggle(); - break; - default: - console.error("unhandled menu button", a); - } -}; -netgis.Logic.prototype.onLayerItemChange = function (a) { - a = a.detail; - if (a.checked) - for (var b = this.config.layers, c = 0; c < b.length; c++) { - var d = b[c]; - d.id === a.id && this.modules.map.addLayer(a.id, d); - } - else this.modules.map.removeLayer(a.id); -}; -netgis.Logic.prototype.onControlsButtonClick = function (a) { - switch (a.detail.id) { - case "zoom_in": - this.modules.map.zoom(1); - break; - case "zoom_out": - this.modules.map.zoom(-1); - break; - case "zoom_home": - this.config.map.bbox ? this.modules.map.zoomBBox(this.config.map.bbox, 500) : this.config.map.centerLonLat && ((a = this.config.map.centerLonLat), this.modules.map.zoomLonLat(a[0], a[1], this.config.map.zoom)); - } -}; -netgis.Logic.prototype.onSearchPlaceChange = function (a) { - var b = this.config.searchplace.url; - b = netgis.util.replace(b, "{query}", window.encodeURIComponent(a.detail.query)); - netgis.util.request(b, this.onSearchPlaceResponse.bind(this)); -}; -netgis.Logic.prototype.onSearchPlaceResponse = function (a) { - a = JSON.parse(a).data; - this.modules.searchplace.search.clearResults(); - for (var b = 0; b < a.length; b++) { - var 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.modules.searchplace.search.addResult(d, JSON.stringify(c)); - } -}; -netgis.Logic.prototype.onSearchPlaceSelect = function (a) { - a = JSON.parse(a.detail.data); - this.modules.map.zoomLonLat(a.lon, a.lat, 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.onSearchPlaceDetailResponse.bind(this))); - } -}; -netgis.Logic.prototype.onSearchPlaceDetailResponse = function (a) { - a = JSON.parse(a); - var b = a.hsnrarr; - if (0 !== b.length) { - this.modules.searchplace.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.modules.searchplace.search.addResult(e, JSON.stringify(d)); - } - } -}; -netgis.Logic.prototype.onSearchPlaceClear = function (a) {}; -netgis.Logic.prototype.onContextLoaded = function (a) { - console.info("Context Loaded:", 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); - this.modules.map && this.modules.map.initConfig(a.config); - this.modules.layertree && this.modules.layertree.initConfig(a.config, !0); -}; -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.hoverBounds = this.hoverFeature = null; - this.selectedFeatures = []; - this.sketchFeatures = []; - this.snap = null; - this.snapFeatures = new ol.Collection(); - this.drawError = this.selectMultiple = this.editEventsSilent = !1; - this.initElements(); - this.initMap(a); - this.initLayers(); - this.initOverlays(); - this.initInteractions(); - this.initConfig(a); - this.setMode(netgis.Modes.VIEW); -}; -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("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 && (proj4.defs(a.projections), proj4.defs("urn:ogc:def:crs:OGC:1.3:CRS84", proj4.defs("EPSG:4326")), ol.proj.proj4.register(proj4)); - var c = { projection: b.projection, center: b.center_lonlat ? ol.proj.fromLonLat(b.center_lonlat, b.projection) : b.center, minZoom: b.min_zoom, maxZoom: b.max_zoom, zoom: b.zoom }; - this.view = new ol.View(c); - this.map = new ol.Map({ target: this.container, view: this.view, pixelRatio: 1, moveTolerance: 5, controls: [] }); - b.scalebar && ((this.scalebar = new ol.control.ScaleLine({ bar: !0 })), this.map.addControl(this.scalebar)); - 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 (a.map.extent) { - var d = this; - window.setTimeout(function () { - d.map.updateSize(); - d.view.fit(a.map.extent); - }, 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; - this.nonEditLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 5e4, style: this.styleNonEdit.bind(this), updateWhileAnimating: a.interactive_render, updateWhileInteracting: a.interactive_render }); - 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.interactive_render, updateWhileInteracting: a.interactive_render }); - 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; - if (this.config.tools.bounds) { - a = new ol.format.GeoJSON().readFeatures(this.config.tools.bounds); - var b = null; - this.config.tools.show_bounds && this.config.styles.bounds && (b = this.createStyle(this.config.styles.bounds)); - this.boundsLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: a }), style: b, zIndex: 6e4 }); - this.map.addLayer(this.boundsLayer); - } -}; -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, - }), - 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 (!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) { - a.map.bbox && this.zoomBBox(a.map.bbox); - a.map.zoom && this.view.setZoom(a.map.zoom); - a = a.layers; - for (var 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_TOGGLE, this.onMapLayerToggle.bind(this)); - a.addEventListener(netgis.Events.MAP_LAYER_TRANSPARENCY, this.onMapLayerTransparency.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.MEASURE_CLEAR, this.onMeasureClear.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.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"); - break; - case netgis.Modes.DRAW_POLYGONS: - this.container.classList.remove("netgis-not-allowed"); - break; - case netgis.Modes.BUFFER_FEATURES_EDIT: - this.clearSketchFeatures(); - } - 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.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.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.createLayer = function (a) { - switch (a.type) { - case netgis.LayerTypes.TMS: - case netgis.LayerTypes.XYZ: - var b = this.createLayerTMS(a.url, a.projection, a.extent, a.scales); - 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.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++) - if (this.config.layers[c].id === a) { - this.config.layers[c].type === netgis.LayerTypes.WMST && netgis.util.invoke(this.container, netgis.Events.TIMESLIDER_HIDE, null); - break; - } - 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, - 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 = this.config.styles.draw, - c = this.config.styles.select, - d = a.getGeometry(), - e = this.hoverFeature === a; - -1 < this.selectedFeatures.indexOf(a) && (e = !0); - var f = e ? c.fill : b.fill; - a = 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: a }) }), fill: new ol.style.Fill({ color: f }), stroke: new ol.style.Stroke({ color: a, 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)); - c.setText( - new ol.style.Text({ - text: [netgis.util.formatArea(e, !0), "4mm sans-serif"], - font: "Arial", - fill: new ol.style.Fill({ color: a }), - 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 = this.config.styles.non_edit, - c = this.config.styles.select, - d = a.getGeometry(), - e = this.hoverFeature === a; - -1 < this.selectedFeatures.indexOf(a) && (e = !0); - var f = e ? c.fill : b.fill; - a = 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: a }) }), fill: new ol.style.Fill({ color: f }), stroke: new ol.style.Stroke({ color: a, 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)); - c.setText( - new ol.style.Text({ - text: [netgis.util.formatArea(e, !0), "4mm sans-serif"], - font: "Arial", - fill: new ol.style.Fill({ color: a }), - 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 = this.config.styles[this.drawError ? "error" : "sketch"], - c = a.getGeometry(), - d = 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 }) }); - c instanceof ol.geom.Polygon && - ((c = c.getArea()), - d.setText( - new ol.style.Text({ - text: [netgis.util.formatArea(c, !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 [d, a]; -}; -netgis.Map.prototype.styleModify = function (a) { - var b = this.config.styles.modify, - 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) { - a = this.config.styles.select; - return new ol.style.Style({ - image: new ol.style.Circle({ radius: a.radius, fill: new ol.style.Fill({ color: a.stroke }) }), - fill: new ol.style.Fill({ color: a.fill }), - stroke: new ol.style.Stroke({ color: a.stroke, width: a.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) { - if (b && c && d) { - b = []; - d = "map" === d ? this.config.map.scales : d; - c = "map" === c ? this.config.map.extent : c; - for (var e = 0; e < d.length; e++) b.unshift(this.getResolutionFromScale(d[e])); - c = new ol.source.TileImage({ - crossOrigin: null, - projection: this.view.getProjection(), - tileGrid: new ol.tilegrid.TileGrid({ extent: c, origin: [c[0], c[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] - 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) { - 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.createLayerWMST = function (a, b, c, d, e, f) { - 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 q = m.length - 43 - 1, p = 0; p < q; p++) n[5 + p] = m[43 + p]; - 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, q, p) { - 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"); - p(); - }; - l.onload = function () { - if (200 === l.status) { - g.clear(); - var a = g.getFormat().readFeatures(l.responseText); - g.addFeatures(a); - q(a); - } else console.error("WFS request status", l.status), p(); - }; - 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.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 !0; - } else if (b instanceof ol.geom.Polygon && ((c = c[0]), 4 > c.length || 0 >= b.getArea())) return !0; - 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.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) { - 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.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) { - this.view.padding = [a + 40, b + 40, c + 40, d + 40]; -}; -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 q = n.getContext("2d"); - q.webkitImageSmoothingEnabled = !1; - q.mozImageSmoothingEnabled = !1; - q.imageSmoothingEnabled = !1; - Array.prototype.forEach.call(document.querySelectorAll(".ol-layer canvas"), function (a) { - if (0 < a.width) { - var b = a.parentNode.style.opacity; - q.globalAlpha = "" === b ? 1 : Number(b); - b = a.style.transform - .match(/^matrix\(([^\(]*)\)$/)[1] - .split(",") - .map(Number); - CanvasRenderingContext2D.prototype.setTransform.apply(q, b); - q.drawImage(a, 0, 0); - } - }); - q.drawImage(l, 0, 0); - q.fillStyle = "#fff"; - q.fillRect(0, n.height - 30, 140, 30); - q.fillStyle = "#000"; - q.font = "4mm sans-serif"; - q.fillText(netgis.util.getTimeStamp(), 10, n.height - 10); - var p = document.createElement("a"); - switch (a) { - case "pdf": - e = e ? e : 0; - var r = 297 - e - e, - v = 210 - e - e, - t = n.width / n.height; - if (!d) { - var w = r; - r = v; - v = w; - } - if (n.height > n.width) { - var u = v; - w = u * t; - w > r && ((w = r), (u = w / t)); - } else (w = r), (u = w / t), u > v && ((u = v), (w = u * t)); - t = new jsPDF(d ? "l" : "p"); - var x = e; - x += (r - w) / 2; - r = e; - r += (v - u) / 2; - t.addImage(n.toDataURL("image/png,1.0", 1), "PNG", x, r, w, u); - t.setFillColor(255, 255, 255); - t.rect(x, r + u - 11, 80, 11, "F"); - t.setFontSize(8); - t.text("Datum: " + netgis.util.getTimeStamp(), x + 2, r + u - 2 - 4); - t.text("Quelle: " + window.location.href, x + 2, r + u - 2); - n = t.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") - : (p.setAttribute("download", k.default_filename + ".jpg"), p.setAttribute("href", n.toDataURL("image/jpeg", 1)), p.click()); - break; - case "png": - window.navigator.msSaveBlob - ? window.navigator.msSaveBlob(n.msToBlob(), k.default_filename + ".png") - : (p.setAttribute("download", k.default_filename + ".png"), p.setAttribute("href", n.toDataURL("image/png", 1)), p.click()); - break; - case "gif": - p.setAttribute("download", k.default_filename + ".gif"), - (v = new GIF({ workerScript: k.gif_worker, quality: 1 })), - v.addFrame(n), - v.on("finished", function (a) { - p.setAttribute("href", window.URL.createObjectURL(a)); - p.click(); - }), - v.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() }); - b = []; - for (var c = 0; c < a.length; c++) { - var d = a[c]; - !0 === d.getProperties().editable && b.push(d); - } - for (c = 0; c < b.length; c++) a.splice(a.indexOf(b[c]), 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_lonlat) { - var 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) { - this.zoomScale(a.detail.scale); -}; -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.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.nonEditLayer) - if (b === f.boundsLayer) e = a; - else return (c = a), (d = b), !0; - }); - switch (this.mode) { - case netgis.Modes.DRAW_POINTS: - case netgis.Modes.DRAW_LINES: - this.updateDrawBufferPreview(); - } - !this.boundsLayer || - (this.mode !== netgis.Modes.DRAW_POINTS && this.mode !== netgis.Modes.DRAW_LINES && this.mode !== netgis.Modes.DRAW_POLYGONS) || - (e ? this.container.classList.remove("netgis-not-allowed") : this.container.classList.add("netgis-not-allowed"), (this.hoverBounds = e)); - var g = !0; - this.mode === netgis.Modes.VIEW && (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 = [], - d = this; - this.map.forEachFeatureAtPixel(b, function (a, b) { - b && b !== d.nonEditLayer && b !== d.boundsLayer && b !== d.measureLayer && b !== d.previewLayer && c.push({ feature: a, layer: b }); - }); - var e = !0; - this.mode === netgis.Modes.VIEW && (e = !1); - this.mode === netgis.Modes.DRAW_POINTS && (e = !1); - this.mode === netgis.Modes.DRAW_LINES && (e = !1); - this.mode === netgis.Modes.DRAW_POLYGONS && (e = !1); - this.mode === netgis.Modes.CUT_FEATURES_DRAW && (e = !1); - 0 < c.length && !1 === this.selectMultiple && e && (this.selectedFeatures = []); - for (var f = 0; f < c.length; f++) { - var g = c[f]; - e && this.selectedFeatures.push(g.feature); - this.onFeatureClick(g.feature, g.layer, b, a); - } - e = { 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] }; - f = ol.proj.toLonLat(a, this.view.getProjection()); - b = { mode: this.mode, pixel: b, coords: a, lon: f[0], lat: f[1], overlay: this.popupOverlay.getElement(), view: e }; - netgis.util.invoke(this.container, netgis.Events.MAP_CLICK, b); - this.redrawVectorLayers(); -}; -netgis.Map.prototype.onRightClick = function (a) { - switch (this.mode) { - case netgis.Modes.MEASURE_LINE: - this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing(); - break; - case netgis.Modes.MEASURE_AREA: - this.interactions[netgis.Modes.MEASURE_AREA][2].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(); - } - 16 === a && (this.selectMultiple = !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 && (this.selectMultiple = !1); -}; -netgis.Map.prototype.onFeatureEnter = function (a, b, c, d) { - if (b) { - switch (this.mode) { - case netgis.Modes.DELETE_FEATURES: - case netgis.Modes.BUFFER_FEATURES: - 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) { - c = { pixel: c, coords: d, layer: this.hoverLayer ? this.hoverLayer.get("id") : null, id: this.hoverFeature ? this.hoverFeature.getId() : null, properties: this.hoverFeature ? this.hoverFeature.getProperties() : null }; - 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: - this.onFeatureLeave(a, b); - this.selectMultiple || netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES_EDIT }); - 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.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.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.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; - var b = this.selectedFeatures, - c = this.editLayer.getSource(); - this.clearSketchFeatures(); - for (var d = 0; d < b.length; d++) { - var e = this.createBufferFeature(this.selectedFeatures[d].getGeometry(), a.radius, a.segments); - c.addFeature(e); - this.sketchFeatures.push(e); - } -}; -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); - 0 !== a.getSource().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) { - a = a.detail.id; - console.info("PARCEL CLICK:", a); - this.zoomFeature("searchparcel_parcels", a); -}; -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.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.prototype.initElements = function () { - this.container = document.createElement("nav"); - this.container.className = "netgis-menu netgis-noselect netgis-color-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"; - this.toggle.innerHTML = ""; - this.container.appendChild(this.toggle); -}; -netgis.Menu.prototype.initConfig = function (a) { - !0 === a.menu.compact && this.container.classList.add("netgis-compact"); - this.addHeader(a.menu.header); - for (var b = a.menu.items, c = 0; c < b.length; c++) { - var d = b[c]; - if (d.items) this.addDropdown(d.title, d.items); - else if (d.url && 0 < d.url.length) this.addLink(d.url, d.title); - else if (d.options) { - var e; - if ("scales" === d.options) { - var f = { 0: "1:X" }; - for (e = 0; e < a.map.scales.length; e++) f[a.map.scales[e]] = "1:" + a.map.scales[e]; - e = a.map.default_scale; - this.addSelect(d.id, d.title, f, e).options[0].classList.add("netgis-hide"); - } else { - f = d.options; - if (d.value) e = d.value; - else - for (var g in f) { - e = g; - break; - } - this.addSelect(d.id, d.title, f, e); - } - } 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"; - 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"; - var d = document.createElement("button"); - d.setAttribute("type", "button"); - 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.createMenuItem = function (a) { - var b = document.createElement("li"); - b.className = "netgis-hover-c"; - if (a.items) (a = this.createMenu(a.title, a.items)), 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.classList = "netgis-button"; - 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"); - 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 = this.container.getElementsByTagName("select"), c = 0; c < b.length; c++) { - var d = b[c]; - if ("scales" === !d.getAttribute("data-id")) break; - for (var e = !1, f = this.config.map.scales, g = 0; g < f.length; g++) - if (f[g] === a.scale) { - e = !0; - break; - } - e ? d.options[0].classList.add("netgis-hide") : (d.options[0].setAttribute("value", a.scale), (d.options[0].innerHTML = "1:" + a.scale), d.options[0].classList.remove("netgis-hide")); - d.value = a.scale; - } -}; -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"; - 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", - CUT_FEATURES: "cut-features", - CUT_FEATURES_DRAW: "cut-features-draw", - SEARCH_PARCEL: "search-parcel", -}); -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 = 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); -}; -netgis.Panel.prototype.addHeader = function (a, b, c) { - var d = document.createElement("button"); - d.className = "netgis-button netgis-clip-text netgis-color-c netgis-shadow"; - d.innerHTML = "" + b + ""; - d.setAttribute("type", "button"); - c && (d.onpointerdown = 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, { 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, { 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, { 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 = netgis || {}; -netgis.Popup = function () { - 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.arrow = document.createElement("div"); - this.arrow.className = "netgis-arrow-down"; - 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-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.Popup.prototype.hide = function () { - this.container.classList.remove("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); - this.container.style.left = 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.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.button.classList.add("netgis-hide"), this.closer.classList.remove("netgis-hide")); - 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.button.classList.remove("netgis-hide"); - this.closer.classList.add("netgis-hide"); -}; -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.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.parcelsAdded = []; - this.initElements(); - this.initEvents(); - this.initConfig(a); -}; -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); - 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"; - 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)".split(";")); - 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); - 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.LAYERTREE_TOGGLE, this.onLayerTreeToggle.bind(this)); - a.addEventListener(netgis.Events.TOOLBOX_TOGGLE, this.onToolboxToggle.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)); -}; -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); - for (d = 0; d < a.length; d++) { - var f = document.createElement("th"); - f.innerHTML = a[d]; - e.appendChild(f); - } - 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.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.onLayerTreeToggle = function (a) { - this.panel.hide(); -}; -netgis.SearchParcel.prototype.onToolboxToggle = function (a) { - this.panel.hide(); -}; -netgis.SearchParcel.prototype.onClientSetMode = function (a) { - a.detail.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.parcelInfo.innerHTML = "Suche Flurst\u00fccke..."; - netgis.util.request(e, this.onParcelsResponse.bind(this)); -}; -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: - var c = a.properties.gemarkung; - b.setAttribute("title", c); - break; - case this.fieldsLayerID: - c = a.properties.flurname; - b.setAttribute("title", c); - break; - case this.parcelsLayerID: - for ( - c = "Flur: " + a.properties.fln + " / Z\u00e4hler: " + a.properties.fsn_zae + " / Nenner: " + a.properties.fsn_nen, b.setAttribute("title", c), b = a.properties.fsk, a = this.parcelList.getElementsByTagName("tr"), c = 0; - c < a.length; - c++ - ) { - var d = a[c]; - if (d.getAttribute("data-id") === b) { - d.scrollIntoView({ behavior: "smooth", block: "center" }); - d.classList.add("netgis-color-d"); - break; - } - } - } -}; -netgis.SearchParcel.prototype.onMapFeatureClick = function (a) { - a = a.detail; - switch (a.layer) { - case this.districtsLayerID: - this.setDistrict(a.properties.gemarkung + " (" + a.properties.ldkreis + ")", a.properties.gmkgnr); - break; - case this.fieldsLayerID: - this.setFieldNumber(a.properties.flur); - break; - case this.parcelsLayerID: - netgis.util.invoke(this.container, netgis.Events.MAP_COPY_FEATURE_TO_EDIT, { source: this.parcelsLayerID, id: a.properties.fsk }); - } -}; -netgis.SearchParcel.prototype.onMapFeatureLeave = function (a) { - var b = a.target; - a = a.detail; - switch (a.layer) { - case this.districtsLayerID: - case this.fieldsLayerID: - b.setAttribute("title", ""); - break; - case this.parcelsLayerID: - b.setAttribute("title", ""); - b = a.properties.fsk; - a = this.parcelList.getElementsByTagName("tr"); - for (var c = 0; c < a.length; c++) { - var d = a[c]; - if (d.getAttribute("data-id") === b) { - d.classList.remove("netgis-color-d"); - break; - } - } - } -}; -netgis = netgis || {}; -netgis.SearchPlace = function (a) { - this.config = a; - this.initElements(); - this.initEvents(); - this.initConfig(a); -}; -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) { - this.search.setTitle(a.searchplace.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) { - this.search.toggle(); -}; -netgis.SearchPlace.prototype.onSearchChange = function (a) { - var b = this.config.searchplace.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++); - console.info("TimeSlider:", this); - var b = this; - window.setTimeout(function () { - b.container.scrollLeft = 0; - }, 1); -}; -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(); -}; -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 (!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"; - 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); - b = a.tools; - a = []; - this.bottomPanels.drawPoints = document.createElement("div"); - a.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):", b.buffer.default_radius, this.onDrawBufferChange.bind(this)); - this.addInputNumber(this.bottomPanels.drawPoints, "Segmente:", b.buffer.default_segments, this.onDrawBufferChange.bind(this)); - this.bottom.appendChild(this.bottomPanels.drawPoints); - this.bottomPanels.drawLines = document.createElement("div"); - a.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):", b.buffer.default_radius, this.onDrawBufferChange.bind(this)); - this.addInputNumber(this.bottomPanels.drawLines, "Segmente:", b.buffer.default_segments, this.onDrawBufferChange.bind(this)); - this.bottom.appendChild(this.bottomPanels.drawLines); - this.showDrawBufferOptions(!1); - this.bottomPanels.drawPolygons = document.createElement("div"); - a.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):", b.buffer.default_radius, this.onBufferFeaturesChange.bind(this)); - this.addInputNumber(this.bottomPanels.bufferFeatures, "Segmente:", b.buffer.default_segments, this.onBufferFeaturesChange.bind(this)); - this.addButton(this.bottomPanels.bufferFeatures, null, "Akzeptieren", this.onBufferFeaturesAccept.bind(this)); - this.bottom.appendChild(this.bottomPanels.bufferFeatures); - this.bottomPanels.modifyFeatures = document.createElement("div"); - a.push(this.addCheckbox(this.bottomPanels.modifyFeatures, "Einrasten", this.onDrawSnapToggle.bind(this))); - this.bottom.appendChild(this.bottomPanels.modifyFeatures); - if (!this.config.tools.snapping.show) for (b = 0; b < a.length; b++) a[b].parentNode.classList.add("netgis-hide"); - if (!0 === this.config.tools.snapping.active) { - for (b = 0; b < a.length; b++) a[b].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) { - a.appendChild(this.panel.container); - 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.LAYERTREE_TOGGLE, this.onLayerTreeToggle.bind(this)); - a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE, this.onSearchParcelToggle.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-hover-a"; - 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-hover-a"; - 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]; - e.getAttribute("data-id") === a ? ((c = e), e.classList.add("netgis-active")) : e.classList.remove("netgis-active"); - } - 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.onLayerTreeToggle = function (a) { - this.panel.hide(); -}; -netgis.Toolbox.prototype.onSearchParcelToggle = function (a) { - this.panel.hide(); -}; -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"); - 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.CUT_FEATURES: - case netgis.Modes.CUT_FEATURE_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.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 () { - 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) { - var f = document.createElement("li"); - f.className = "netgis-folder"; - f.setAttribute("data-id", b); - b = document.createElement("details"); - f.appendChild(b); - var g = document.createElement("summary"); - g.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d"; - g.innerHTML = "" + c + ""; - b.appendChild(g); - c = document.createElement("label"); - g.appendChild(c); - g = document.createElement("input"); - g.setAttribute("type", "checkbox"); - g.onchange = this.onFolderChange.bind(this); - c.appendChild(g); - !0 === e && f.classList.add("netgis-nocheck"); - e = document.createElement("ul"); - b.appendChild(e); - a = a ? a.getElementsByTagName("ul")[0] : this.container; - d ? a.insertBefore(f, a.firstChild) : a.appendChild(f); - return f; -}; -netgis.Tree.prototype.addCheckbox = function (a, b, c, d, e, f) { - var g = document.createElement("li"); - g.className = "netgis-item"; - 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("input"); - c.setAttribute("type", "checkbox"); - c.setAttribute("data-id", b); - d && (c.checked = d); - c.onchange = this.onItemChange.bind(this); - h.insertBefore(c, h.firstChild); - 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 = a ? "radio-" + a.getAttribute("data-id") : "radio-noname"; - var h = document.createElement("input"); - h.setAttribute("type", "radio"); - h.setAttribute("name", c); - h.setAttribute("value", "radio-" + b); - h.setAttribute("data-id", b); - d && (h.checked = d); - h.onchange = this.onItemChange.bind(this); - g.insertBefore(h, g.firstChild); - 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"); - e.className = "netgis-hover-d"; - switch (g.type) { - case "slider": - var 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)); - k.appendChild(l); - } - e.appendChild(h); - } - a.appendChild(d); -}; -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.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); - 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 = 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; - }, - 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]; - }, - 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) { - var c = new XMLHttpRequest(); - e && (c._requestData = e); - c.onload = function () { - b(this.responseText, this._requestData, this); - }; - c.withCredentials = !1; - c.open("GET", a, !0); - c.send(); - return c; - }, - 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]; - }, - 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"); - }, - 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.WMC = function () {}; -netgis.WMC.prototype.requestContext = function (a, b) { - this.callback = b; - netgis.util.request(a, this.onContextResponse.bind(this)); -}; -netgis.WMC.prototype.onContextResponse = function (a) { - a = JSON.parse(a); - this.fromJSON(a); -}; -netgis.WMC.prototype.requestLayers = function (a) { - a = "./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds=" + a.join(","); - netgis.util.request(a, this.onLayersResponse.bind(this)); -}; -netgis.WMC.prototype.onLayersResponse = function (a) { - a = JSON.parse(a).wms.srv; - this.services = []; - for (var b = 0; b < a.length; b++) { - var c = a[b], - d = { id: c.id, title: c.title, url: c.getMapUrl }; - d.layers = this.parseLayers(c.layer); - this.services.push(d); - } - var e = this.layers; - this.services.sort(function (a, b) { - a = Number.parseInt(a.layers[0].id); - b = Number.parseInt(b.layers[0].id); - for (var c = null, d = null, f = 0; f < e.length; f++) e[f].id === a && (c = f), e[f].id === b && (d = f); - return c < d ? -1 : c > d ? 1 : 0; - }); - this.callback && this.callback({ config: this.toConfig() }); -}; -netgis.WMC.prototype.parseLayers = function (a) { - var b = []; - if (a) - for (var c = 0; c < a.length; c++) { - var d = a[c], - e = { id: d.id, title: d.title, name: d.name, legendURL: d.getLegendGraphicUrl, legendFormat: d.getLegendGraphicUrlFormat, queryable: d.layerQueryable | d.queryable, bbox: d.bbox }; - e.layers = this.parseLayers(d.layer); - b.push(e); - } - this.sortLayers(b); - return b; -}; -netgis.WMC.prototype.sortLayers = function (a) { - var b = this.layers; - a.sort(function (a, d) { - var c = null, - f = null; - a = Number.parseInt(a.id); - d = Number.parseInt(d.id); - for (var g = 0; g < b.length; g++) b[g].id === a && (c = b[g].pos), b[g].id === d && (f = b[g].pos); - return c < f ? 1 : c > f ? -1 : 0; - }); -}; -netgis.WMC.prototype.fromJSON = function (a) { - var b = a.wmc; - this.id = b.id; - this.title = b.title; - this.crs = b.crs; - var c = b.bbox; - c = c.split(","); - for (b = 0; b < c.length; b++) c[b] = Number.parseFloat(c[b]); - this.bbox = c; - this.layers = []; - c = []; - a = a.layerList; - for (b = 0; b < a.length; b++) { - var d = a[b]; - this.layers.push({ id: d.layerId, active: d.active, opacity: d.opacity, pos: d.layerPos }); - c.push(d.layerId); - } - this.requestLayers(c); -}; -netgis.WMC.prototype.toConfig = function () { - for (var a = { map: { attribution: this.title + ", GeoPortal RLP", projection: this.crs, bbox: this.bbox } }, b = [], c = [], d = this.layers.length, e = 0; e < this.services.length; e++) { - var f = this.services[e], - g = f.layers[0], - h = { id: g.id, title: g.title, parent: -1 }; - b.unshift(h); - h = h.id; - for (var k = 0; k < g.layers.length; k++) { - for (var l = g.layers[k], m = null, n = 0; n < this.layers.length; n++) - if (this.layers[n].id === Number.parseInt(l.id)) { - m = this.layers[n]; - break; - } - c.push({ id: l.id, title: l.title, folder: h, active: m.active, type: "WMS", url: f.url, name: l.name, order: d }); - --d; - } - } - a.folders = b; - a.layers = c; - return a; -}; -netgis = netgis || {}; -netgis.WMC = function () {}; -netgis.WMC.prototype.requestContext = function (a, b) { - this.callback = b; - netgis.util.request(a, this.onContextResponse.bind(this)); -}; -netgis.WMC.prototype.onContextResponse = function (a) { - a = JSON.parse(a); - console.info("Context Response:", a); - this.fromJSON(a); -}; -netgis.WMC.prototype.requestLayers = function (a) { - a = "./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds=" + a.join(","); - netgis.util.request(a, this.onLayersResponse.bind(this)); -}; -netgis.WMC.prototype.onLayersResponse = function (a) { - a = JSON.parse(a); - console.info("Layers Response:", a); - a = a.wms.srv; - this.services = []; - for (var b = 0; b < a.length; b++) { - var c = a[b], - d = { id: c.id, title: c.title, url: c.getMapUrl }; - d.layers = this.parseLayers(c.layer); - this.services.push(d); - } - var e = this.layers; - this.services.sort(function (a, b) { - a = Number.parseInt(a.layers[0].id); - b = Number.parseInt(b.layers[0].id); - for (var c = null, d = null, f = 0; f < e.length; f++) e[f].id === a && (c = f), e[f].id === b && (d = f); - return c < d ? -1 : c > d ? 1 : 0; - }); - this.callback && this.callback({ config: this.toConfig() }); -}; -netgis.WMC.prototype.parseLayers = function (a) { - var b = []; - if (a) - for (var c = 0; c < a.length; c++) { - var d = a[c], - e = { id: d.id, title: d.title, name: d.name, legendURL: d.getLegendGraphicUrl, legendFormat: d.getLegendGraphicUrlFormat, queryable: d.layerQueryable | d.queryable, bbox: d.bbox }; - e.layers = this.parseLayers(d.layer); - b.push(e); - } - this.sortLayers(b); - return b; -}; -netgis.WMC.prototype.sortLayers = function (a) { - var b = this.layers; - a.sort(function (a, d) { - var c = null, - f = null; - a = Number.parseInt(a.id); - d = Number.parseInt(d.id); - for (var g = 0; g < b.length; g++) b[g].id === a && (c = b[g].pos), b[g].id === d && (f = b[g].pos); - return c < f ? 1 : c > f ? -1 : 0; - }); -}; -netgis.WMC.prototype.fromJSON = function (a) { - var b = a.wmc; - this.id = b.id; - this.title = b.title; - this.crs = b.crs; - var c = b.bbox; - c = c.split(","); - for (b = 0; b < c.length; b++) c[b] = Number.parseFloat(c[b]); - this.bbox = c; - this.layers = []; - c = []; - a = a.layerList; - for (b = 0; b < a.length; b++) { - var d = a[b]; - this.layers.push({ id: d.layerId, active: d.active, opacity: d.opacity, pos: d.layerPos }); - c.push(d.layerId); - } - this.requestLayers(c); - console.info("WMC Layers:", this.layers); -}; -netgis.WMC.prototype.toConfig = function () { - for ( - var a = { - title: "GeoPortal", - modules: { search_parcel: !1 }, - map: { attribution: this.title + ", GeoPortal RLP", projection: this.crs, bbox: this.bbox, scalebar: !0 }, - search: { - url: - "./proxy.php?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}", - }, - }, - b = [], - c = [], - d = this.layers.length, - e = 0; - e < this.services.length; - e++ - ) { - var f = this.services[e], - g = f.layers[0]; - b.push({ id: g.id, title: g.title, parent: -1 }); - for (var h = b.length - 1, k = 0; k < g.layers.length; k++) { - for (var l = g.layers[k], m = null, n = 0; n < this.layers.length; n++) - if (this.layers[n].id === Number.parseInt(l.id)) { - m = this.layers[n]; - break; - } - c.push({ id: l.id, title: l.title, folder: h, active: m.active, type: "WMS", url: f.url, name: l.name, order: d }); - --d; - } - } - a.folders = b; - a.layers = c; - return a; -}; +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){this.container=this.initContainer(a);this.config=b;netgis.util.isString(b)?(this.showLoader(!0),netgis.util.request(b,this.onConfigResponse.bind(this))):this.init(this.container,b)}; +netgis.Client.prototype.init=function(a,b){this.config=b;this.logEvents=!1;this.initParams(b);this.initConfig(b);this.initElements(a);this.initModules(b);this.initEvents();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.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;cc.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(a);a+=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(a);a+=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(a);a+=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(a);a+=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(a);a+=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(a);a+=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(a);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;gb.length)){var c=b.indexOf("?");a=-1b.length)){var c=b.indexOf("?");a=-1",b.title,"
",a,"
"].join(""))};netgis=netgis||{};netgis.LayerID=Object.freeze({EDITABLE:"editable-layer",NON_EDITABLE:"non-editable-layer"});netgis=netgis||{};netgis.LayerTree=function(a){this.config=a;this.importFolder=null;this.initElements();this.initConfig(a);this.initFolders()};netgis.LayerTree.prototype.initElements=function(){this.panel=new netgis.Panel("Layers");this.tree=new netgis.Tree;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))}; +netgis.LayerTree.prototype.initFolders=function(){this.editFolder=this.tree.addFolder(null,"edit-folder","Zeichnung",!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){a.layertree&&a.layertree.title&&this.panel.setTitle(a.layertree.title);for(var c=a.folders,d={},e=0;e=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));c.setText(new ol.style.Text({text:[netgis.util.formatArea(e,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:a}),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=this.config.styles.non_edit,c=this.config.styles.select,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));c.setText(new ol.style.Text({text:[netgis.util.formatArea(e,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:a}),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=this.config.styles[this.drawError?"error":"sketch"],c=a.getGeometry(),d=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})});c instanceof ol.geom.Polygon&&(c=c.getArea(),d.setText(new ol.style.Text({text:[netgis.util.formatArea(c,!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[d,a]}; +netgis.Map.prototype.styleModify=function(a){var b=this.config.styles.modify,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){a=this.config.styles.select;return new ol.style.Style({image:new ol.style.Circle({radius:a.radius,fill:new ol.style.Fill({color:a.stroke})}),fill:new ol.style.Fill({color:a.fill}),stroke:new ol.style.Stroke({color:a.stroke,width:a.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!0}else if(b instanceof ol.geom.Polygon&&(c=c[0],4>c.length||0>=b.getArea()))return!0;c=new jsts.io.OL3Parser;b=c.read(b);a=a.getSource().getFeatures();for(var d=0;dthis.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){this.view.padding=[a+40,b+40,c+40,d+40]}; +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 q=n.getContext("2d");q.webkitImageSmoothingEnabled=!1;q.mozImageSmoothingEnabled=!1;q.imageSmoothingEnabled=!1;Array.prototype.forEach.call(document.querySelectorAll(".ol-layer canvas"),function(a){if(0n.width){var u=v;w=u*t;w>r&&(w=r,u=w/t)}else w=r,u=w/t,u>v&&(u=v,w=u*t);t=new jsPDF(d?"l":"p");var x=e;x+=(r-w)/2;r=e;r+=(v-u)/2;t.addImage(n.toDataURL("image/png,1.0",1),"PNG",x,r,w,u);t.setFillColor(255,255,255);t.rect(x,r+u-11,80,11,"F");t.setFontSize(8); +t.text("Datum: "+netgis.util.getTimeStamp(),x+2,r+u-2-4);t.text("Quelle: "+window.location.href,x+2,r+u-2);n=t.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"):(p.setAttribute("download",k.default_filename+".jpg"),p.setAttribute("href",n.toDataURL("image/jpeg",1)),p.click());break;case "png":window.navigator.msSaveBlob?window.navigator.msSaveBlob(n.msToBlob(), +k.default_filename+".png"):(p.setAttribute("download",k.default_filename+".png"),p.setAttribute("href",n.toDataURL("image/png",1)),p.click());break;case "gif":p.setAttribute("download",k.default_filename+".gif"),v=new GIF({workerScript:k.gif_worker,quality:1}),v.addFrame(n),v.on("finished",function(a){p.setAttribute("href",window.URL.createObjectURL(a));p.click()}),v.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()});b=[];for(var c=0;ca[0].length)for(var d=0;d";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",CUT_FEATURES:"cut-features",CUT_FEATURES_DRAW:"cut-features-draw",SEARCH_PARCEL:"search-parcel"});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";d.setAttribute("type","button");c&&(d.onpointerdown=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,{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,{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,{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=netgis||{};netgis.Popup=function(){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.arrow=document.createElement("div");this.arrow.className= +"netgis-arrow-down";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-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.Popup.prototype.hide=function(){this.container.classList.remove("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);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.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.button.classList.add("netgis-hide"),this.closer.classList.remove("netgis-hide")); +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.button.classList.remove("netgis-hide");this.closer.classList.add("netgis-hide")}; +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.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";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)".split(";"));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);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.LAYERTREE_TOGGLE,this.onLayerTreeToggle.bind(this));a.addEventListener(netgis.Events.TOOLBOX_TOGGLE,this.onToolboxToggle.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))};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);for(d=0;d"+(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");0b?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++);console.info("TimeSlider:",this);var b=this;window.setTimeout(function(){b.container.scrollLeft=0},1)}; +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",this.onBufferFeaturesAccept.bind(this));this.bottom.appendChild(this.bottomPanels.bufferFeatures); +this.bottomPanels.modifyFeatures=document.createElement("div");a.push(this.addCheckbox(this.bottomPanels.modifyFeatures,"Einrasten",this.onDrawSnapToggle.bind(this)));this.bottom.appendChild(this.bottomPanels.modifyFeatures);if(this.config.tools&&this.config.tools.snapping){if(!1===this.config.tools.snapping.show)for(b=0;b";b.appendChild(g);c=document.createElement("label"); +g.appendChild(c);g=document.createElement("input");g.setAttribute("type","checkbox");g.onchange=this.onFolderChange.bind(this);c.appendChild(g);!0===e&&f.classList.add("netgis-nocheck");e=document.createElement("ul");b.appendChild(e);a=a?a.getElementsByTagName("ul")[0]:this.container;d?a.insertBefore(f,a.firstChild):a.appendChild(f);return f}; +netgis.Tree.prototype.addCheckbox=function(a,b,c,d,e,f){var g=document.createElement("li");g.className="netgis-item";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("input");c.setAttribute("type","checkbox");c.setAttribute("data-id",b);d&&(c.checked=d);c.onchange=this.onItemChange.bind(this);h.insertBefore(c,h.firstChild);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=a?"radio-"+a.getAttribute("data-id"):"radio-noname";var h=document.createElement("input");h.setAttribute("type","radio");h.setAttribute("name",c);h.setAttribute("value","radio-"+b);h.setAttribute("data-id", +b);d&&(h.checked=d);h.onchange=this.onItemChange.bind(this);g.insertBefore(h,g.firstChild);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]},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){var c=new XMLHttpRequest;e&&(c._requestData=e);c.onload=function(){b(this.responseText,this._requestData,this)};c.withCredentials=!1;c.open("GET",a,!0);c.send();return c},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]},formatDistance:function(a){return 100(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")},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.WMC=function(){};netgis.WMC.prototype.requestContext=function(a,b){this.callback=b;netgis.util.request(a,this.onContextResponse.bind(this))};netgis.WMC.prototype.onContextResponse=function(a){a=JSON.parse(a);this.fromJSON(a)};netgis.WMC.prototype.requestLayers=function(a){a="./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds="+a.join(",");netgis.util.request(a,this.onLayersResponse.bind(this))}; +netgis.WMC.prototype.onLayersResponse=function(a){a=JSON.parse(a).wms.srv;this.services=[];for(var b=0;bd?1:0});this.callback&&this.callback({config:this.toConfig()})}; +netgis.WMC.prototype.parseLayers=function(a){var b=[];if(a)for(var c=0;cf?-1:0})}; +netgis.WMC.prototype.fromJSON=function(a){var b=a.wmc;this.id=b.id;this.title=b.title;this.crs=b.crs;var c=b.bbox;c=c.split(",");for(b=0;bd?1:0});this.callback&& +this.callback({config:this.toConfig()})};netgis.WMC.prototype.parseLayers=function(a){var b=[];if(a)for(var c=0;cf?-1:0})}; +netgis.WMC.prototype.fromJSON=function(a){var b=a.wmc;this.id=b.id;this.title=b.title;this.crs=b.crs;var c=b.bbox;c=c.split(",");for(b=0;bGeoPortal",modules:{search_parcel:!1},map:{attribution:this.title+", GeoPortal RLP",projection:this.crs,bbox:this.bbox,scalebar:!0},search:{url:"./proxy.php?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}"}},b=[],c=[],d=this.layers.length,e=0;e - +