# Ukeoppgave: Oppsett og bruk av WMTS-tjenester på Mapserver --- ## Forutsetninger - bakgrunnskunnskaper - Mapserver er installert (se ukeoppgave om dette) - Mapserver NTNU-oppsett er installert - Lærestoffet fra [WMS-forelesning](wms.html) er kjent - Lærestoffet fra [WMTS-forelesning](wmts.html) er kjent - Se også linker om WMS, WMTS og Geonorge-stoff under Oppsett og drift av WMS- og WMTS-tjenester ## Oppgave Ukeoppgaven består i å sette seg inn i hvordan WMTS-tjenester settes opp med Mapserver og Mapcache. Denne ukeoppgaven viser i detalj hvordan undertegnede har satt opp en WMTS-tjeneste. Din oppgave blir å gjenta dette på egen PC, og gjøre nødvendige endringer basert på forskjeller i datagrunnlag, filnavn, brukernavn, mappenavn, etc. Hvis alt går bra skal du få vist din WMTS-tjeneste på et Open Layers webkart. Oppgaven bygger i stor grad på forrige ukeoppgave. ## CORS-oppsett for Apache CORS (Cross-Origin Resource Sharing) er en mekanisme som tillater en nettleser å hente inn ressurser fra flere kilder, til scriptene som kjøres på en nettside. I vår sammenheng er dette aktuelt hvis html-fila ligger i en mappe og hentes inn enten via direkte klikk i en mappe eller startes via en annen webserver enn der WMS/WMTS-tjenesten ligger. Scriptene, f.eks. Open Layers web-kart-script, vil da bli hentet fra der vi har html- og javascript-kodefilene. Når vi deretter kontakter WMS- eller WMTS-tjenestene som ligger under Apache web-serveren, vil vår nettleser merke at scriptene våre vil kontakte et annet nettsted enn der kodefilene ligger. Dette er i utgangspunktet ikke tillatt - av sikkerhets-hensyn. Løsningen på dette er å få Apache til å legge inn en melding i sine HTTP Headers, som forteller vår nettleser at det er trygt å hente ressurser derfra likevel. Legg inn denne linjen i _C:\ms4w\Apache\conf\httpd.conf_, gjerne til slutt i fila. ```ini Header set Access-Control-Allow-Origin "*" ``` Ta deretter en omstart av Apache. Hvis du vil vite mer kan du lese om CORS her: [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) ## Omstart av Apache Apache kan startes på nytt ved hjelp av _MS4W-Apache-Monitor_ (Windows startmeny, under MS4W). Programmet legger seg på oppgavelinjen i Windows ved oppstart. ![Apache Monitor](img/apache-monitor.png) ## Video-gjennomgang av oppsettet ## Eksempel på Mapserver-oppsett (mapfile) innlandet.map: ```js /* Description: Simple WMS service to display on MS4W localhost ( http://127.0.0.1 ) Data source: Innlandet fylke, in FGDB format. Author: sverre.stikbakke@ntnu.no Last updated: 2021-02-13 */ MAP EXTENT 413293 6637090 706922 6953227 WEB METADATA "wms_title" "NTNU Demo WMS Server" "wms_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=/ntnugeo/apps/sverrsti/innlandet/map/innlandet.map" "wms_srs" "EPSG:4326 EPSG:4269 EPSG:3857 EPSG:25832" "wms_feature_info_mime_type" "text/plain" "wms_abstract" "Demo-WMS for NTNU, GEO3141 og GEOM2240" "ows_enable_request" "*" END END PROJECTION "init=epsg:25832" END LAYER NAME "kommune" METADATA "wms_title" "Innlandet" "wms_include_items" "all" END TYPE POLYGON STATUS ON CONNECTIONTYPE OGR CONNECTION "C:/ntnugeo/apps/sverrsti/innlandet/data/filegdb/Basisdata_34_Innlandet_25832_Kommuner_FGDB.gdb" DATA "kommune" PROJECTION "init=epsg:25832" END CLASSITEM "kommunenummer" CLASS NAME "Østre Toten" EXPRESSION "3442" COLOR 150 107 157 OUTLINECOLOR 231 207 188 END CLASS NAME "Hedmark" EXPRESSION ( ( '[kommunenummer]' LT "3431" ) AND NOT ( '[kommunenummer]' IN "3407,3405" ) ) COLOR 201 134 134 OUTLINECOLOR 231 207 188 END CLASS NAME "Resten - dvs. Oppland unntatt Østre Toten" COLOR 242 184 128 OUTLINECOLOR 231 207 188 END END END ``` GetCapabilities-kall mot denne tjenesten: ```ini http://127.0.0.1/cgi-bin/mapserv.exe ?MAP=/ntnugeo/apps/sverrsti/innlandet/map/innlandet.map &SERVICE=WMS &VERSION=1.3.0 &REQUEST=GetCapabilities ``` GetMap-kall mot denne tjenesten: ```ini http://127.0.0.1/cgi-bin/mapserv.exe ?MAP=/ntnugeo/apps/sverrsti/innlandet/map/innlandet.map &VERSION=1.3.0 &REQUEST=GetMap &CRS=EPSG:25832 &BBOX=592000,6741000,652000,6801000 &WIDTH=600 &HEIGHT=600 &LAYERS=kommune &FORMAT=image/png &STYLES=default ``` Kallet ovenfor gir dette bildet: ![innlandet.png](img/innlandet.png) ## Open Layers-fil for WMS-tjeneste - UTM-projeksjon ```ini ``` ## Mapbox-fil for WMS-tjeneste - Web Mercator ```ini ``` ## WMTS-tjenester med Mapcache (maxcache.xml) Oppsettet for cache-tjenesten ligger i fila _C:\ntnugeo\apps\sverrsti\mapcache\mapcache.xml_. Se forklaringer til oppsettet i [Mapcache-dokumentasjonen](https://mapserver.org/mapcache/config.html). I oppsettet her kan man merke seg følgende: - det er bare én cache-type: _disk_ - kilden (_source_ ) for kartflisene er WMS-tjenesten som er definert ovenfor. - det er definert et kartflis-skjema (_grid_ ): _UTM32EUREF89_ - resolutions-verdiene for dette skjemaet er hentet fra Geonorge.no, se linken [eksakte "resolutions"](http://wms.geonorge.no/kr/koordsys_res.txt) under Zoom-nivå på denne siden: [Cache-tjenester (WMTS)](https://www.geonorge.no/aktuelt/om-geonorge/brukerveiledning/#!#cache_tjenester) - det er definert en utstrekning for dette skjemaet (_extent_ ) som dekker Innlandet fylke - det er brukt _origin: top-left_ som utgangspunkt for kartkoordinatene - det er definert ett _tileset_, 'innlandet', som bruker kartflis-skjemaet _UTM32EUREF89_. - levetiden for kartflisene er satt til 600 sekunder. ```js ``` ## Aktivering av WMS- og WMTS-tjenester Både WMS- og WMTS-tjenester er avhengige av Apache web-server for å kjøre. - endringer i WMS-tjenester basert på endringer i mapfile-oppsettet er umiddelbart tilgjengelige - endringer i WMTS-tjenester basert på endinger i mapcache.xml-fila krever omstart av Apache for å aktiveres Etter omstart av Apache kan WMTS-tjenestene testes med GetCapabilities- og GetTile-kall: ```ini http://localhost/sverrsti/wmts ?SERVICE=WMTS &VERSION=1.0.0 &REQUEST=GetCapabilities ``` ```ini http://localhost/sverrsti/wmts ?SERVICE=WMTS &VERSION=1.0.0 &REQUEST=GetTile &LAYER=innlandet &TILEMATRIXSET=UTM32EUREF89 &TILEMATRIX=5 &TILEROW=1 &TILECOL=1 ``` GetTile-kallet ovenfor gir dette bildet: ![innlandet-matrix-5.png](img/innlandet-matrix-5.png) ## Open Layers-fil for WMTS-tjeneste innlandet_WMTHS.html: ```ini ``` innlandet.js: ```js var url = 'http://localhost/sverrsti/wmts/?'; var layer = 'innlandet'; var extentKartverket = [-2000000, 3500000, 3545984, 9045984]; var extentInnlandet = [413293, 6637090, 706922, 6953227]; // Datum og projeksjon: EUREF89, UTM zone 32 var projection = new ol.proj.Projection({ code: 'EPSG:25832', extent: extentKartverket }); var resolutionsKartverket = [ 21664, 10832, 5416, 2708, 1354, 677, 338.5, 169.25, 84.625, 42.3125, 21.15625, 10.578125, 5.2890625, 2.64453125, 1.322265625, 0.6611328125, 0.33056640625, 0.165283203125, 0.0826416015625 ]; var matrixSet = 'UTM32EUREF89'; var matrixIds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]; var center = [500000, 6777400]; // Easting, Northing var zoom = 5; var kommuner = new ol.layer.Tile({ opacity: 0.7, source: new ol.source.WMTS({ url: url, layer: layer, matrixSet: matrixSet, format: 'image/png', tileGrid: new ol.tilegrid.WMTS({ extent: extentInnlandet, resolutions: resolutionsKartverket, matrixIds: matrixIds }), style: 'default', }) }); var topo4 = new ol.layer.Tile({ extent: extentInnlandet, source: new ol.source.TileWMS({ url: 'https://openwms.statkart.no/skwms1/wms.topo4.graatone', params: { 'LAYERS': 'topo4graatone_WMS', 'STYLES': 'default' }, }) }); var map = new ol.Map({ layers: [topo4, kommuner], target: 'map', view: new ol.View({ extent: extentKartverket, projection: projection, center: center, resolutions: resolutionsKartverket, zoom: zoom }) }); ``` ## *NTNU 16.02.2021 Sverre Stikbakke*
*NTNU 18.02.2021 Endret versjonsnr. på Open Layers eksempler. V. 6.5.0 skapte problemer.*

¯\_(ツ)_/¯