diff --git a/konova/forms/geometry_form.py b/konova/forms/geometry_form.py
index 75b6e97c..bc5bea62 100644
--- a/konova/forms/geometry_form.py
+++ b/konova/forms/geometry_form.py
@@ -33,6 +33,7 @@ class SimpleGeomForm(BaseForm):
label_suffix="",
required=False,
disabled=False,
+ template_name="output"
)
def __init__(self, *args, **kwargs):
diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py
index 3cd9dc98..fa87e11a 100644
--- a/konova/sub_settings/django_settings.py
+++ b/konova/sub_settings/django_settings.py
@@ -189,7 +189,6 @@ STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'konova/static'),
os.path.join(BASE_DIR, 'templates/map/client'), # NETGIS map client files
- os.path.join(BASE_DIR, 'templates/map/client/libs'), # NETGIS map client files
]
# EMAIL (see https://docs.djangoproject.com/en/dev/topics/email/)
diff --git a/templates/map/client/config.json b/templates/map/client/config.json
index 918ba3a4..e41ae5ce 100644
--- a/templates/map/client/config.json
+++ b/templates/map/client/config.json
@@ -1,107 +1,145 @@
{
- "layers":
- [
- { "folder": 5, "type": "WMS", "title": "KOM Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=kom_f&", "name": "kom_f" },
- { "folder": 5, "type": "WMS", "title": "KOM Linien", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=kom_l&", "name": "kom_l" },
- { "folder": 5, "type": "WMS", "title": "KOM Punkte", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=komon&", "name": "kom_p" },
-
- { "folder": 6, "type": "WMS", "title": "EIV Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=eiv_f&", "name": "eiv_f" },
- { "folder": 6, "type": "WMS", "title": "EIV Linien", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=eiv_l&", "name": "eiv_l" },
- { "folder": 6, "type": "WMS", "title": "EIV Punkte", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=eiv_p&", "name": "eiv_p" },
-
- { "folder": 7, "type": "WMS", "title": "OEK Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=oek_f&", "name": "oek_f" },
-
- { "folder": 8, "type": "WMS", "title": "EMA Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=ema_f&", "name": "ema_f" },
-
- { "folder": 9, "type": "WMS", "title": "MAE Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=mae&", "name": "mae" },
-
- { "folder": 10, "type": "WMS", "title": "Naturschutzgebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=naturschutzgebiet&", "name": "naturschutzgebiet" },
- { "folder": 10, "type": "WMS", "title": "Naturparkzonen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=naturparkzonen&", "name": "naturparkzonen" },
- { "folder": 10, "type": "WMS", "title": "Landschaftsschutzgebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=landschaftsschutzgebiet&", "name": "landschaftsschutzgebiet" },
- { "folder": 10, "type": "WMS", "title": "Vogelschutzgebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=vogelschutzgebiet&", "name": "vogelschutzgebiet" },
- { "folder": 10, "type": "WMS", "title": "FFH Gebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=ffh&", "name": "ffh" },
-
- { "folder": 11, "type": "WMS", "title": "Nationalpark Zonen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=nationalpark_zonen&", "name": "nationalpark_zonen" },
- { "folder": 11, "type": "WMS", "title": "Nationalpark Grenzen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=nationalpark_grenze&", "name": "nationalpark_grenze" },
-
- { "folder": 12, "type": "WMS", "title": "Naturräume Grenzen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=natraum_lkompvo_grenzen&", "name": "natraum_lkompvo_grenzen" },
- { "folder": 12, "type": "WMS", "title": "Naturräume Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=natraum_lkompvo&", "name": "natraum_lkompvo" },
-
- { "folder": 1, "type": "WMS", "title": "Lagebezeichnungen", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "Lagebezeichnungen" },
- { "folder": 1, "type": "WMS", "title": "Flurstücke (WMS)", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "Flurstueck", "active": true},
- { "folder": 1, "type": "WFS", "title": "Flurstücke (WFS; ab hoher Zoomstufe)", "url": "/client/proxy/wfs?", "name": "ave:Flurstueck", "minZoom": 17},
- { "folder": 1, "type": "WMS", "title": "Gebäude / Bauwerke", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "GebaeudeBauwerke" },
- { "folder": 1, "type": "WMS", "title": "Nutzung", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "Nutzung" },
-
- { "folder": 2, "type": "WMS", "title": "Landkreise", "url": "http://geo5.service24.rlp.de/wms/verwaltungsgrenzen_rp.fcgi?", "name": "Landkreise" },
- { "folder": 2, "type": "WMS", "title": "Verbandsgemeinden", "url": "http://geo5.service24.rlp.de/wms/verwaltungsgrenzen_rp.fcgi?", "name": "Verbandsgemeinden" },
- { "folder": 2, "type": "WMS", "title": "Gemeinden", "url": "http://geo5.service24.rlp.de/wms/verwaltungsgrenzen_rp.fcgi?", "name": "Gemeinden" },
-
- { "folder": 15, "type": "WMS", "order": -1, "title": "farbig", "attribution": "LVermGeo", "url": "https://maps.service24.rlp.de/gisserver/services/RP/RP_WebAtlasRP/MapServer/WmsServer?", "name": "RP_WebAtlasRP", "active": true},
- { "folder": 15, "type": "WMS", "title": "grau", "attribution": "LVermGeo", "url": "https://maps.service24.rlp.de/gisserver/services/RP/RP_ETRS_Gt/MapServer/WmsServer?", "name": "0", "active": false },
- { "folder": 0, "type": "WMS", "title": "Luftbilder", "attribution": "LVermGeo", "url": "http://geo4.service24.rlp.de/wms/dop_basis.fcgi?", "name": "rp_dop", "active": false },
- { "folder": 14, "type": "WMS", "title": "farbig", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_basemapde?", "name": "de_basemapde_web_raster_farbe", "active": false },
- { "folder": 14, "type": "WMS", "title": "grau", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_basemapde?", "name": "de_basemapde_web_raster_grau", "active": false },
- { "folder": 13, "type": "WMS", "title": "farbig", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/dtk5_rp.fcgi?", "name": "rp_dtk5", "active": false },
- { "folder": 13, "type": "WMS", "title": "grau", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/dtk5_rp.fcgi?", "name": "rp_dtk5_grau", "active": false }
- ],
- "folders":
- [
- { "title": "Hintergrund", "parent": -1 },
- { "title": "ALKIS Liegenschaften", "parent": -1 },
- { "title": "Verwaltungsgrenzen", "parent": -1 },
- { "title": "Geofachdaten", "parent": -1 },
- { "title": "Kompensationsverzeichnis", "parent": 3 },
- { "title": "Kompensationen", "parent": 4 },
- { "title": "Eingriffe", "parent": 4 },
- { "title": "Ökokonten", "parent": 4 },
- { "title": "EMA", "parent": 4 },
- { "title": "MAE", "parent": 4 },
- { "title": "Schutzgebiete", "parent": 3 },
- { "title": "Nationalparke", "parent": 10 },
- { "title": "Naturräume", "parent": 10 },
- { "title": "Topographisch (DTK5)", "parent": 0 },
- { "title": "BaseMap", "parent": 0 },
- { "title": "Webatlas", "parent": 0 }
- ],
+ "modules":
+ {
+ "menu": true,
+ "layertree": true,
+ "map": true,
+ "controls": true,
+ "attribution": true,
+ "info": true,
+ "searchplace": true,
+ "searchparcel": true,
+ "toolbox": true,
+ "import": true,
+ "export": true
+ },
+ "menu":
+ {
+ "header": "LANIS Demo",
+ "items":
+ [
+ { "id": "searchplace", "title": "Suche" },
+ { "id": "searchparcel", "title": "Flurstücke" },
+ { "id": "toolbox", "title": "Werkzeuge" },
+ { "id": "layertree", "title": "Inhalte" }
+ ]
+ },
"projections":
[
[ "EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs" ]
],
-
"map":
{
"projection": "EPSG:25832",
- "center": [ 385000, 5543000 ],
- "minZoom": 5,
- "maxZoom": 22,
- "zoom": 9,
- "attribution": "LANIS RLP",
+ "center_lonlat": [ 7.0, 51.0 ],
+ "zoom": 12,
+ "min_zoom": 5,
+ "max_zoom": 19,
"scalebar": true
},
-
- "output":
- {
- "id": "netgis-storage"
- },
-
- "search":
- {
- "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}"
- },
+ "folders":
+ [
+ { "id": "bg", "title": "Hintergrund", "parent": null },
+ { "id": "alkis", "title": "ALKIS Liegenschaften", "parent": null },
+ { "id": "verwaltung", "title": "Verwaltungsgrenzen", "parent": null },
+ { "id": "fachdaten", "title": "Geofachdaten", "parent": null },
+ { "id": "ksp", "title": "Kompensationsverzeichnis", "parent": "fachdaten" },
+ { "id": "kom", "title": "Kompensationen", "parent": "ksp" },
+ { "id": "eiv", "title": "Eingriffe", "parent": "ksp" },
+ { "id": "oek", "title": "Ökokonten", "parent": "ksp" },
+ { "id": "ema", "title": "EMA", "parent": "ksp" },
+ { "id": "mae", "title": "MAE", "parent": "ksp" },
+ { "id": "schutzgebiet", "title": "Schutzgebiete", "parent": "fachdaten" },
+ { "id": "nationalpark", "title": "Nationalparke", "parent": "schutzgebiet" },
+ { "id": "naturraum", "title": "Naturräume", "parent": "schutzgebiet" },
+ { "id": "dtk", "title": "Topographisch (DTK5)", "parent": "bg" },
+ { "id": "basemap", "title": "BaseMap", "parent": "bg" },
+ { "id": "webatlas", "title": "Webatlas", "parent": "bg" }
+ ],
+ "layers":
+ [
+ { "id": "kom_f", "folder": "kom", "type": "WMS", "title": "KOM Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=kom_f&", "name": "kom_f" },
+ { "id": "kom_l", "folder": "kom", "type": "WMS", "title": "KOM Linien", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=kom_l&", "name": "kom_l" },
+ { "id": "kom_p", "folder": "kom", "type": "WMS", "title": "KOM Punkte", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=komon&", "name": "kom_p" },
- "searchParcel":
+ { "id": "eiv_f", "folder": "eiv", "type": "WMS", "title": "EIV Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=eiv_f&", "name": "eiv_f" },
+ { "id": "eiv_l", "folder": "eiv", "type": "WMS", "title": "EIV Linien", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=eiv_l&", "name": "eiv_l" },
+ { "id": "eiv_p", "folder": "eiv", "type": "WMS", "title": "EIV Punkte", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=eiv_p&", "name": "eiv_p" },
+
+ { "id": "oek_f", "folder": "oek", "type": "WMS", "title": "OEK Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=oek_f&", "name": "oek_f" },
+
+ { "id": "ema_f", "folder": "ema", "type": "WMS", "title": "EMA Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=ema_f&", "name": "ema_f" },
+
+ { "id": "mae_f", "folder": "mae", "type": "WMS", "title": "MAE Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=mae&", "name": "mae" },
+
+ { "id": "nnsg", "folder": "schutzgebiet", "type": "WMS", "title": "Naturschutzgebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=naturschutzgebiet&", "name": "naturschutzgebiet" },
+ { "id": "npz", "folder": "schutzgebiet", "type": "WMS", "title": "Naturparkzonen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=naturparkzonen&", "name": "naturparkzonen" },
+ { "id": "lsg", "folder": "schutzgebiet", "type": "WMS", "title": "Landschaftsschutzgebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=landschaftsschutzgebiet&", "name": "landschaftsschutzgebiet" },
+ { "id": "vsg", "folder": "schutzgebiet", "type": "WMS", "title": "Vogelschutzgebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=vogelschutzgebiet&", "name": "vogelschutzgebiet" },
+ { "id": "ffh", "folder": "schutzgebiet", "type": "WMS", "title": "FFH Gebiete", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=ffh&", "name": "ffh" },
+
+ { "id": "ntpz", "folder": "nationalpark", "type": "WMS", "title": "Nationalpark Zonen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=nationalpark_zonen&", "name": "nationalpark_zonen" },
+ { "id": "ntpg", "folder": "nationalpark", "type": "WMS", "title": "Nationalpark Grenzen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=nationalpark_grenze&", "name": "nationalpark_grenze" },
+
+ { "id": "natraum_g", "folder": "naturraum", "type": "WMS", "title": "Naturräume Grenzen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=natraum_lkompvo_grenzen&", "name": "natraum_lkompvo_grenzen" },
+ { "id": "natraum_f", "folder": "naturraum", "type": "WMS", "title": "Naturräume Flächen", "url": "https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_ogc/wms_getmap.php?mapfile=natraum_lkompvo&", "name": "natraum_lkompvo" },
+
+ { "id": "lagebezeichnung", "folder": "alkis", "type": "WMS", "title": "Lagebezeichnungen", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "Lagebezeichnungen" },
+ { "id": "flurstueck_wms", "folder": "alkis", "type": "WMS", "title": "Flurstücke (WMS)", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "Flurstueck", "active": true},
+ { "id": "flurstueck_wfs", "folder": "alkis", "type": "WFS", "title": "Flurstücke (WFS; ab hoher Zoomstufe)", "url": "/client/proxy/wfs?", "name": "ave:Flurstueck", "minZoom": 17},
+ { "id": "gebaeude", "folder": "alkis", "type": "WMS", "title": "Gebäude / Bauwerke", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "GebaeudeBauwerke" },
+ { "id": "nutzung", "folder": "alkis", "type": "WMS", "title": "Nutzung", "url": "https://geo5.service24.rlp.de/wms/liegenschaften_rp.fcgi?", "name": "Nutzung" },
+
+ { "id": "lk", "folder": "verwaltung", "type": "WMS", "title": "Landkreise", "url": "http://geo5.service24.rlp.de/wms/verwaltungsgrenzen_rp.fcgi?", "name": "Landkreise" },
+ { "id": "vg", "folder": "verwaltung", "type": "WMS", "title": "Verbandsgemeinden", "url": "http://geo5.service24.rlp.de/wms/verwaltungsgrenzen_rp.fcgi?", "name": "Verbandsgemeinden" },
+ { "id": "gmd", "folder": "verwaltung", "type": "WMS", "title": "Gemeinden", "url": "http://geo5.service24.rlp.de/wms/verwaltungsgrenzen_rp.fcgi?", "name": "Gemeinden" },
+
+ { "id": "webatlas_farbe", "folder": "webatlas", "type": "WMS", "order": -1, "title": "farbig", "attribution": "LVermGeo", "url": "https://maps.service24.rlp.de/gisserver/services/RP/RP_WebAtlasRP/MapServer/WmsServer?", "name": "RP_WebAtlasRP", "active": true},
+ { "id": "webatlas_grau", "folder": "webatlas", "type": "WMS", "title": "grau", "attribution": "LVermGeo", "url": "https://maps.service24.rlp.de/gisserver/services/RP/RP_ETRS_Gt/MapServer/WmsServer?", "name": "0", "active": false },
+ { "id": "luftbilder", "folder": "bg", "type": "WMS", "title": "Luftbilder", "attribution": "LVermGeo", "url": "http://geo4.service24.rlp.de/wms/dop_basis.fcgi?", "name": "rp_dop", "active": false },
+ { "id": "basemap_farbe", "folder": "basemap", "type": "WMS", "title": "farbig", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_basemapde?", "name": "de_basemapde_web_raster_farbe", "active": false },
+ { "id": "basemap_grau", "folder": "basemap", "type": "WMS", "title": "grau", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_basemapde?", "name": "de_basemapde_web_raster_grau", "active": false },
+ { "id": "dtk_farbe", "folder": "dtk", "type": "WMS", "title": "farbig", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/dtk5_rp.fcgi?", "name": "rp_dtk5", "active": false },
+ { "id": "dtk_grau", "folder": "dtk", "type": "WMS", "title": "grau", "attribution": "LVermGeo", "url": "https://geo4.service24.rlp.de/wms/dtk5_rp.fcgi?", "name": "rp_dtk5_grau", "active": false }
+ ],
+ "layertree":
{
- "nameURL": "/client/proxy?https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_alkis/gem_search.php?placename={q}",
- "parcelURL": "/client/proxy?https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_alkis/flur_search.php?gmk_gmn={district}&fln={field}&fsn_zae={parcelA}&fsn_nen={parcelB}&export=json",
+ "open": false,
+ "title": "Inhalte",
+ "buttons":
+ [
+ { "id": "import_layer", "title": "Hinzufügen..." }
+ ]
+ },
+ "controls":
+ {
+ "buttons":
+ [
+ { "id": "zoom_in", "icon": "", "title": "Zoom +" },
+ { "id": "zoom_out", "icon": "", "title": "Zoom -" },
+ { "id": "zoom_home", "icon": "", "title": "Anfangsausdehung" }
+ ]
+ },
+ "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}",
+ "zoom": 17,
+ "marker_color": "darkgray",
+ "marker_title": "Such-Ergebnis"
+ },
+ "searchparcel":
+ {
+ "open": false,
+ "name_url": "/client/proxy?https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_alkis/gem_search.php?placename={q}",
+ "parcel_url": "/client/proxy?https://geodaten.naturschutz.rlp.de/kartendienste_naturschutz/mod_alkis/flur_search.php?gmk_gmn={district}&fln={field}&fsn_zae={parcelA}&fsn_nen={parcelB}&export=json",
"districts_service":
{
"type": "WFS",
"url": "http://geo5.service24.rlp.de/wfs/verwaltungsgrenzen_rp.fcgi?",
"name": "vermkv:gemarkungen_rlp",
- "order": 10,
- "minZoom": 11,
- "maxZoom": 17
+ "format": "application/json; subtype=geojson",
+ "min_zoom": 12
},
"fields_service":
{
@@ -110,61 +148,156 @@
"filter_property": "gmkgnr"
}
},
+ "toolbox":
+ {
+ "open": false,
+ "items":
+ [
+ { "id": "view", "title": "Betrachten" },
+ { "id": "zoom_box", "title": "Zoom-Rechteck" },
+ { "id": "view_prev", "title": "Vorherige Ansicht" },
+ { "id": "view_next", "title": "Nächste Ansicht" },
+ { "id": "measure_line", "title": "Strecke messen" },
+ { "id": "measure_area", "title": "Fläche messen" },
+ { "id": "measure_clear", "title": "Messung löschen" },
+ { "id": "draw_points", "title": "Punkte zeichnen" },
+ { "id": "draw_lines", "title": "Linien zeichnen" },
+ { "id": "draw_polygons", "title": "Polygone zeichnen" },
+ { "id": "modify_features", "title": "Verschieben" },
+ { "id": "delete_features", "title": "Löschen" },
+ { "id": "buffer_features", "title": "Puffern" },
+ { "id": "cut_features", "title": "Ausschneiden" },
+ { "id": "import_layer", "title": "Importieren" },
+ { "id": "export", "title": "Exportieren" }
+ ],
+ "options":
+ {
+ "buffer_features":
+ {
+ "title": "Puffern",
+ "items":
+ [
+ { "id": "buffer_radius", "type": "integer", "title": "Radius (Meter)" },
+ { "id": "buffer_segments", "type": "integer", "title": "Segmente" },
+ { "id": "buffer_submit", "type": "button", "title": "Akzeptieren" }
+ ]
+ }
+ }
+ },
"import":
{
- "geopackageLibURL": "/static/libs/geopackage/4.2.3/"
+ "title": "Ebene hinzufügen",
+ "preview": true,
+ "wms_options": [ "https://sgx.geodatenzentrum.de/wms_topplus_open" ],
+ "wfs_options": [ "http://213.139.159.34:80/geoserver/uesg/wfs" ],
+ "wfs_proxy": "/client/proxy?",
+ "geopackage_lib": "/static/libs/geopackage/4.2.3/"
},
"export":
{
+ "title": "Exportieren",
"logo": "/static/assets/logo.png",
- "gifWebWorker": "/static/libs/gifjs/0.2.0/gif.worker.js",
- "defaultFilename": "Export",
- "defaultMargin": 10
+ "gif_worker": "/static/libs/gifjs/0.2.0/gif.worker.js",
+ "default_filename": "Export",
+ "default_margin": 10
+ },
+ "measure":
+ {
+ "line_color": "rgba( 255, 0, 0, 1.0 )",
+ "line_width": 3.0,
+ "line_dash": [ 5, 10 ],
+ "area_fill": "rgba( 255, 0, 0, 0.3 )",
+ "point_radius": 4.0,
+ "point_fill": "rgba( 255, 255, 255, 1.0 )",
+ "point_stroke": "rgba( 0, 0, 0, 1.0 )",
+ "text_color": "#871d33",
+ "text_back": "rgba( 255, 255, 255, 0.7 )"
},
"tools":
{
+ "editable": true,
+ "interactive_render": true,
"buffer":
{
- "defaultRadius": 5,
- "defaultSegments": 2
- }
+ "default_radius": 300,
+ "default_segments": 3
+ },
+ "snapping":
+ {
+ "show": true,
+ "active": true,
+ "tolerance": 10
+ },
+ "show_bounds": true
+ },
+ "output":
+ {
+ "id": "netgis-storage"
+ },
+ "attribution":
+ {
+ "prefix": "LANIS"
},
"styles":
{
- "editLayer":
+ "draw":
{
- "fill": "rgba( 255, 0, 0, 0.2 )",
+ "fill": "rgba( 255, 0, 0, 0.5 )",
"stroke": "#ff0000",
- "strokeWidth": 3,
- "pointRadius": 6
+ "width": 3,
+ "radius": 6,
+ "viewport_labels": true
+ },
+ "non_edit":
+ {
+ "fill": "rgba( 80, 80, 80, 0.5 )",
+ "stroke": "#666666",
+ "width": 3,
+ "radius": 6,
+ "viewport_labels": true
},
"select":
{
"fill": "rgba( 0, 127, 255, 0.5 )",
"stroke": "#007fff",
- "strokeWidth": 3,
- "pointRadius": 6
+ "width": 3,
+ "radius": 6
},
"sketch":
{
- "fill": "rgba( 0, 127, 255, 0.2 )",
- "stroke": "#0080ff",
- "strokeWidth": 3,
- "pointRadius": 6
+ "fill": "rgba( 0, 127, 0, 0.5 )",
+ "stroke": "#007f00",
+ "width": 3,
+ "radius": 6
+ },
+ "error":
+ {
+ "fill": "rgba( 255, 0, 0, 0.5 )",
+ "stroke": "#ff0000",
+ "width": 3,
+ "radius": 6
+ },
+ "bounds":
+ {
+ "fill": "rgba( 0, 0, 0, 0.0 )",
+ "stroke": "#000000",
+ "width": 3,
+ "radius": 6
},
"modify":
{
- "fill": "rgba( 0, 127, 255, 0.5 )",
- "stroke": "#0080ff",
- "strokeWidth": 3,
- "pointRadius": 6
+ "fill": "rgba( 255, 127, 0, 0.5 )",
+ "stroke": "#ff7f00",
+ "width": 3,
+ "radius": 6
},
"parcel":
{
- "fill": "rgba( 127, 255, 255, 0.5 )",
- "stroke": "#7fffff",
- "strokeWidth": 3
+ "fill": "rgba( 127, 0, 0, 0.0 )",
+ "stroke": "rgba( 127, 0, 0, 1.0 )",
+ "width": 1.5
},
+
"import":
{
"fill": "rgba( 0, 127, 255, 0.2 )",
@@ -172,4 +305,4 @@
"width": 1.5
}
}
-}
\ No newline at end of file
+}
diff --git a/templates/map/client/dist/netgis.min.css b/templates/map/client/dist/netgis.min.css
new file mode 100644
index 00000000..496927f2
--- /dev/null
+++ b/templates/map/client/dist/netgis.min.css
@@ -0,0 +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
diff --git a/templates/map/client/dist/netgis.min.js b/templates/map/client/dist/netgis.min.js
new file mode 100644
index 00000000..587a5af5
--- /dev/null
+++ b/templates/map/client/dist/netgis.min.js
@@ -0,0 +1,5733 @@
+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:
- 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; 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;
+};
diff --git a/templates/map/client/index.html b/templates/map/client/index.html
index b45b77db..6190cc32 100644
--- a/templates/map/client/index.html
+++ b/templates/map/client/index.html
@@ -1,15 +1,13 @@
{% load static %}
-
-
+
-
-
+
-
+
@@ -19,13 +17,14 @@
-
+
-
-
+
-
+