# 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.

## 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:

## 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:

## 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.*
¯\_(ツ)_/¯