From 1b6234dd526c5bba08d0a575188cb9b4824a7f95 Mon Sep 17 00:00:00 2001 From: sebastianpauli <> Date: Thu, 8 May 2025 20:45:36 +0200 Subject: [PATCH] Update: initial how to guide --- HOWTO.md | 398 ++++++++++++++++++++++++++++++++++ README.md | 1 + TUTORIAL.md | 4 +- data/test_config_lanis.json | 1 + dist/netgis.min.css | 2 +- dist/netgis.min.js | 76 ++++--- docs/global.html | 4 +- docs/index.html | 2 +- docs/netgis.Attribution.html | 2 +- docs/netgis.Client.html | 4 +- docs/netgis.Controls.html | 2 +- docs/netgis.Export.html | 2 +- docs/netgis.Geolocation.html | 20 +- docs/netgis.Import.html | 2 +- docs/netgis.Info.html | 2 +- docs/netgis.LayerTree.html | 2 +- docs/netgis.Legend.html | 2 +- docs/netgis.Map.html | 48 +++- docs/netgis.Menu.html | 2 +- docs/netgis.OWS.html | 2 +- docs/netgis.SearchParcel.html | 2 +- docs/netgis.SearchPlace.html | 2 +- docs/netgis.TimeSlider.html | 2 +- docs/netgis.Toolbox.html | 2 +- docs/netgis.WMC.html | 2 +- docs/netgis.html | 2 +- 26 files changed, 530 insertions(+), 60 deletions(-) create mode 100644 HOWTO.md diff --git a/HOWTO.md b/HOWTO.md new file mode 100644 index 0000000..50fb230 --- /dev/null +++ b/HOWTO.md @@ -0,0 +1,398 @@ +# NetGIS Client - How To... + +## Client Integration +- [Load a config JSON from a URL](#load-a-config-json-from-a-url) +- [Include the client in a web form for input submission](#include-the-client-in-a-web-form-for-input-submission) +- [Load a WMC document at startup](#load-a-wmc-document-at-startup) + +## User Interface +- [Add a web link to the top menu bar](#add-a-web-link-to-the-top-menu-bar) +- [Add dropdown menus to the top menu bar](#add-dropdown-menus-to-the-top-menu-bar) +- [Add a menu with selectable scales](#add-a-menu-with-selectable-scales) +- [Add nested folders to the layer tree](#add-nested-folders-to-the-layer-tree) +- [Create a search input with zoomable results](#create-a-search-input-with-zoomable-results) + +## Map & Layers +- [Add a dynamic scalebar to the map](#add-a-dynamic-scalebar-to-the-map) +- [Change the main map projection](#change-the-main-map-projection) +- [Add a WMS layer](#add-a-wms-layer) +- [Add a password protected WMS/WFS layer](#add-a-password-protected-wmswfs-layer) +- [Add a geolocation button to the map controls](#add-a-geolocation-button-to-the-map-controls) +- [Enable feature info queries on a WMS layer](#enable-feature-info-queries-on-a-wms-layer) +- [Add an invisible layer for data queries](#add-an-invisible-layer-for-data-queries) +- [Enable vector feature edit tools](#enable-vector-feature-edit-tools) + +### Load a config JSON from a URL + +A config JSON file can be loaded from an external URL. Just pass a valid address as a string to the client config parameter like this: +```js +var client = new netgis.Client( "container", "https://sebastianpauli.net/netgis/demo/test_config_lanis.json" ); +``` + +### Include the client in a web form for input submission + +Make sure you have the client configured for [vector feature editing](#enable-vector-feature-edit-tools). +The client will then automatically store all edited features as a GeoJSON string in an input element. +There are two ways to configure this storage element: +1. If the element already exists somewhere in your HTML document, you can pass its id in the edit tools config section: +```html +
+ +
+ +
+``` +```js +"tools": +{ + "output_id": "my-edit-features" +} +``` +2. If the element with the given output id does not exist (or none is specified) +the client will automatically create a hidden storage element as child of the client container (with the class "netgis-storage" added), +which could also be part of a form: +```html +
+
+
+``` +```js +console.info( "Output GeoJSON:", form.getElementsByClassName( "netgis-storage" )[ 0 ].value ); +``` +For the second approach you could also configure a new id and/or input name for the created element: +```js +"tools": +{ + "output_id": "my-edit-features", + "output_name": "edit_features" +} +``` + +Either way if the form is submitted, the GeoJSON value stored in the input will be send with the post data (e.g. as ```$_POST[ "edit_features" ]```). +You can also easily access the storage element from your JavaScript as a member of the client instance like this: +```js +console.info( "Output GeoJSON:", client.output.value ); +``` + +### Load a WMC document at startup + +To load a Web Map Context document, you need to add the wmc section to the config with at least the service URL including an ```{id}``` placeholder. +The id to insert into the URL can then come either from the config like this: + +```js +"wmc": +{ + "url": "./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_exportWmc2Json.php?confFileName=mobilemap2&epsg=25832&withHierarchy=1&wmc_id={id}", + "id": 14971 +} +``` + +Or from a URL parameter: + +``` +geoportal.html?wmc_id=14971 +``` + +### Add a web link to the top menu bar + +Just add an entry to the menu sections items list with a URL parameter and it will act as a link: +```js +"menu": +{ + "items": + [ + { "id": "my-link", "title": "Link", "url": "http://www.example.com" } + ] +} +``` + +### Add dropdown menus to the top menu bar + +If a menu item itself has no id but an items parameter, it will act as a dropdown menu: +```js +"menu": +{ + "items": + [ + { + "title": "Dropdown", + "items": + [ + { "id": "sub-item-1", "title": "Item 1" }, + { "id": "sub-item-2", "title": "Item 2" }, + { "id": "sub-item-3", "title": "Item 3" } + ] + } + ] +} +``` + +### Add a menu with selectable zoom scales + +To achieve this you could add a dropdown to the menu section with the scale items. +The easiest way to add selectable scales is to add sub items manually with the special id ```zoom_scale``` and a scale value as title: + +```js +"menu": +{ + "items": + [ + { + "title": "Scale", + "items": + [ + { "id": "zoom_scale", "title": "1:500" }, + { "id": "zoom_scale", "title": "1:1000" }, + { "id": "zoom_scale", "title": "1:10000" } + ] + } + ] +} +``` + +If you do not want to create the scale entries manually, you can also add a scales array to the map section: + +```js +"map": +{ + "scales": [ 500, 1000, 5000, 10000, 100000 ] +} +``` + +And if you then leave the sub items for the dropdown menu empty and give it the special id ```scales``` +then the client will automatically populate the menu with the configured map scales: + +```js +"menu": +{ + "items": + [ + { "id": "scales", "title": "Scale", "items": [] } + ] +} +``` + +### Add nested folders to the layer tree + +First add a "folders" section to the configuration: + +```js +"folders": +[ +] +``` + +Then you can add folder items to it: + +```js +"folders": +[ + { "id": "my-folder", "title": "My Folder" }, + { "id": "my-folder-2", "title": "My Second Folder" } +] +``` + +To add layers to your folders just set the folder property of layer to the folder id: + +```js +{ "id": "child_layer", "folder": "my-folder-2", "type": "OSM", "title": "Open Street Map" } +``` + +To nest folders as sub folders you can set their ```parent``` property to the id of another folder: + +```js +{ "id": "my-folder-2", "parent": "my-folder", "title": "My Second Folder" } +``` + +### Create a search input with zoomable results + +First enable the ```searchplace``` module: + +```js +"modules": +{ + "searchplace": true +} +``` + +You should now see a search bar at the top of the map view, but it won't do anything useful yet. +To enable dynamic searching you need to set the URL (with a ```{query}``` placeholder) to a search API in the searchplace config section. +Here is an example to a Geoportal endpoint: + +```js +"searchplace": +{ + "url": "https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG=4326&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={query}&name_startsWith={query}" +} +``` + +As of this writing the client mainly understands this response JSON format (more to come): + +```js +{ + "geonames": + [ + { "title": "Trier (Ort)", "category": "haus", "minx": "6.5566040767685", "miny": "49.700494985294", "maxx": "6.7305812957277", "maxy": "49.835273380968" } + ] +} +``` + +### Add a dynamic scalebar to the map + +Just set the ```scalebar``` option in the map section to true: + +```js +"map": +{ + "scalebar": true +} +``` + +Now a dynamic scalebar should appear at the bottom right of the map view. +If you also provide a list of scales in your map section, the scalebar will also act as a clickable scale selector. + +### Change the main map projection + +The common web projections EPSG:4326 and EPSG:3857 are always included in the client. +If you define your own projections make sure to include the PROJ4JS library in your HTML: + +```html + +``` + +Then create a ```projections``` section in your configuration and add PROJ4 definitions as needed: + +```js +"projections": +[ + [ "EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs" ], + [ "EPSG:25833",b"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs" ] +] +``` + +Now you can set the main projection of your map view to a projection id like this: + +```js +"map": +{ + "projection": "EPSG:25832" +} +``` + +### Add a WMS layer + +Create a layer item of type ```WMS``` to your ```layers``` config section: + +```js +"layers": +[ + { "id": "top", "type": "WMS", "title": "TopPlusOpen", "attribution": "BKG", "url": "https://sgx.geodatenzentrum.de/wms_topplus_open?", "name": "web" } +] +``` + +### Add a password protected WMS/WFS layer + +Just add ```username``` and ```password``` properties to a WMS or WFS layer that is basic auth protected: + +```js +{ "id": "my_wms", "type": "WMS", "title": "Flurstücke", "url": "https://example.com/protected-wms", "name": "layername", "username": "username", "password": "password" } +``` + +### Add a geolocation button to the map controls + +First enable the ```geolocation``` module: + +```js +"modules": +{ + "geolocation": true +} +``` + +Then you can add a geolocation button to your map controls section: + +```js +"controls": +{ + "buttons": + [ + { "id": "geolocation", "icon": "", "title": "Device Location" } + ] +} +``` + +This will then show a geolocation settings popup if the user clicks on it. + +### Enable feature info queries on a WMS layer + +First enable the ```info``` module: + +```js +"modules": +{ + "info": true +} +``` + +Then you can add a ```query_url``` parameter to your layer with special placeholders (```bbox, proj, width, height, px, py```) like this: + +```js +{ "id": "topo", "type": "WMS", "title": "Topo WMS", "url": "https://ows.mundialis.de/services/service?", "name": "TOPO-WMS", "query_url": "https://ows.mundialis.de/services/service?service=WMS&version=1.1.0&request=GetFeatureInfo&styles=&layers=TOPO-WMS&query_layers=TOPO-WMS&bbox={bbox}&srs={proj}&width={width}&height={height}&x={px}&y={py}" } +``` + +Now the layer should be marked as queryable in the layer tree (pointer icon) and it a info popup should open after clicking on the map. + +### Add an invisible layer for data queries + +Make sure you have the ```info``` module activated: + +```js +"modules": +{ + "info": true +} +``` + +Then as with the WMS info queries you can also add a query URL parameter to a layer of type ```HIDDEN``` so that it won't be visible on the map or the layer tree. +For example such a hidden layer could be used to make altitude queries for each click based on a Digital Elevation Model like this: + +```js +{ "id": "dem_hidden", "title": "DEM", "hidden": true, "active": true, "type": "HIDDEN", "query": true, "query_url": "https://www.geoportal.rlp.de/mapbender/extensions/mobilemap2/scripts/heightRequest.php?&lang=de&coord={x},{y}" } +``` + +The URL placeholders ```x``` and ```y``` will be replaced by the click coordinates for each request. + +### Enable vector feature edit tools + +First activate edit mode by setting the client to editable. +Either set the config parameter in the tools section: + +```js +"tools": +{ + "editable": true +} +``` + +Or set the data-editable attribute on the container element like this: + +```html +
+``` + +Now your client should be in edit mode. You now need to provide some vector feature editing tools. +One of the easiest ways to do this is to add drawing tool buttons to the top menu. +In this example we add a button to go into polygon drawing mode and one to switch back to the default viewing/panning mode: + +```js +"menu": +{ + "items": + [ + { "id": "view", "title": "View" }, + { "id": "draw_polygons", "title": "Draw" } + ] +} +``` + +Note the special id values as specified in the [Commands](https://sebastianpauli.net/netgis/docs/global.html#Commands) section. diff --git a/README.md b/README.md index d5dc918..3d87638 100644 --- a/README.md +++ b/README.md @@ -24,5 +24,6 @@ In early development, things will change and break frequently! ## Documentation: - Follow the [Tutorial](https://github.com/sebastianpauli/netgis-client/blob/main/TUTORIAL.md) +- See the [How To](https://github.com/sebastianpauli/netgis-client/blob/main/HOWTO.md) guides for more examples - View the [Online Documentation](https://sebastianpauli.net/netgis/docs/) - See the [Demo](https://github.com/sebastianpauli/netgis-client/tree/main/demo) folder for example implementations diff --git a/TUTORIAL.md b/TUTORIAL.md index 9ef17e1..736f935 100644 --- a/TUTORIAL.md +++ b/TUTORIAL.md @@ -59,7 +59,7 @@ Once all the styles and scripts are ready, we can create our client. First let's create a simple container element to display the client in: ```html -
+
``` Then we can write the main script that will create the client instance: @@ -102,7 +102,7 @@ var config = "map": { - "center_lonlat": [ 7.0, 51.0 ], + "center_lonlat": [ 7.0, 50.0 ], "zoom": 14 } }; diff --git a/data/test_config_lanis.json b/data/test_config_lanis.json index 0ed2cbb..91f621f 100644 --- a/data/test_config_lanis.json +++ b/data/test_config_lanis.json @@ -202,6 +202,7 @@ "tools": { "editable": true, + "output_id": "my-output123", "interactive_render": true, "select_multi_reset": true, diff --git a/dist/netgis.min.css b/dist/netgis.min.css index 054c347..e6a051b 100644 --- a/dist/netgis.min.css +++ b/dist/netgis.min.css @@ -1 +1 @@ -.netgis-attribution{position:absolute;right:0;bottom:0;padding:1mm;background:rgba(255,255,255,0.5);font-size:2.5mm;z-index:100}.netgis-client{position:relative;box-sizing:border-box;font-size:4mm;overflow:hidden}.netgis-client *{box-sizing:border-box}.netgis-client button{font-size:inherit}.netgis-contextmenu{position:absolute;width:64mm;z-index:90000}.netgis-contextmenu>*{display:block;position:relative;width:100%;height:12mm;line-height:12mm;padding:0 4mm;text-align:left;background:none}.netgis-contextmenu>label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm}.netgis-contextmenu>label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-contextmenu>label span:only-of-type{left:12mm;right:0;padding:0 4mm;padding-left:0;cursor:pointer}.netgis-contextmenu>label input[type=range]{width:100%;cursor:pointer}.netgis-controls{position:absolute;width:12mm;right:4mm;bottom:8mm;overflow:hidden;z-index:100}.netgis-client.netgis-footer>.netgis-controls{bottom:44mm}.netgis-controls button{font-size:5mm!important;color:inherit;width:100%;height:12mm;padding:0!important;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%;max-height:100mm;overflow-x:hidden;overflow-y:auto}.netgis-dropdown li>ul li{padding-right:5mm}.netgis-dropdown li:hover>ul{display:block}.netgis-dropdown li i:first-child{margin-right:4mm!important}.netgis-dropdown li i:last-child{margin-left:4mm!important;margin-right:0!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>label>.netgis-loader{width:10mm;height:10mm;bottom:0;right:0;font-size:5mm}.netgis-import .netgis-geoportal>label>.netgis-loader i{top:2.75mm}.netgis-import .netgis-geoportal .netgis-tree{position:absolute;left:8mm;right:8mm;top:30mm;bottom:21mm;overflow:auto;padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree li{padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree label{padding-left:0;margin-bottom:0;font-weight:normal}.netgis-import .netgis-geoportal .netgis-tree .netgis-folder>details summary input{margin-left:3mm}.netgis-import .netgis-geoportal .netgis-tree .netgis-item input{margin-left:4mm}.netgis-import .netgis-geoportal>button:last-of-type{display:block;position:absolute;width:89%;right:8mm;bottom:8mm}@media (max-width:599px){.netgis-import .netgis-geoportal .netgis-tree{left:4mm;right:4mm;top:25mm}.netgis-import .netgis-geoportal button:last-of-type{width:auto;right:4mm;padding-right:8mm}}.netgis-legend{padding:3mm}.netgis-legend details{margin-bottom:2mm}.netgis-legend summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-legend details>div{padding:2mm}.netgis-legend details>div img{max-width:100%}.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 .netgis-zoom-box{border:.5mm solid white;background:rgba(153,0,0,0.5)}.netgis-map .ol-scale-bar{right:24mm;bottom:10mm;left:auto;opacity:.7}.netgis-map .ol-scale-bar:hover{opacity:1}.netgis-map .ol-scale-bar select{position:absolute;width:100%;height:100%;top:-1mm;left:0;opacity:0;background:transparent;pointer-events:all!important;cursor:pointer}.netgis-client.netgis-footer>.netgis-map .ol-scale-bar{bottom:46mm}.netgis-menu{position:absolute;left:0;right:0;top:0;height:12mm;max-height:12mm;line-height:12mm;white-space:nowrap;text-align:right;font-size:0;z-index:10000}.netgis-menu.netgis-menu-large{max-height:100%}.netgis-menu .netgis-menu-toggle{z-index:1}.netgis-menu>*{display:inline-block;min-width:12mm;height:12mm;padding:0 4mm;margin:0;font-size:4mm!important}.netgis-menu>h1{position:absolute;left:0;top:0;bottom:0;font-weight:bold;cursor:default}.netgis-menu a{color:inherit;text-decoration:none}.netgis-menu button,.netgis-menu select{color:inherit;background:none;border:none;outline:none;cursor:pointer}.netgis-menu button img,.netgis-menu a img{position:relative;top:.7mm;height:1em}.netgis-menu button i:not(:only-child),.netgis-menu a i:not(:only-child),.netgis-menu button img:not(:only-child),.netgis-menu a img:not(:only-child){width:4mm;margin-right:3mm;text-align:center}.netgis-menu>.netgis-wrapper{display:inline-block;position:relative;padding:0}.netgis-menu>.netgis-wrapper>.netgis-icon{position:absolute;left:0;top:0;padding-left:4mm;pointer-events:none}.netgis-menu>.netgis-wrapper select{width:100%;height:100%;padding-left:11mm}.netgis-menu>.netgis-wrapper select:last-child{padding-left:4mm}@media (max-width:599px){.netgis-menu>*:not(.netgis-menu-toggle){display:block;width:100%;text-align:left}.netgis-menu{overflow:hidden}.netgis-menu.netgis-menu-large{overflow-y:auto}.netgis-menu .netgis-dropdown{height:auto}.netgis-menu .netgis-dropdown ul{position:relative}.netgis-menu .netgis-dropdown li{height:auto}.netgis-menu .netgis-dropdown li>ul{top:auto;left:auto}}@media (min-width:600px){.netgis-menu-toggle{display:none!important}}.netgis-modal{display:none;position:absolute;width:100%;height:100%;top:0;left:0;padding:6mm;z-index:10000;background:rgba(0,0,0,0.6)}.netgis-modal.netgis-show{display:block}.netgis-modal>*{position:relative;width:100%;height:100%;max-width:150mm;margin:0 auto}.netgis-modal .netgis-content{position:absolute;width:100%;top:12mm;bottom:0;padding:12mm;overflow:auto}.netgis-modal .netgis-button{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel{position:absolute;left:0;width:80mm;top:12mm;bottom:0;z-index:1000;-webkit-transform:translateX(-110%);transform:translateX(-110%);transition:transform 150ms ease;will-change:transform}.netgis-panel.netgis-show{-webkit-transform:none;transform:none}.netgis-client.netgis-footer>.netgis-panel{bottom:36mm}.netgis-panel>div{position:absolute;left:0;right:0;top:12mm;bottom:0;overflow:auto}.netgis-panel h2{margin:0 4mm;font-size:1em}.netgis-panel .netgis-button,.netgis-panel label{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel input[type=text]{margin-top:3mm}.netgis-panel .netgis-half{display:inline-block;width:50%!important;padding-right:1mm}.netgis-panel .netgis-half+.netgis-half{padding-left:1mm;padding-right:0}.netgis-panel .netgis-anim-bottom{transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-panel .netgis-anim-bottom.netgis-hide{display:initial;-webkit-transform:translateY(110%);transform:translateY(110%)}.netgis-panel .netgis-resize-bottom{max-height:80%}.netgis-popup{display:none;position:absolute;width:95mm;height:20mm;transform:translate(-50%,-100%);z-index:1000}.netgis-popup.netgis-dir-right{transform:translate(0%,-50%);height:auto}.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-dir-down .netgis-arrow{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-dir-right .netgis-arrow{position:absolute;right:0;top:50%;transform:translateY(-49%);width:0;height:0;border-left:3mm solid white;border-bottom:3mm solid transparent;border-top:3mm solid transparent}.netgis-popup.netgis-dir-down .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-dir-right .netgis-content{position:absolute;min-height:12mm;max-height:100mm;left:0;right:2.9mm;padding:4mm 0;overflow:auto;bottom:0;transform:translateY(50%);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{top:0;left:0;font-size:6mm;text-align:center}.netgis-popup .netgis-loader .netgis-icon{width:auto;left:46%;top:30%}.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 details{margin-bottom:2mm}.netgis-popup summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-popup details>div{padding:2mm;overflow-x:auto}.netgis-popup details pre{margin:0;cursor:auto}.netgis-popup label{display:block;height:12mm;line-height:12mm;padding:0 2mm}.netgis-popup input[type=checkbox]:first-child{margin-right:3mm}.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-header .netgis-button.netgis-active{box-shadow:0 1mm 2mm 0 rgba(0,0,0,0.1),0 2mm 5mm 0 rgba(0,0,0,0.05)!important;z-index:1}.netgis-tabs>.netgis-content section{position:absolute;width:100%;height:100%;left:0;top:0;padding:8mm;overflow:auto}.netgis-tabs>.netgis-content section.netgis-hide{display:none}@media (max-width:599px){.netgis-tabs.netgis-scroll>.netgis-header{height:12mm}.netgis-tabs.netgis-scroll>.netgis-content{top:12mm}.netgis-tabs>.netgis-content section{padding:4mm}}.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-border-d{border:1mm solid #f6f5f5}.netgis-gradient-a{background:linear-gradient(to bottom,#71182b 0,#470f1b 100%)}.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-space{height:6mm}.netgis-tree .netgis-folder img.netgis-icon,.netgis-tree .netgis-item img.netgis-icon{display:inline-block;position:relative;height:5mm;width:auto;left:auto;right:auto;top:1mm;margin-right:2mm}.netgis-tree .netgis-item .netgis-right{position:absolute;height:100%;right:12mm;top:0;text-align:right;opacity:.2}.netgis-tree .netgis-item .netgis-right>*{display:inline-block;width:6mm;text-align:center}.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;position:relative;margin-bottom:6mm;font-weight:bold;cursor:pointer;user-select:none}.netgis-form input,.netgis-form select{display:block;width:100%;margin-top:4mm;padding:2mm}.netgis-form input[type=file]{padding:6mm;cursor:pointer;background:#efefef}.netgis-form input[type=checkbox]{display:inline-block;width:12mm;margin:0}.netgis-form input[type=checkbox]:first-child{width:4mm;margin-right:3mm;margin-top:2mm;margin-bottom:2mm}.netgis-form button{display:block;width:100%;height:12mm}.netgis-form button:not(:last-child){margin-bottom:6mm}.netgis-form select{cursor:pointer}.netgis-loader{position:absolute;width:100%;height:100%;z-index:999999;text-align:center;font-size:12mm;cursor:progress;opacity:1;transition:opacity ease 600ms}.netgis-loader.netgis-fade{opacity:0}.netgis-loader>i{position:absolute;width:100%;left:0;top:50%;transform:translateY(-50%);animation:netgis-spin 2s linear infinite}.netgis-loader>h2{position:absolute;left:4mm;right:4mm;bottom:30%;font-size:4mm}@keyframes netgis-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@media (max-width:599px){.netgis-hide-mobile{display:none!important}}@media (min-width:600px){.netgis-hide-desktop{display:none!important}} \ No newline at end of file +.netgis-attribution{position:absolute;right:0;bottom:0;padding:1mm;background:rgba(255,255,255,0.5);font-size:2.5mm;z-index:100}.netgis-client{position:relative;box-sizing:border-box;font-size:4mm;overflow:hidden}.netgis-client *{box-sizing:border-box}.netgis-client button{font-size:inherit}.netgis-contextmenu{position:absolute;width:64mm;z-index:90000}.netgis-contextmenu>*{display:block;position:relative;width:100%;height:12mm;line-height:12mm;padding:0 4mm;text-align:left;background:none}.netgis-contextmenu>label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm}.netgis-contextmenu>label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-contextmenu>label span:only-of-type{left:12mm;right:0;padding:0 4mm;padding-left:0;cursor:pointer}.netgis-contextmenu>label input[type=range]{width:100%;cursor:pointer}.netgis-controls{position:absolute;width:12mm;right:4mm;bottom:8mm;overflow:hidden;z-index:100}.netgis-client.netgis-footer>.netgis-controls{bottom:44mm}.netgis-controls button{font-size:5mm!important;color:inherit;width:100%;height:12mm;padding:0!important;border:none;background-color:inherit;cursor:pointer}.netgis-dropdown{display:inline-block;position:relative;padding:0}.netgis-dropdown>:first-child{z-index:10;padding:0}.netgis-dropdown ul{display:none;position:absolute;min-width:100%;left:0;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%;max-height:100mm;overflow-x:hidden;overflow-y:auto}.netgis-dropdown li>ul li{padding-right:5mm}.netgis-dropdown li:hover>ul{display:block}.netgis-dropdown li i:first-child{margin-right:4mm!important}.netgis-dropdown li i:last-child{margin-left:4mm!important;margin-right:0!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>label>.netgis-loader{width:10mm;height:10mm;bottom:0;right:0;font-size:5mm}.netgis-import .netgis-geoportal>label>.netgis-loader i{top:2.75mm}.netgis-import .netgis-geoportal .netgis-tree{position:absolute;left:8mm;right:8mm;top:30mm;bottom:21mm;overflow:auto;padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree li{padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree label{padding-left:0;margin-bottom:0;font-weight:normal}.netgis-import .netgis-geoportal .netgis-tree .netgis-folder>details summary input{margin-left:3mm}.netgis-import .netgis-geoportal .netgis-tree .netgis-item input{margin-left:4mm}.netgis-import .netgis-geoportal>button:last-of-type{display:block;position:absolute;width:89%;right:8mm;bottom:8mm}@media (max-width:599px){.netgis-import .netgis-geoportal .netgis-tree{left:4mm;right:4mm;top:25mm}.netgis-import .netgis-geoportal button:last-of-type{width:auto;right:4mm;padding-right:8mm}}.netgis-legend{padding:3mm}.netgis-legend details{margin-bottom:2mm}.netgis-legend summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-legend details>div{padding:2mm}.netgis-legend details>div img{max-width:100%}.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 .netgis-zoom-box{border:.5mm solid white;background:rgba(153,0,0,0.5)}.netgis-map .ol-scale-bar{right:24mm;bottom:10mm;left:auto;opacity:.7}.netgis-map .ol-scale-bar:hover{opacity:1}.netgis-map .ol-scale-bar select{position:absolute;width:100%;height:100%;top:-1mm;left:0;opacity:0;background:transparent;pointer-events:all!important;cursor:pointer}.netgis-client.netgis-footer>.netgis-map .ol-scale-bar{bottom:46mm}.netgis-menu{position:absolute;left:0;right:0;top:0;height:12mm;max-height:12mm;line-height:12mm;white-space:nowrap;text-align:right;font-size:0;z-index:10000}.netgis-menu.netgis-menu-large{max-height:100%}.netgis-menu .netgis-menu-toggle{z-index:1}.netgis-menu>*{display:inline-block;min-width:12mm;height:12mm;padding:0 4mm;margin:0;font-size:4mm!important}.netgis-menu>h1{position:absolute;left:0;top:0;bottom:0;font-weight:bold;cursor:default}.netgis-menu a{color:inherit;text-decoration:none}.netgis-menu button,.netgis-menu select{color:inherit;background:none;border:none;outline:none;cursor:pointer}.netgis-menu button img,.netgis-menu a img{position:relative;top:.7mm;height:1em}.netgis-menu button i:not(:only-child),.netgis-menu a i:not(:only-child),.netgis-menu button img:not(:only-child),.netgis-menu a img:not(:only-child){width:4mm;margin-right:3mm;text-align:center}.netgis-menu>.netgis-wrapper{display:inline-block;position:relative;padding:0}.netgis-menu>.netgis-wrapper>.netgis-icon{position:absolute;left:0;top:0;padding-left:4mm;pointer-events:none}.netgis-menu>.netgis-wrapper select{width:100%;height:100%;padding-left:11mm}.netgis-menu>.netgis-wrapper select:last-child{padding-left:4mm}@media (max-width:599px){.netgis-menu>*:not(.netgis-menu-toggle){display:block;width:100%;text-align:left}.netgis-menu{overflow:hidden}.netgis-menu.netgis-menu-large{overflow-y:auto}.netgis-menu .netgis-dropdown{height:auto}.netgis-menu .netgis-dropdown ul{position:relative}.netgis-menu .netgis-dropdown li{height:auto}.netgis-menu .netgis-dropdown li>ul{top:auto;left:auto}}@media (min-width:600px){.netgis-menu-toggle{display:none!important}}.netgis-modal{display:none;position:absolute;width:100%;height:100%;top:0;left:0;padding:6mm;z-index:10000;background:rgba(0,0,0,0.6)}.netgis-modal.netgis-show{display:block}.netgis-modal>*{position:relative;width:100%;height:100%;max-width:150mm;margin:0 auto}.netgis-modal .netgis-content{position:absolute;width:100%;top:12mm;bottom:0;padding:12mm;overflow:auto}.netgis-modal .netgis-button{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel{position:absolute;left:0;width:80mm;top:12mm;bottom:0;z-index:1000;-webkit-transform:translateX(-110%);transform:translateX(-110%);transition:transform 150ms ease;will-change:transform}.netgis-panel.netgis-show{-webkit-transform:none;transform:none}.netgis-client.netgis-footer>.netgis-panel{bottom:36mm}.netgis-panel>div{position:absolute;left:0;right:0;top:12mm;bottom:0;overflow:auto}.netgis-panel h2{margin:0 4mm;font-size:1em}.netgis-panel .netgis-button,.netgis-panel label{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel input[type=text]{margin-top:3mm}.netgis-panel .netgis-half{display:inline-block;width:50%!important;padding-right:1mm}.netgis-panel .netgis-half+.netgis-half{padding-left:1mm;padding-right:0}.netgis-panel .netgis-anim-bottom{transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-panel .netgis-anim-bottom.netgis-hide{display:initial;-webkit-transform:translateY(110%);transform:translateY(110%)}.netgis-panel .netgis-resize-bottom{max-height:80%}.netgis-popup{display:none;position:absolute;width:95mm;height:20mm;transform:translate(-50%,-100%);z-index:1000}.netgis-popup.netgis-dir-right{transform:translate(0%,-50%);height:auto}.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-dir-down .netgis-arrow{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-dir-right .netgis-arrow{position:absolute;right:0;top:50%;transform:translateY(-49%);width:0;height:0;border-left:3mm solid white;border-bottom:3mm solid transparent;border-top:3mm solid transparent}.netgis-popup.netgis-dir-down .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-dir-right .netgis-content{position:absolute;min-height:12mm;max-height:100mm;left:0;right:2.9mm;padding:4mm 0;overflow:auto;bottom:0;transform:translateY(50%);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{top:0;left:0;font-size:6mm;text-align:center}.netgis-popup .netgis-loader .netgis-icon{width:auto;left:46%;top:30%}.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 details{margin-bottom:2mm}.netgis-popup summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-popup details>div{padding:2mm;overflow-x:auto}.netgis-popup details pre{margin:0;cursor:auto}.netgis-popup label{display:block;height:12mm;line-height:12mm;padding:0 2mm}.netgis-popup input[type=checkbox]:first-child{margin-right:3mm}.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-header .netgis-button.netgis-active{box-shadow:0 1mm 2mm 0 rgba(0,0,0,0.1),0 2mm 5mm 0 rgba(0,0,0,0.05)!important;z-index:1}.netgis-tabs>.netgis-content section{position:absolute;width:100%;height:100%;left:0;top:0;padding:8mm;overflow:auto}.netgis-tabs>.netgis-content section.netgis-hide{display:none}@media (max-width:599px){.netgis-tabs.netgis-scroll>.netgis-header{height:12mm}.netgis-tabs.netgis-scroll>.netgis-content{top:12mm}.netgis-tabs>.netgis-content section{padding:4mm}}.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-border-d{border:1mm solid #f6f5f5}.netgis-gradient-a{background:linear-gradient(to bottom,#71182b 0,#470f1b 100%)}.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-space{height:6mm}.netgis-tree .netgis-folder img.netgis-icon,.netgis-tree .netgis-item img.netgis-icon{display:inline-block;position:relative;height:5mm;width:auto;left:auto;right:auto;top:1mm;margin-right:2mm}.netgis-tree .netgis-item .netgis-right{position:absolute;height:100%;right:12mm;top:0;text-align:right;opacity:.2}.netgis-tree .netgis-item .netgis-right>*{display:inline-block;width:6mm;text-align:center}.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;position:relative;margin-bottom:6mm;font-weight:bold;cursor:pointer;user-select:none}.netgis-form input,.netgis-form select{display:block;width:100%;margin-top:4mm;padding:2mm}.netgis-form input[type=file]{padding:6mm;cursor:pointer;background:#efefef}.netgis-form input[type=checkbox]{display:inline-block;width:12mm;margin:0}.netgis-form input[type=checkbox]:first-child{width:4mm;margin-right:3mm;margin-top:2mm;margin-bottom:2mm}.netgis-form button{display:block;width:100%;height:12mm}.netgis-form button:not(:last-child){margin-bottom:6mm}.netgis-form select{cursor:pointer}.netgis-loader{position:absolute;width:100%;height:100%;z-index:999999;text-align:center;font-size:12mm;cursor:progress;opacity:1;transition:opacity ease 600ms}.netgis-loader.netgis-fade{opacity:0}.netgis-loader>i{position:absolute;width:100%;left:0;top:50%;transform:translateY(-50%);animation:netgis-spin 2s linear infinite}.netgis-loader>h2{position:absolute;left:4mm;right:4mm;bottom:30%;font-size:4mm}@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/dist/netgis.min.js b/dist/netgis.min.js index 910c781..a0cb36a 100644 --- a/dist/netgis.min.js +++ b/dist/netgis.min.js @@ -11,12 +11,13 @@ netgis.Attribution.prototype.initConfig=function(a){if(a&&(a=a.layers))for(var b 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;bZeichnungsfl\u00e4che: "+netgis.util.formatArea(a,!0)+"":null;this.update()};netgis=netgis||{};netgis.Client=function(a,b){this.container=this.initContainer(a);this.logEvents=!1;netgis.util.isString(b)?netgis.util.isJSON(b,!1)?(b=JSON.parse(b),this.init(this.container,b)):(this.showLoader(!0),netgis.util.request(b,this.onConfigResponse.bind(this))):this.init(this.container,b)};netgis.Client.Config={loading_text:"Geoportal Client wird geladen..."};netgis.Client.Output={id:""}; +netgis.Attribution.prototype.onEditLayerChange=function(a){a=a.detail.geojson.area;for(var b=0;bZeichnungsfl\u00e4che: "+netgis.util.formatArea(a,!0)+"":null;this.update()};netgis=netgis||{};netgis.Client=function(a,b){this.container=this.initContainer(a);this.logEvents=!1;netgis.util.isString(b)?netgis.util.isJSON(b,!1)?(b=JSON.parse(b),this.init(this.container,b)):(this.showLoader(!0),netgis.util.request(b,this.onConfigResponse.bind(this))):this.init(this.container,b)};netgis.Client.Config={loading_text:"Geoportal Client wird geladen..."};netgis.Client.Output={id:"netgis-storage"}; netgis.Client.prototype.init=function(a,b){this.config=b;this.initParams(b);this.initConfig(b);this.initElements(a);this.initModules(b);this.initEvents();this.initOutput(b);a=new netgis.ContextMenu;a.attachTo(this.container);this.modules.contextmenu=a;this.popup=new netgis.Popup;this.popup.attachTo(this.container)};netgis.Client.prototype.initContainer=function(a){netgis.util.isString(a)&&(a=document.getElementById(a));a.classList.add("netgis-client","netgis-font");return a}; netgis.Client.prototype.initParams=function(a){var b=window.location.search.substr(1);b=b.split("&");this.params={};for(var c=0;c=e)return c;!0===b.viewport_labels&&(b=this.view.calculateExtent(this.map.getSize()),f=ol.geom.Polygon.fromExtent(b),b=new jsts.io.OL3Parser,d=b.read(d),f=b.read(f),d=d.intersection(f),d=b.write(d),c.setGeometry(d));e=netgis.util.formatArea(e,!0);(a=a.getProperties().title)&&(e=a+"\n"+e);c.setText(new ol.style.Text({text:e,font:"4mm Arial, sans-serif",fill:new ol.style.Fill({color:g}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]}))}return c}; -netgis.Map.prototype.styleNonEdit=function(a){var b=this.config.styles.non_edit,c=this.config.styles.select,d=a.getGeometry(),e=this.hoverFeature===a;-1=e)return c;!0===b.viewport_labels&&(b=this.map.getView().calculateExtent(this.map.getSize()),f=ol.geom.Polygon.fromExtent(b),b=new jsts.io.OL3Parser,d=b.read(d),f=b.read(f),d=d.intersection(f),d=b.write(d),c.setGeometry(d));e=netgis.util.formatArea(e,!0);(a=a.getProperties().title)&&(e=a+"\n"+e);c.setText(new ol.style.Text({text:e,font:"4mm Arial, sans-serif",fill:new ol.style.Fill({color:g}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]}))}return c}; -netgis.Map.prototype.styleSketch=function(a){var b=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.styleMeasure=function(a){var b=a.getGeometry(),c=this.config.measure;c||(c=netgis.Map.Measure);var d=new ol.style.Style({fill:new ol.style.Fill({color:c.area_fill}),stroke:new ol.style.Stroke({color:c.line_color,width:c.line_width,lineDash:c.line_dash})});b instanceof ol.geom.Polygon?(b=b.getArea(),d.setText(new ol.style.Text({text:[netgis.util.formatArea(b,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:c.text_color}),backgroundFill:new ol.style.Fill({color:c.text_back}), +padding:[2,4,2,4],overflow:!0}))):b instanceof ol.geom.LineString&&(this.mode===netgis.Modes.MEASURE_LINE||this.mode===netgis.Modes.VIEW)&&(b=b.getLength(),d.setText(new ol.style.Text({text:[netgis.util.formatDistance(b),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:c.text_color}),backgroundFill:new ol.style.Fill({color:c.text_back}),padding:[2,4,2,4],overflow:!0})));return c.point_radius&&0=e)return c;!0===b.viewport_labels&&(b=this.view.calculateExtent(this.map.getSize()),f=ol.geom.Polygon.fromExtent(b),b=new jsts.io.OL3Parser,d=b.read(d),f=b.read(f),d=d.intersection(f),d=b.write(d),c.setGeometry(d));e=netgis.util.formatArea(e,!0);(a=a.getProperties().title)&&(e=a+"\n"+e);c.setText(new ol.style.Text({text:e, +font:"4mm Arial, sans-serif",fill:new ol.style.Fill({color:g}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]}))}return c}; +netgis.Map.prototype.styleNonEdit=function(a){var b,c;this.config&&this.config.styles&&(this.config.styles.non_edit&&(b=this.config.styles.non_edit),this.config.styles.select&&(c=this.config.styles.select));b||(b=netgis.Map.Styles.non_edit);c||(c=netgis.Map.Styles.select);var d=a.getGeometry(),e=this.hoverFeature===a;-1=e)return c;!0===b.viewport_labels&&(b=this.map.getView().calculateExtent(this.map.getSize()),f=ol.geom.Polygon.fromExtent(b),b=new jsts.io.OL3Parser,d=b.read(d),f=b.read(f),d=d.intersection(f),d=b.write(d),c.setGeometry(d));e=netgis.util.formatArea(e,!0);(a=a.getProperties().title)&&(e=a+"\n"+e);c.setText(new ol.style.Text({text:e,font:"4mm Arial, sans-serif", +fill:new ol.style.Fill({color:g}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]}))}return c}; +netgis.Map.prototype.styleSketch=function(a){var b,c;this.config&&this.config.styles&&(this.config.styles.sketch&&(b=this.config.styles.sketch),this.config.styles.error&&(c=this.config.styles.error));b||(b=netgis.Map.Styles.sketch);c||(c=netgis.Map.Styles.error);this.drawError&&c&&(b=c);var d=a.getGeometry();c=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.fill})}),fill:new ol.style.Fill({color:b.fill}),stroke:new ol.style.Stroke({color:b.stroke,width:b.width})}); +d instanceof ol.geom.Polygon&&(d=d.getArea(),c.setText(new ol.style.Text({text:[netgis.util.formatArea(d,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:b.stroke}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]})));a=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),geometry:this.getGeometryPoints(a)});return[c,a]}; +netgis.Map.prototype.styleModify=function(a){var b;this.config&&this.config.styles&&this.config.styles.modify&&(b=this.config.styles.modify);b||(b=netgis.Map.Styles.modify);var c=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),fill:new ol.style.Fill({color:b.fill}),stroke:new ol.style.Stroke({color:b.stroke,width:b.width})}),d=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),geometry:this.getGeometryPoints(a)}); +a=a.getGeometry();a instanceof ol.geom.Polygon&&(a=a.getArea(),c.setText(new ol.style.Text({text:[netgis.util.formatArea(a,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:b.stroke}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]})));return[c,d]}; +netgis.Map.prototype.styleHover=function(a){var b;this.config&&this.config.styles&&this.config.styles.select&&(b=this.config.styles.select);b||(b=netgis.Map.Styles.select);return new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),fill:new ol.style.Fill({color:b.fill}),stroke:new ol.style.Stroke({color:b.stroke,width:b.width}),zIndex:1})}; netgis.Map.prototype.getGeometryPoints=function(a){var b=a.getGeometry();if(b instanceof ol.geom.LineString)return new ol.geom.MultiPoint(b.getCoordinates());if(b instanceof ol.geom.Polygon){a=[];b=b.getCoordinates();for(var c=0;cNetGIS Client",items:[],compact:!0}; netgis.Menu.prototype.initElements=function(){this.container=document.createElement("nav");this.container.className="netgis-menu netgis-noselect netgis-color-a netgis-gradient-a netgis-shadow-large";this.toggle=document.createElement("button");this.toggle.setAttribute("type","button");this.toggle.addEventListener("click",this.onToggleClick.bind(this));this.toggle.className="netgis-menu-toggle netgis-hover-c";this.toggle.innerHTML="";this.container.appendChild(this.toggle)}; -netgis.Menu.prototype.initConfig=function(a){var b=a.menu;if(b&&(b.header&&this.addHeader(b.header),!0===b.compact&&this.container.classList.add("netgis-compact"),b.items)){b=b.items;for(var c=0;c - Default IDs for Built-in Commands + Default IDs for Built-in Commands (can be used as upper or lowercase strings) @@ -1594,7 +1594,7 @@ Parameters:
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/index.html b/docs/index.html index 94039d7..fd1c08a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -56,7 +56,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Attribution.html b/docs/netgis.Attribution.html index e36549e..352db34 100644 --- a/docs/netgis.Attribution.html +++ b/docs/netgis.Attribution.html @@ -319,7 +319,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Client.html b/docs/netgis.Client.html index 59a2f5a..76d06ed 100644 --- a/docs/netgis.Client.html +++ b/docs/netgis.Client.html @@ -327,7 +327,7 @@
- Config Section "output" + Config Section "output" (will be deprecated, use [ "tools" ][ "output_id" ] instead)
@@ -452,7 +452,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Controls.html b/docs/netgis.Controls.html index 6bee9ea..eea891c 100644 --- a/docs/netgis.Controls.html +++ b/docs/netgis.Controls.html @@ -322,7 +322,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Export.html b/docs/netgis.Export.html index 7689b42..791b4b7 100644 --- a/docs/netgis.Export.html +++ b/docs/netgis.Export.html @@ -411,7 +411,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Geolocation.html b/docs/netgis.Geolocation.html index 3c74555..c83ddc4 100644 --- a/docs/netgis.Geolocation.html +++ b/docs/netgis.Geolocation.html @@ -272,6 +272,24 @@ + + + + timeout + + + + + + + + + + + + + + @@ -342,7 +360,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Import.html b/docs/netgis.Import.html index 7c54164..f018234 100644 --- a/docs/netgis.Import.html +++ b/docs/netgis.Import.html @@ -503,7 +503,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Info.html b/docs/netgis.Info.html index 6f9cdfb..f9c7255 100644 --- a/docs/netgis.Info.html +++ b/docs/netgis.Info.html @@ -319,7 +319,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.LayerTree.html b/docs/netgis.LayerTree.html index a666a62..6a0f14a 100644 --- a/docs/netgis.LayerTree.html +++ b/docs/netgis.LayerTree.html @@ -440,7 +440,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Legend.html b/docs/netgis.Legend.html index 99d41c1..6d19ad1 100644 --- a/docs/netgis.Legend.html +++ b/docs/netgis.Legend.html @@ -319,7 +319,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Map.html b/docs/netgis.Map.html index 8bafcbb..2849c7b 100644 --- a/docs/netgis.Map.html +++ b/docs/netgis.Map.html @@ -438,6 +438,29 @@ + + + + default_scale + + + + + +Number + + + + + + + + + + Default scale denominator to zoom at startup + + + @@ -1310,6 +1333,29 @@ Common Parameters: + + + output_id + + + + + +String + + + + + + + + + + Element ID for edit outputs (hidden storage input) + + + + interactive_render @@ -1549,7 +1595,7 @@ Common Parameters:
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Menu.html b/docs/netgis.Menu.html index c0cf9bc..84f3ece 100644 --- a/docs/netgis.Menu.html +++ b/docs/netgis.Menu.html @@ -369,7 +369,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.OWS.html b/docs/netgis.OWS.html index e17e572..2a0b91d 100644 --- a/docs/netgis.OWS.html +++ b/docs/netgis.OWS.html @@ -319,7 +319,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.SearchParcel.html b/docs/netgis.SearchParcel.html index 3694708..db74fcf 100644 --- a/docs/netgis.SearchParcel.html +++ b/docs/netgis.SearchParcel.html @@ -411,7 +411,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.SearchPlace.html b/docs/netgis.SearchPlace.html index 82dea4e..dbfc428 100644 --- a/docs/netgis.SearchPlace.html +++ b/docs/netgis.SearchPlace.html @@ -411,7 +411,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.TimeSlider.html b/docs/netgis.TimeSlider.html index dba93a9..426dd88 100644 --- a/docs/netgis.TimeSlider.html +++ b/docs/netgis.TimeSlider.html @@ -267,7 +267,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.Toolbox.html b/docs/netgis.Toolbox.html index 964ea5d..ed7f873 100644 --- a/docs/netgis.Toolbox.html +++ b/docs/netgis.Toolbox.html @@ -374,7 +374,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.WMC.html b/docs/netgis.WMC.html index cea883a..3dcee85 100644 --- a/docs/netgis.WMC.html +++ b/docs/netgis.WMC.html @@ -319,7 +319,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)
diff --git a/docs/netgis.html b/docs/netgis.html index 37b9cef..15b187d 100644 --- a/docs/netgis.html +++ b/docs/netgis.html @@ -173,7 +173,7 @@
- Documentation generated by JSDoc 4.0.4 on Tue Apr 29 2025 13:39:56 GMT+0200 (Mitteleuropäische Sommerzeit) + Documentation generated by JSDoc 4.0.4 on Thu May 08 2025 20:43:23 GMT+0200 (Mitteleuropäische Sommerzeit)