Plandata i Septima Widget

Mange bruger data fra plandata.dk i forbindelse med deres kommuneplan. Se nogle af de mange måder det kan gøres på her.

Af: Karsten Pihl - 3. september 2018

Jeg har været med til at udvikle Septima Widget siden 2013, hvor Sorø Kommune var den første kunde. Siden er der kommet mange brugere, der anvender Septima Widget til alt lige fra små hurtige kort, til store fuldskærmsløsninger, med meget funktionalitet.

Mange kommuner bruger Septima Widget i forbindelse med deres kommuneplan. Det gøres på mange forskellige måder, og det er jeg glad for at se, da det viser hvor fleksibel Septima Widget er blevet.

I denne blog vil jeg vise nogle af de metoder som bliver anvendt i Septima Widget, for at vise data hentet direkte fra plandata.dk. Metoderne er generelle og kunne lige så godt anvendes til at hente plandata fra en lokal service eller vise helt andre data.

“namedlayers”

I Septima Widget har vi en række foruddefinerede lag, også kaldet “namedlayers”. Det bruger vi bl.a. til at vise baggrundskort med, uden at skulle skrive alle oplysninger om hvordan laget skal hentes fra en service. En anden fordel ved “namedlayers” er, at Septima Widget automatisk sørger for at opdatere relevante parametre til en service, hvis servicen kræver det.

Ud over en række baggrundskort indeholder Septima Widget bl.a. også to “namedlayers”, der viser data fra plandata.dk.

  "namedlayer": "#plandata_wmts"

og

  "namedlayer": "#plandata"

Det ene henter data som WMTS mens det andet lag henter fra WMS. WMTS’en bruges, når man vil vise de foruddefinerede lag fra plandata.dk, mens WMS’en bruges hvis man vil vise filtrerede data fra plandata.dk. Ved “namedlayer” fra plandata.dk kræver det dog at man angiver lagnavnet som en del af konfigurationen:

{
  "namedlayer": "#plandata_wmts",
  "layer_name": "theme_pdk_lokalplan_vedtaget_v"
}

Dette eksempel viser både et baggrundskort fra Kortforsyningen samt et WMTS lag fra plandata.dk:

Se konfigurationen til eksemplet her

Signaturforklaring

Fleksibiliteten kommer også til udtryk i de måder en signaturforklaring kan vises i Septima Widget. Den mest normale er at benytte lagvælgeren. Den kan i øvrigt konfigureres til kun at være signaturforklaring, men uden mulighed for at tænde og slukke for lag, hvis der er brug for det. Hvis man ønsker at vise signaturen i lagvælgeren, sker dette automatisk hvis laget indeholder vektordata. Hvis man derimod henter laget som WMS/WMTS (eller lignende), så er det stadig muligt. Det kan f.eks. sættes ind som et billede, der hentes direkte fra plandata.dk via GetLegendGraphic:

"legendConfig": {
  "img": "https://geoserver.plandata.dk/geoserver/ows?service=WMS&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=theme_pdk_lokalplan_vedtaget_v&LEGEND_OPTIONS=fontName:Ariel"
}

som i dette eksempel:

Se konfigurationen til eksemplet her

Hvis man kun har ét ikon, og ikke en liste som i ovenstående eksempel, så kan dette også gøres via GetLegendGraphic eller blot ved at indsætte et billede. Se eksempel på signaturforklaringer her.

Mange data

Når man viser data på et kort, er det ofte naturligt, at man vil klikke i kortet for at få information om det, man klikker på. I Septima Widget gøres dette typisk ved at hente vektordata ud i browseren og derved give mulighed for at interagere med data. Fordelen ved at gøre det på denne måde er bl.a., at brugeren kan se at musemarkøren skifter med det samme. Herved ved brugeren at man kan klikke her. Dette er også muligt med data fra plandata.dk som det er gjort i dette eksempel:

Se konfigurationen til eksemplet her

En af de store problemer med data fra f.eks. plandata.dk er, at der ofte er mange data i hvert objekt. Dette betyder at der kan gå lidt tid før data vises i kortet. Dette kan man omgå ved at lave en kombination med WMS og vektordata som i dette eksempel:

Se konfigurationen til eksemplet her

Nu vises data hurtigt men de data som brugeren klikker på, kommer først lidt senere. Da brugeren er lidt tid om at flytte musen, opdager hun aldrig, at der er gået lidt tid før vektordata faktisk er kommet. Denne metode kan også bruges til at få den samme kartografi, som man har sat op i sit GIS.

Ovenstående eksempler lider af udfordringen med antallet af objekter i kortet. Hvor mange vektordata, der kan vises i kortet, er afhængig af flere elementer, såsom geometriernes kompleksitet og størrelse, browseren og netforbindelse. Typisk siger vi, at over 3000 punkter ikke er hensigtsmæssigt at vise i browseren, men det kan variere. Dog giver det sjældent mening at vise flere og samtidig interagere med data. Problemet kan også blot skyldes en langsom service. En alternativ løsning er først at hente data, når brugeren klikker i kortet. Herved mister man det, at musemarkøren skifter, men til gengæld går det hurtigt. Til dette bruges “features_infohost” med f.eks.:

"features_infohost": {
  "dataType": "json",
  "host": "https://geoserver.plandata.dk/geoserver/wfs?service=WFS&typeName=pdk:theme_pdk_kommuneplanramme_alle_vedtaget_v&request=GetFeature&version=1.0.0&maxfeatures=1&outputFormat=json&CQL_FILTER=DWITHIN(geometri,POINT( ),,meters)"
}

Det giver et resultat som dette:

Se konfigurationen til eksemplet her

Konfliktsøgning

Konfliktsøgning og info via “features_infohost” fungerer på helt samme måde. Ved info klikker brugeren i kortet. Konfliktsøgningen kan ligeledes aktiveres, når brugeren klikker i kortet, men der er også en lang række andre muligheder. Det er f.eks. muligt at udføre en konfliktsøgning på baggrund af et tegnet areal eller en tegnet linje i kortet. Det er også muligt at anvende brugerens aktuelle position (GPS) til at finde ud af, hvad der gælder lige her, hvor brugeren er. Det mest oplagte er nok at bruge søgefeltet. Her kan brugeren f.eks. indtaste en adresse og finde ud af, hvilke lokalplaner mv. der gælder for den pågældende adresse.

Klik i kortet eller søg efter en adresse

Se konfigurationen til eksemplet her

En anden fordel ved konfliktsøgningen er, at det faktisk slet ikke er nødvendigt med et kort. Det kunne blot være et søgefelt som i dette eksempel (prøv at søge efter “klostergade 1”):

Se konfigurationen til eksemplet her

Specifik plan

I alle ovenstående eksempler snakker vi om en slags oversigtskort, som brugeren kan navigere og finde nogle oplysninger i. Men Septima Widget kan også bruges til at vise et kort, der fra start er zoomet ind til et bestemt objekt. På den måde bruges kortet til at vise de geografiske oplysninger om ét specifikt objekt.

Dette kan selvfølgelig gøres ved på forhånd at definere, det sted og udsnit som kortet skal starte med at vise. Men med “locate” funktionen i Septima Widget er det muligt at lade data styre kortudsnittet og hvad der er vist i kortet. Det kan f.eks. bruges til at vise en specifik lokalplan, børnehave eller parkeringsplads:

Se konfigurationen til eksemplet her

Denne funktionalitet anvendes bl.a., når en facilitet vises på udinaturen.dk og til at vise et vejprojekt på Vejdirektoratets hjemmeside.

Hvis vi vender tilbage til plandata er det helt specifikt muligt at vise både tekster og kort for en given plan. Dette gøres vha. kommuneplanfunktionen i Septima Widget som i dette eksempel:

Se konfigurationen til eksemplet her

Fælles for både “locate” og “kommuneplan” funktionerne er, at den samme Widget kan bruges til at vise forskellige objekter. Man angiver blot et ID direkte på det DIV-element, som man indsætter:

<div data-widget-url="https://septima.dk/widget/config/kommuneplan4.json" data-widget-key="3673514"></div>

Perspektiver

Som sagt, så kan de metoder jeg her har gennemgået, bruges sammen med mange andre data, så plandata er her blot et eksempel. Hvis du har nogle gode use-cases for anvendelsen af Septima Widget, må du meget gerne kontakte mig på karsten@septima.dk. Det samme gælder, hvis du har en god idé til en ny funktion, som du synes mangler i Septima Widget.