<!doctype html><html lang="{{mainCtrl.lang}}" ng-controller="DesktopController as mainCtrl" ng-strict-di><head><title ng-bind-template="{{'Desktop Application'|translate}}">GeoMapFish</title><meta charset="utf-8"><meta name="viewport" content="initial-scale=1,user-scalable=no,width=device-width"><meta name="dynamicUrl" content="https://geomapfish-demo-2-9.camptocamp.com/dynamic.json"><meta name="interface" content="desktop"><link rel="shortcut icon" href="favicon-112990.ico" crossorigin="anonymous"/><link href="desktop-9d41c3.css" rel="stylesheet" crossorigin="anonymous"></head><body ng-class="{'gmf-profile-chart-active': !!profileChartActive, 'gmf-query-grid-active': !!mainCtrl.queryGridActive}" ng-keydown="mainCtrl.onKeydown($event)" tabindex="0"><div ng-show="mainCtrl.loading" class="loading-mask"><i class="fa-solid custom-spinner-loading fa-spin spinner-loading-mask"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="1em" height="1em"><circle cx="256" cy="48" r="48" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><circle cx="109.17" cy="108.313" r="43" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><circle cx="46.537" cy="257.328" r="38" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><circle cx="108.028" cy="403.972" r="33" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><circle cx="255.794" cy="463.935" r="28" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><circle cx="402.894" cy="402.936" r="23" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><circle cx="463.623" cy="256.106" r="18" style="opacity:1;fill-opacity:1;stroke:#000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/></svg></i></div><gmf-header gmf-header-template-url="desktop/header.html"></gmf-header><main><div class="gmf-app-data-panel" ngeo-resizemap="mainCtrl.map" ngeo-resizemap-state="mainCtrl.dataPanelActive" ng-class="{'gmf-app-inactive': !mainCtrl.dataPanelActive}"><div class="gmf-app-header"><div class="dropdown"><a href class="btn btn-block prime dropdown-toggle" data-toggle="dropdown"><span ng-if="mainCtrl.gmfThemeManager.modeFlush"><span translate>Theme:</span> <b ng-if="mainCtrl.gmfThemeManager.isLoading()" translate>Loading...</b> <b ng-if="!mainCtrl.gmfThemeManager.isLoading()">{{mainCtrl.gmfThemeManager.getThemeName()|translate}}</b> </span><span ng-if="!mainCtrl.gmfThemeManager.modeFlush"><b ng-if="!mainCtrl.gmfThemeManager.themeName" translate>Themes</b></span></a><gmf-themeselector class="dropdown-menu" gmf-themeselector-currenttheme="mainCtrl.theme" gmf-themeselector-filter="::mainCtrl.filter"></gmf-themeselector></div></div><div class="gmf-app-content"><gmf-layertree gmf-layertree-dimensions="mainCtrl.dimensions" gmf-layertree-map="::mainCtrl.map"></gmf-layertree></div></div><div class="gmf-app-tools" ngeo-resizemap="mainCtrl.map" ngeo-resizemap-state="mainCtrl.toolsActive" ng-class="{'gmf-app-inactive' : !mainCtrl.toolsActive}"><div class="gmf-app-bar"><div ngeo-btn-group class="btn-group-vertical" ngeo-btn-group-active="mainCtrl.toolsActive"><button ngeo-btn class="btn btn-default" ng-model="mainCtrl.loginActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Login'|translate}}"><span class="fa-solid fa-user" ng-class="mainCtrl.gmfUser.username ? 'fa-user-xmark' : 'fa-user'"></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.printPanelActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Print'|translate}}"><span class="fa-solid fa-print"></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.drawFeatureActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Draw and Measure'|translate}}"><span class="fa-solid fa-paintbrush"></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.filterSelectorActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Filter'|translate}}"><span class="fa" ng-class="mainCtrl.gmfDataSourceBeingFiltered.dataSource && mainCtrl.gmfDataSourceBeingFiltered.dataSource.filterRules ? 'fa-filter-circle-dollar' : 'fa-filter'"></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.editFeatureActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Editing'|translate}}" ng-show="mainCtrl.hasEditableLayers"><span class="fa-solid fa-pen-to-square"></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.drawProfilePanelActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Profile'|translate}}"><span class="fa-solid fa-chart-area"></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.queryPanelActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Selection'|translate}}"><span><i class="fa-solid fa-arrow-pointer"></i> <i class="fa-solid fa-info fa-sm offset-info-icon"></i></span></button> <button ngeo-btn class="btn btn-default" ng-model="mainCtrl.importDataSourceActive" data-toggle="tooltip" data-placement="left" data-original-title="{{'Import Layer'|translate}}"><span class="fa-solid fa-upload"></span></button></div><br/><br/><span data-toggle="tooltip" data-placement="left" data-original-title="{{'Share this map'|translate}}"><button ngeo-btn class="btn btn-default" ng-model="mainCtrl.modalShareShown"><span class="fa-solid fa-share-nodes"></span></button></span></div><div class="gmf-app-tools-content container-fluid" ng-class="{'gmf-app-active': mainCtrl.toolsActive, 'gmf-app-inactive': !mainCtrl.toolsActive }"><div class="row" ng-show="mainCtrl.loginActive"><div class="col-sm-12"><a class="btn close gmf-close" ng-click="mainCtrl.loginActive = false">&times;</a><gmf-auth-panel ng-show="mainCtrl.loginActive" ng-prop-password_validator="mainCtrl.passwordValidator"><input slot="gmf-auth-login" class="form-control" name="login" autocomplete="username" placeholder="{{'Username'|translate}}"/> <input slot="gmf-auth-password" type="password" class="form-control" name="password" autocomplete="current-password" aria-describedby="password-constraints" placeholder="{{'Password'|translate}}"/></gmf-auth-panel></div></div><div ng-show="mainCtrl.printPanelActive" class="row"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Print' | translate}} <a class="btn close" ng-click="mainCtrl.printPanelActive = false">&times;</a></div><gmf-print gmf-print-map="::mainCtrl.map" gmf-print-active="mainCtrl.printActive"></gmf-print></div></div><div ng-show="mainCtrl.drawFeatureActive" class="row"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Draw and Measure'|translate}} <a class="btn close" ng-click="mainCtrl.drawFeatureActive = false">&times;</a></div><gmf-drawfeature gmf-drawfeature-active="mainCtrl.drawFeatureActive" gmf-drawfeature-layer="::mainCtrl.drawFeatureLayer" gmf-drawfeature-map="::mainCtrl.map"></gmf-drawfeature></div></div><div ng-show="mainCtrl.filterSelectorActive" class="row"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Filter'|translate}} <a class="btn close" ng-click="mainCtrl.filterSelectorActive = false">&times;</a></div><gmf-filterselector active="mainCtrl.filterSelectorActive" map="mainCtrl.map" tool-group="::mainCtrl.mapToolsGroup" filter-is-applied="mainCtrl.filterIsApplied"></gmf-filterselector></div></div><div ng-show="mainCtrl.editFeatureActive" class="row"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Editing'|translate}} <a class="btn close" ng-click="mainCtrl.editFeatureActive = false">&times;</a></div><div ng-switch="mainCtrl.gmfUser.username"><div ng-switch-when="null">{{'In order to use the editing tool, you must log in first.' | translate}}</div><gmf-editfeatureselector ng-switch-default gmf-editfeatureselector-active="mainCtrl.editFeatureActive" gmf-editfeatureselector-map="::mainCtrl.map" gmf-editfeatureselector-vector="::mainCtrl.editFeatureVectorLayer"></gmf-editfeatureselector></div></div></div><div ng-show="mainCtrl.drawProfilePanelActive" class="row profile-panel"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Profile'|translate}} <a class="btn close" ng-click="mainCtrl.drawProfilePanelActive = false">&times;</a></div><div gmf-drawprofileline gmf-drawprofileline-active="mainCtrl.drawProfilePanelActive" gmf-drawprofileline-map="::mainCtrl.map" gmf-drawprofileline-line="mainCtrl.profileLine"><p><button class="btn prime" ngeo-btn ng-model="ctrl.interaction.active" translate>Draw profile line</button></p><p><em translate ng-if="ctrl.interaction.active" class="text-muted small">Draw a line on the map to display the corresponding elevation profile. Use double-click to finish the drawing.</em></p></div></div></div><div ng-show="mainCtrl.queryPanelActive" class="row"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Selection'|translate}} <a class="btn close" ng-click="mainCtrl.queryPanelActive = false">&times;</a></div><ngeo-query-panel></ngeo-query-panel></div></div><div ng-show="mainCtrl.importDataSourceActive" class="row"><div class="col-sm-12"><div class="gmf-app-tools-content-heading">{{'Import Layer'|translate}} <a class="btn close" ng-click="mainCtrl.importDataSourceActive = false">&times;</a></div><gmf-importdatasource map="mainCtrl.map"></gmf-importdatasource></div></div></div></div><div class="gmf-app-map-container" ng-class="{'gmf-app-infobar-active': mainCtrl.options.showInfobar}"><gmf-search gmf-search-map="::mainCtrl.map" gmf-search-listeners="::mainCtrl.searchListeners"></gmf-search><ngeo-mapswipe ng-if="mainCtrl.gmfLayerBeingSwipe.layer != null" map="::mainCtrl.map" layer="mainCtrl.gmfLayerBeingSwipe.layer" swipe-value="mainCtrl.gmfLayerBeingSwipe.swipeValue"></ngeo-mapswipe><div id="ol-zoom-control"></div><ngeo-displaywindow content="mainCtrl.displaywindowContent" desktop="true" height="mainCtrl.displaywindowHeight" open="mainCtrl.displaywindowOpen" title="mainCtrl.displaywindowTitle" url="mainCtrl.displaywindowUrl" width="mainCtrl.displaywindowWidth"></ngeo-displaywindow><button ngeo-geolocation="" ngeo-geolocation-map="::mainCtrl.map" ngeo-geolocation-loading="mainCtrl.loading" ng-if="::mainCtrl.options.geolocalisation"><span class="fa-regular fa-circle-dot"></span></button><div class="gmf-app-map-bottom-controls"><div class="gmf-backgroundlayerbutton btn-group dropup"><button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><img src="background-layer-button-a0bf1e.png" alt="" crossorigin="anonymous"/></button><gmf-backgroundlayerselector gmf-backgroundlayerselector-map="::mainCtrl.map" class="dropdown-menu"></gmf-backgroundlayerselector></div><div class="gmf-app-map-messages"><gmf-disclaimer gmf-disclaimer-map="::mainCtrl.map" gmf-disclaimer-external-msg="disclaimerMsg" gmf-disclaimer-external-visibility="disclaimerVisibility"></gmf-disclaimer></div><gmf-displayquerywindow ng-if="!mainCtrl.queryGrid" gmf-displayquerywindow-draggable-containment="::mainCtrl.displaywindowDraggableContainment" gmf-displayquerywindow-desktop="::true"></gmf-displayquerywindow></div><gmf-map class="gmf-map" gmf-map-map="mainCtrl.map" gmf-contextualdata="" gmf-contextualdata-displayed="mainCtrl.contextdataActive" gmf-contextualdata-map="::mainCtrl.map" gmf-file-drop-zone></gmf-map><ngeo-query active="mainCtrl.queryActive" autoclear="mainCtrl.queryAutoClear" map="::mainCtrl.map"></ngeo-query><div class="gmf-app-footer" ng-class="{'gmf-app-active': mainCtrl.options.showInfobar}"><button class="btn fa-solid gmf-app-map-info" ng-click="mainCtrl.options.showInfobar = !mainCtrl.options.showInfobar" ng-class="{'fa-angles-up': !mainCtrl.options.showInfobar, 'fa-angles-down': mainCtrl.options.showInfobar}"></button><div ngeo-scaleselector ngeo-scaleselector-map="mainCtrl.map"></div><div id="scaleline"></div><div class="pull-right"><gmf-elevationwidget gmf-elevationwidget-map="::mainCtrl.map" gmf-elevationwidget-active="::mainCtrl.options.showInfobar"></gmf-elevationwidget><gmf-mouseposition gmf-mouseposition-map="mainCtrl.map" class="text-center"></gmf-mouseposition></div></div></div><ngeo-modal ng-model="mainCtrl.modalShareShown"><gmf-share ng-if="mainCtrl.modalShareShown"></gmf-share></ngeo-modal><ngeo-modal ng-model="disclaimerVisibility"><div class="modal-header ui-draggable-handle"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button></div><div class="modal-body"><div ng-bind-html="disclaimerMsg"></div></div></ngeo-modal></main><footer><gmf-profile gmf-profile-active="profileChartActive" gmf-profile-line="mainCtrl.profileLine" gmf-profile-map="::mainCtrl.map" ngeo-resizemap="mainCtrl.map" ngeo-resizemap-state="profileChartActive"></gmf-profile><gmf-displayquerygrid ng-if="mainCtrl.queryGrid" gmf-displayquerygrid-active="mainCtrl.queryGridActive" gmf-displayquerygrid-map="::mainCtrl.map" ngeo-resizemap="mainCtrl.map" ngeo-resizemap-state="mainCtrl.queryGridActive"></gmf-displayquerygrid></footer><script nomodule>alert(
        'Your browser is not supported, please use a recent version of Firefox, Chrome or Edge.\n\n' +
        "Votre navigateur n'est pas supporté, veuillez utiliser une version récente de Firefox, Chrome or Edge.\n\n" +
        'Ihr Browser wird nicht unterstützt, bitte verwenden Sie eine aktuelle Version von Firefox, Chrome oder Edge.'
      );</script><script src="../../../dist/vendor.js?${htmlWebpackPlugin.options.vars.version}" crossorigin="anonymous"></script><script src="desktop-161eaa.js" crossorigin="anonymous"></script></body></html>