Utilisation du WFS comme source de données avec un header contenant basic auth

Retour

Cette section à pour but de montrer l'utilisation d'un datalayer avec un WFS comme source

  • utilise une basic auth pour se connecter
  • Exemple avec serveur Rennes via proxy devtools
  • mot de passe a voir sur GSEU-3250
Calque data avec source WFS
{
  "jsLib": [
    "https://karteis.sct.saas-gfi.eu/dist/mapviewer/latest/karteis-mapviewer-var.js"
  ]
}
<!-- Ne pas utiliser dans votre code -->
<!-- La déclaration du css n'est utile que pour l'affichage sur le site d'exemples -->
<link rel="stylesheet" href="/mapviewer/mapviewer.css">
<!-- Ne pas utiliser dans votre code -->

<!-- Dans nos exemple on utilise font-awesome pour afficher les icones de boutons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<form id="formbackground" >
  <input name="username" placeholder="username" autocomplete="current-username"/>
  <input name="password" placeholder="password" type="password" autocomplete="current-password"/>
  <button>+ DataLayer WFS protégé</button>
</form>
<!-- Le div qui sera utilisé pour injecter la carte -->
<div id="kmap" style="height:375px;" />

const form = document.getElementById("formbackground");
form.addEventListener("submit", addProtected);

// commence par injecter les systèmes de projections utile:
kmapv.Services.loadProjections([{
    name:'EPSG:3946',
    projection:'+proj=lcc +lat_0=46 +lon_0=3 +lat_1=45.25 +lat_2=46.75 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs'
}])
// Initialisation de la carte avec ses plugins
const kmapvInstance = (new kmapv.Mapviewer({
    mapdiv: document.getElementById('kmap'), // Il est aussi possible d'utiliser directement l'id du div contenant la carte
    projection: 'EPSG:3857',
    defaultCenter: [490163.78728279925,5695613.112654544],
    defaultZoom: 16,
    minZoom: 5,
    maxZoom: 22,
    interactions: {
        hover: {}
    }
}))
 .use(kmapv.CommonLayer({})) // charge le plugin générique des calques
 .use(kmapv.BackgroundLayer({})) // charge le plugin de prise en charge des fond de plans
 .use(kmapv.DataLayer({})) // chage le plugin de prise en charge des couche de données
 .use(kmapv.Tooltips({stopEvent:false})) // charge le plugin de gestion des tooltips, stopEvents: false le tooltip n'intercepte pas les events souris/tap

// Ajout du fond de plan OSM
kmapvInstance.backgroundLayer.addOSM('background', { title: 'open street map', zIndex: 0 })

function addProtected(e) {

  // empêche de recharger
  e.stopPropagation();
  e.preventDefault();

  const formData = new FormData(e.target);
  const { username, password } = Object.fromEntries([...formData.entries()])

  // styles des données
  const styles = kmapv.Services.createStyle(
  {
      // remplissage des polygones
      fill: {
          color: 'rgba(200,200,100,0.5)',
      },
      // style les lignes
      stroke: {
          color: '#d63f19ff',
          width: 2,
      },
      // style des points
      circle: {
          radius: 10,
          fill: {
              color: 'rgba(200,200,100,0.5)',
          },
          stroke: {
              color: '#333',
              width: 2,
          }
      }
  })
  // Ajout d'un calque de données
  kmapvInstance.dataLayer.addDataLayer({
      title: "Calque de donnée",
      idGroup: 'data',
      zIndex: 1,
      layerId: 'identifiant-du-calque',
      selectable: false,
      minZoom: 15.99,
      style: styles,
      wfs: {
          headers:{
            'Authorization': `Basic ${btoa(username + ':' + password)}`
          },
          projection:'EPSG:3946',
          geometryName:'geometry',
          url:'http://localhost:3042/karteis-tests/dev/sem/wfs',

          params: {
              // voir les specs du WFS
              //version: '2.0.0', // 1.1.0 si rien n'est demandé
              //request: 'GetFeature', // GetFeature si rien n'est demandé
              //srsname: 'EPSG:3946',
              typename:'vse:RESAEPCAN' // obligatoire
          }
      }
  })
}



.tooltip {
  display:flex;
  flex-direction:column;
  align-items: center;
}

.tooltip label {
    font-weight: bold;
    display:inline-block;
}

/** on rend les tooltips transparents **/
#MapViewerTooltip {
    background-color:rgba(255,255,255,0.5);
}
#MapViewerTooltip:after {
    border-top-color:rgba(255,255,255,0.5);
}

Dernière mise à jour:
Contributors: David Hequet