<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-CH">
	<id>https://giswiki.ch/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pka</id>
	<title>Geometa Lab OST - Benutzerbeiträge [de-ch]</title>
	<link rel="self" type="application/atom+xml" href="https://giswiki.ch/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pka"/>
	<link rel="alternate" type="text/html" href="https://giswiki.ch/Spezial:Beitr%C3%A4ge/Pka"/>
	<updated>2026-04-28T17:23:01Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://giswiki.ch/index.php?title=Web_Map_Tile_Service&amp;diff=67933</id>
		<title>Web Map Tile Service</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Web_Map_Tile_Service&amp;diff=67933"/>
		<updated>2020-10-14T20:31:15Z</updated>

		<summary type="html">&lt;p&gt;Pka: Standard-Pixelgrösse gemäss OGC SLD Standard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[OGC]]-Standard &#039;&#039;&#039;Web Map Tile Service (WMTS)&#039;&#039;&#039; ([http://www.opengeospatial.org/standards/wmts offizielle Website mit Versionen], [http://portal.opengeospatial.org/files/?artifact_id=35326 PDF v1.0.0]) ist eine von [[Web Map Tiling#Spezifikationen|mehreren Konventionen]] um Rasterkarten als (potenziell vor-berechnete &amp;amp; vor-gerenderte) Kachelsammlung anzubieten.&lt;br /&gt;
&lt;br /&gt;
Siehe auch &lt;br /&gt;
* [[Hintergrundkarten]] und [[Web Map Tiling]].&lt;br /&gt;
* Wikipedia ([https://en.wikipedia.org/wiki/Web_Map_Tile_Service en]|[https://de.wikipedia.org/wiki/Web_Map_Tile_Service de]).&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
&lt;br /&gt;
=== Einbinden auf SwissTopo-Webkarte ===&lt;br /&gt;
&lt;br /&gt;
# Gehe auf https://map.geo.admin.ch/&lt;br /&gt;
# Unter &amp;quot;Advanced Tools&amp;quot; (de: &amp;quot;Erweiterte Werkzeuge&amp;quot;), klicke &amp;quot;Import&amp;quot; (de: &amp;quot;Importieren&amp;quot;)&lt;br /&gt;
# Gib die URL zur &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt;-Datei an&lt;br /&gt;
# Klicke &amp;quot;Connect&amp;quot; (de: &amp;quot;Verbinden&amp;quot;)&amp;lt;br /&amp;gt;Die Liste der verfügbaren Layer des WMTS wird angezeigt. Durch Hovern über dem jeweiligen Listeneintrag wird eine Vorschau im Hintergrund geladen.&lt;br /&gt;
# Für jeden gewünschten Layer:&lt;br /&gt;
## Wähle (durch Anklicken) den gewünschten WMTS-Layer aus der angezeigten Liste&lt;br /&gt;
## Füll wahlweise das Feld &amp;quot;Description&amp;quot; (de: &amp;quot;Beschreibung&amp;quot; aus) &#039;&#039;&#039;(optional)&#039;&#039;&#039;&lt;br /&gt;
## Klicke &amp;quot;Add Layer&amp;quot; (de: &amp;quot;Layer Hinzufügen&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in QGIS ===&lt;br /&gt;
&lt;br /&gt;
Variante QGIS Builtin (XYZ/TMS Tiles Driver):&lt;br /&gt;
* Im QGIS Browser eine neue Verbindung (Connection) eines &amp;quot;XYZ Tiles&amp;quot; anlegen und dann &amp;quot;Add Layer to Project&amp;quot;.&lt;br /&gt;
* Siehe https://felix.rohrba.ch/en/2017/easily-add-tilemap-layers-qgis/ &lt;br /&gt;
&lt;br /&gt;
Variante mit GDAL Konfig.-Datei (XML)&lt;br /&gt;
* Siehe [[Hintergrundkarten]], [[Web_Map_Tiling]].&lt;br /&gt;
&lt;br /&gt;
Variante als WMTS Layer (OGC Standard, WMTSCapabilities.xml)&lt;br /&gt;
# Menü &amp;quot;Layer&amp;quot; &amp;gt; &amp;quot;Add Layer&amp;quot; &amp;gt; &amp;quot;Add WMS/WMTS Layer...&amp;quot; oder &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;-&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;-&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
# Button &amp;quot;New&amp;quot;&lt;br /&gt;
# Feld &amp;quot;Name&amp;quot; beliebig ausfüllen&lt;br /&gt;
# In Feld &amp;quot;URL&amp;quot; die URL zur &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt;-Datei angeben&lt;br /&gt;
# Button &amp;quot;OK&amp;quot;&lt;br /&gt;
# Button &amp;quot;Connect&amp;quot;&amp;lt;br /&amp;gt;Die Liste der verfügbaren Layer des WMTS wird angezeigt.&lt;br /&gt;
# Für jeden gewünschten Layer:&lt;br /&gt;
## Wähle (durch Anklicken) den gewünschten WMTS-Layer aus der angezeigten Liste&lt;br /&gt;
## Klicke Button &amp;quot;Add&amp;quot;&lt;br /&gt;
# Klicke Button &amp;quot;Close&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Begrenzungen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Position im XML-Baum (XPath)&lt;br /&gt;
! begrenzt&lt;br /&gt;
! mittels&lt;br /&gt;
! Minimalbeispiel&lt;br /&gt;
! Maximalbeispiel&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/ows:BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
das &#039;&#039;&#039;dargestellte Datenset&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
&lt;br /&gt;
(informativ;&lt;br /&gt;
Tiles können auch ausserhalb verfügbar sein, stellen dort aber keine Daten dar)&lt;br /&gt;
| Koordinaten im CRS des Layers&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:BoundingBox&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;420000 30000&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;900000 350000&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:BoundingBox crs=&amp;quot;urn:ogc:def:crs:EPSG:6.3:21781&amp;quot; dimensions=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;420000.000000 30000.000000&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;900000.000000 350000.000000&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/WGS84BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
das &#039;&#039;&#039;dargestellte Datenset&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
&lt;br /&gt;
(informativ;&lt;br /&gt;
Tiles können auch ausserhalb verfügbar sein, stellen dort aber keine Daten dar)&lt;br /&gt;
| dezimalen WGS84-Koordinaten (lon-lat: Längengrad vor Breitengrad)&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;-180 -85.05112878&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;180 85.05112878&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:WGS84BoundingBox crs=&amp;quot;urn:ogc:def:crs:OGC:2:84&amp;quot; dimensions=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;-180.0 -85.05112877980659237838&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;180.0 85.05112877980659237838&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/TileMatrixSetLink/TileMatrixSetLimits/TileMatrixLimits&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
die &#039;&#039;&#039;abrufbaren Tiles&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
für diese TileMatrix innerhalb des verlinken TileMatrixSets&lt;br /&gt;
&lt;br /&gt;
(normativ;&lt;br /&gt;
Anfrage ausserhalb sollte zu &amp;lt;code&amp;gt;TileOutOfRange&amp;lt;/code&amp;gt;-Exception bzw. HTTP-Status-Code &amp;lt;code&amp;gt;400&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Bad Request&amp;lt;/code&amp;gt; führen)&lt;br /&gt;
| Tile-Indices&lt;br /&gt;
| &amp;lt;!-- TODO: Minimalbeispiel --&amp;gt;&lt;br /&gt;
| &amp;lt;!-- TODO: Maximalbeispiel --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//TileMatrixSet/BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
den &#039;&#039;&#039;Definitionsbereich&#039;&#039;&#039; des TileMatrixSets&lt;br /&gt;
und damit&lt;br /&gt;
die &#039;&#039;&#039;potentiell abrufbaren Tiles&#039;&#039;&#039;&lt;br /&gt;
aller aktuellen &#039;&#039;und künftigen&#039;&#039; Layers,&lt;br /&gt;
die dieses Set verwenden&lt;br /&gt;
| Koordinaten im CRS des TileMatrixSets&lt;br /&gt;
| &amp;lt;!-- TODO: Minimalbeispiel --&amp;gt;&lt;br /&gt;
| &amp;lt;!-- TODO: Maximalbeispiel --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== XYZ &amp;amp;rarr; WMTS ==&lt;br /&gt;
&lt;br /&gt;
Hat man bereits einen nach XYZ-Konvention im Web verfügbaren Kachel-Satz, so lässt sich aus diesem ein (RESTful) WTMS machen, in dem man eine passende (statische) ServiceMetadata-XML-Datei &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt; serviert.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Kacheln von osm.ch als WMTS Konfig.-Datei:&lt;br /&gt;
https://gist.githubusercontent.com/das-g/882334b2844d5cdc7807eb9c12b8bccb/raw/WMTSCapabilities.xml&lt;br /&gt;
&lt;br /&gt;
=== XML-Schema-Validierung für &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch [https://stackoverflow.com/a/129401/674064 diese StackOverflow-Antwort bzgl. &amp;quot;XML Schema (XSD) validation tool&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
==== Mit &amp;lt;code&amp;gt;xmllint&amp;lt;/code&amp;gt; (libxml) ====&lt;br /&gt;
&lt;br /&gt;
(CLI-Tool, das bei libxml mitinstalliert wird, und somit auf Linux &amp;amp; Mac meist bereits vorhanden ist.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xmllint --noout --schema http://www.opengis.net/wmts/1.0 WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xmllint --noout --schema http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Falls das Schema lokal vorhanden ist, kann auch der Pfad zur Schema-Datei angegeben werden. Umgekehrt kann die XML-Datei auch als URL angegeben werden, um eine online verfügbare Version zu validieren. Allerdings scheint für Schema und XML nur HTTP, nicht aber HTTPS zu funktionieren.)&lt;br /&gt;
&lt;br /&gt;
==== Mit &amp;lt;code&amp;gt;xsd-validator&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
(Kleines Java-Programm, das den Standard-XML-Parser der JRE (normalerweise Xerces) verwendet.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/amouat/xsd-validator.git&lt;br /&gt;
wget http://www.opengis.net/wmts/1.0 --output-document=wmts.xsd&lt;br /&gt;
wget http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd&lt;br /&gt;
./xsd-validator/xsdv.sh wmts.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder einfach&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/amouat/xsd-validator.git&lt;br /&gt;
wget http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd&lt;br /&gt;
./xsd-validator/xsdv.sh wmtsGetCapabilities_response.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;xsd-validator&amp;lt;/code&amp;gt; kann nur mit lokalen Schema-Dateien umgehen, daher laden wir diese(s) hier mit &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt; selbst herunter. Auch die XML-Datei muss lokal vorliegen.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TileMatrixSet ===&lt;br /&gt;
&lt;br /&gt;
Für einen Kachel-Satz nach OSM- &amp;amp; Google Maps-Konvention kann das &amp;quot;Well-known scale set&amp;quot; &amp;quot;GoogleMapsCompatible&amp;quot; (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) aus Annex E.4 des [http://portal.opengeospatial.org/files/?artifact_id=35326 Standards] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Scale Denominator ====&lt;br /&gt;
&lt;br /&gt;
In Tabelle E.4 &amp;quot;Definition of Well-known scale set GoogleMapsCompatible&amp;quot; im Standard sind die Werte des &amp;quot;Scale Denominator&amp;quot; bereits für die Zoom-Levels 0&amp;amp;ndash;18 angegeben. Diese lassen sich aber auch wie folgt berechnen:&lt;br /&gt;
&lt;br /&gt;
===== Herleitung =====&lt;br /&gt;
&lt;br /&gt;
In Abschnitt 6.1 &amp;quot;Tile matrix set – the geometry of the tiled space&amp;quot; des Standards erhalten wir (unten auf Seite 8) u.A. folgende beiden Formeln:&lt;br /&gt;
&amp;lt;pre&amp;gt;pixelSpan = scaleDenominator × 0.28e-3 / metersPerUnit(crs)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Standard-Pixelgrösse ist gemäss OGC SLD Standard 0.28 Millimeter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tileSpanX = tileWidth × pixelSpan&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraus folgt&lt;br /&gt;
&amp;lt;pre&amp;gt;tileSpanX = tileWidth × scaleDenominator × 0.28e-3 / metersPerUnit(crs)&amp;lt;/pre&amp;gt;&lt;br /&gt;
und daraus durch auflösen nach &amp;lt;code&amp;gt;scaleDenominator&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = tileSpanX × metersPerUnit(crs) / (tileWidth × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kachel-Kantenlänge in Pixel &amp;lt;code&amp;gt;tileWidth&amp;lt;/code&amp;gt; ist bei OSM &amp;amp; Google immer &#039;&#039;&#039;256&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Das CRS WebMercator verwendet (pseudo-)Metrische Koordinaten, daher ist &amp;lt;code&amp;gt;metersPerUnit(crs)&amp;lt;/code&amp;gt; hierfür &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bei Zoomlevel &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; wird die Welt zwischen 85.06°S and 85.06°N (und von 180°W bis 180°O) auf &amp;lt;code&amp;gt;2^Z × 2^Z&amp;lt;/code&amp;gt; Kacheln abgebildet. Entlang des Äquators hat man also &amp;lt;code&amp;gt;2^Z&amp;lt;/code&amp;gt; Kachel-Kanten. Laut Annex E.4 stimmen die &amp;quot;Scale Denominator&amp;quot;-Werte nur in Äquatornähe, also können wir das verwenden. Der Äquator-Radius ([http://www.epsg-registry.org/report.htm?type=selection&amp;amp;entity=urn:ogc:def:crs:EPSG::3857&amp;amp;reportDetail=short&amp;amp;style=urn:uuid:report-style:default-with-code&amp;amp;style_name=OGP%20Default%20With%20Code&amp;amp;title=EPSG:3857 im EPSG-Eintrag] &amp;quot;Semi-Major Axis (a)&amp;quot; genannt) ist der von WGS 84 und beträgt &#039;&#039;&#039;6&#039;378&#039;137&amp;amp;nbsp;m&#039;&#039;&#039;. Mit &amp;lt;code&amp;gt;Tau&amp;lt;/code&amp;gt; (a.k.a. &amp;lt;code&amp;gt;2&amp;amp;nbsp;Pi&amp;lt;/code&amp;gt;) multipliziert ergibt dies die Äquatorlänge. Damit ist&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tileSpanX = Äquatorlänge  / (2^Z)&lt;br /&gt;
          = 6378137 × Tau / (2^Z)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ergibt sich&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = (6378137 × Tau / (2^Z)) / (256 × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder umgeformt die&lt;br /&gt;
&lt;br /&gt;
===== Berechnungsformel =====&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = 6378137 × Tau / (256 × (2^Z) × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berechnung für Zoomlevels 0&amp;amp;ndash;18 in Python 3.6:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from math import tau&lt;br /&gt;
&lt;br /&gt;
equator_length = 6378137 * tau&lt;br /&gt;
{i : equator_length / (256 * 2**i * 0.28e-3) for i in range(19)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{0: 559082264.0287178,&lt;br /&gt;
 1: 279541132.0143589,&lt;br /&gt;
 2: 139770566.00717944,&lt;br /&gt;
 3: 69885283.00358972,&lt;br /&gt;
 4: 34942641.50179486,&lt;br /&gt;
 5: 17471320.75089743,&lt;br /&gt;
 6: 8735660.375448715,&lt;br /&gt;
 7: 4367830.1877243575,&lt;br /&gt;
 8: 2183915.0938621787,&lt;br /&gt;
 9: 1091957.5469310894,&lt;br /&gt;
 10: 545978.7734655447,&lt;br /&gt;
 11: 272989.38673277234,&lt;br /&gt;
 12: 136494.69336638617,&lt;br /&gt;
 13: 68247.34668319309,&lt;br /&gt;
 14: 34123.67334159654,&lt;br /&gt;
 15: 17061.83667079827,&lt;br /&gt;
 16: 8530.918335399136,&lt;br /&gt;
 17: 4265.459167699568,&lt;br /&gt;
 18: 2132.729583849784}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pixel Size (m) ====&lt;br /&gt;
&lt;br /&gt;
Die im Annex E.4 angegebenen (obwohl im XML wohl nicht anzugebenden) Pixel-Grössen in Metern ergeben sich, wenn man aus obiger Formel den 0.28&amp;amp;nbsp;mm/px-Faktor weglässt:&lt;br /&gt;
&amp;lt;pre&amp;gt;pixelSize = 6378137 × Tau / (256 × (2^Z))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berechnung für Zoomlevels 0&amp;amp;ndash;18 in Python 3.6:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from math import tau&lt;br /&gt;
&lt;br /&gt;
equator_length = 6378137 * tau&lt;br /&gt;
{i : equator_length / (256 * 2**i) for i in range(19)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{0: 156543.03392804097,&lt;br /&gt;
 1: 78271.51696402048,&lt;br /&gt;
 2: 39135.75848201024,&lt;br /&gt;
 3: 19567.87924100512,&lt;br /&gt;
 4: 9783.93962050256,&lt;br /&gt;
 5: 4891.96981025128,&lt;br /&gt;
 6: 2445.98490512564,&lt;br /&gt;
 7: 1222.99245256282,&lt;br /&gt;
 8: 611.49622628141,&lt;br /&gt;
 9: 305.748113140705,&lt;br /&gt;
 10: 152.8740565703525,&lt;br /&gt;
 11: 76.43702828517625,&lt;br /&gt;
 12: 38.21851414258813,&lt;br /&gt;
 13: 19.109257071294063,&lt;br /&gt;
 14: 9.554628535647032,&lt;br /&gt;
 15: 4.777314267823516,&lt;br /&gt;
 16: 2.388657133911758,&lt;br /&gt;
 17: 1.194328566955879,&lt;br /&gt;
 18: 0.5971642834779395}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pka</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Web_Map_Tile_Service&amp;diff=67932</id>
		<title>Web Map Tile Service</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Web_Map_Tile_Service&amp;diff=67932"/>
		<updated>2020-10-14T20:28:54Z</updated>

		<summary type="html">&lt;p&gt;Pka: mm/px Mysterium gelöst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[OGC]]-Standard &#039;&#039;&#039;Web Map Tile Service (WMTS)&#039;&#039;&#039; ([http://www.opengeospatial.org/standards/wmts offizielle Website mit Versionen], [http://portal.opengeospatial.org/files/?artifact_id=35326 PDF v1.0.0]) ist eine von [[Web Map Tiling#Spezifikationen|mehreren Konventionen]] um Rasterkarten als (potenziell vor-berechnete &amp;amp; vor-gerenderte) Kachelsammlung anzubieten.&lt;br /&gt;
&lt;br /&gt;
Siehe auch &lt;br /&gt;
* [[Hintergrundkarten]] und [[Web Map Tiling]].&lt;br /&gt;
* Wikipedia ([https://en.wikipedia.org/wiki/Web_Map_Tile_Service en]|[https://de.wikipedia.org/wiki/Web_Map_Tile_Service de]).&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
&lt;br /&gt;
=== Einbinden auf SwissTopo-Webkarte ===&lt;br /&gt;
&lt;br /&gt;
# Gehe auf https://map.geo.admin.ch/&lt;br /&gt;
# Unter &amp;quot;Advanced Tools&amp;quot; (de: &amp;quot;Erweiterte Werkzeuge&amp;quot;), klicke &amp;quot;Import&amp;quot; (de: &amp;quot;Importieren&amp;quot;)&lt;br /&gt;
# Gib die URL zur &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt;-Datei an&lt;br /&gt;
# Klicke &amp;quot;Connect&amp;quot; (de: &amp;quot;Verbinden&amp;quot;)&amp;lt;br /&amp;gt;Die Liste der verfügbaren Layer des WMTS wird angezeigt. Durch Hovern über dem jeweiligen Listeneintrag wird eine Vorschau im Hintergrund geladen.&lt;br /&gt;
# Für jeden gewünschten Layer:&lt;br /&gt;
## Wähle (durch Anklicken) den gewünschten WMTS-Layer aus der angezeigten Liste&lt;br /&gt;
## Füll wahlweise das Feld &amp;quot;Description&amp;quot; (de: &amp;quot;Beschreibung&amp;quot; aus) &#039;&#039;&#039;(optional)&#039;&#039;&#039;&lt;br /&gt;
## Klicke &amp;quot;Add Layer&amp;quot; (de: &amp;quot;Layer Hinzufügen&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in QGIS ===&lt;br /&gt;
&lt;br /&gt;
Variante QGIS Builtin (XYZ/TMS Tiles Driver):&lt;br /&gt;
* Im QGIS Browser eine neue Verbindung (Connection) eines &amp;quot;XYZ Tiles&amp;quot; anlegen und dann &amp;quot;Add Layer to Project&amp;quot;.&lt;br /&gt;
* Siehe https://felix.rohrba.ch/en/2017/easily-add-tilemap-layers-qgis/ &lt;br /&gt;
&lt;br /&gt;
Variante mit GDAL Konfig.-Datei (XML)&lt;br /&gt;
* Siehe [[Hintergrundkarten]], [[Web_Map_Tiling]].&lt;br /&gt;
&lt;br /&gt;
Variante als WMTS Layer (OGC Standard, WMTSCapabilities.xml)&lt;br /&gt;
# Menü &amp;quot;Layer&amp;quot; &amp;gt; &amp;quot;Add Layer&amp;quot; &amp;gt; &amp;quot;Add WMS/WMTS Layer...&amp;quot; oder &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;-&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;-&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
# Button &amp;quot;New&amp;quot;&lt;br /&gt;
# Feld &amp;quot;Name&amp;quot; beliebig ausfüllen&lt;br /&gt;
# In Feld &amp;quot;URL&amp;quot; die URL zur &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt;-Datei angeben&lt;br /&gt;
# Button &amp;quot;OK&amp;quot;&lt;br /&gt;
# Button &amp;quot;Connect&amp;quot;&amp;lt;br /&amp;gt;Die Liste der verfügbaren Layer des WMTS wird angezeigt.&lt;br /&gt;
# Für jeden gewünschten Layer:&lt;br /&gt;
## Wähle (durch Anklicken) den gewünschten WMTS-Layer aus der angezeigten Liste&lt;br /&gt;
## Klicke Button &amp;quot;Add&amp;quot;&lt;br /&gt;
# Klicke Button &amp;quot;Close&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Begrenzungen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Position im XML-Baum (XPath)&lt;br /&gt;
! begrenzt&lt;br /&gt;
! mittels&lt;br /&gt;
! Minimalbeispiel&lt;br /&gt;
! Maximalbeispiel&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/ows:BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
das &#039;&#039;&#039;dargestellte Datenset&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
&lt;br /&gt;
(informativ;&lt;br /&gt;
Tiles können auch ausserhalb verfügbar sein, stellen dort aber keine Daten dar)&lt;br /&gt;
| Koordinaten im CRS des Layers&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:BoundingBox&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;420000 30000&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;900000 350000&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:BoundingBox crs=&amp;quot;urn:ogc:def:crs:EPSG:6.3:21781&amp;quot; dimensions=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;420000.000000 30000.000000&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;900000.000000 350000.000000&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/WGS84BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
das &#039;&#039;&#039;dargestellte Datenset&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
&lt;br /&gt;
(informativ;&lt;br /&gt;
Tiles können auch ausserhalb verfügbar sein, stellen dort aber keine Daten dar)&lt;br /&gt;
| dezimalen WGS84-Koordinaten (lon-lat: Längengrad vor Breitengrad)&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;-180 -85.05112878&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;180 85.05112878&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:WGS84BoundingBox crs=&amp;quot;urn:ogc:def:crs:OGC:2:84&amp;quot; dimensions=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;-180.0 -85.05112877980659237838&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;180.0 85.05112877980659237838&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/TileMatrixSetLink/TileMatrixSetLimits/TileMatrixLimits&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
die &#039;&#039;&#039;abrufbaren Tiles&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
für diese TileMatrix innerhalb des verlinken TileMatrixSets&lt;br /&gt;
&lt;br /&gt;
(normativ;&lt;br /&gt;
Anfrage ausserhalb sollte zu &amp;lt;code&amp;gt;TileOutOfRange&amp;lt;/code&amp;gt;-Exception bzw. HTTP-Status-Code &amp;lt;code&amp;gt;400&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Bad Request&amp;lt;/code&amp;gt; führen)&lt;br /&gt;
| Tile-Indices&lt;br /&gt;
| &amp;lt;!-- TODO: Minimalbeispiel --&amp;gt;&lt;br /&gt;
| &amp;lt;!-- TODO: Maximalbeispiel --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//TileMatrixSet/BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
den &#039;&#039;&#039;Definitionsbereich&#039;&#039;&#039; des TileMatrixSets&lt;br /&gt;
und damit&lt;br /&gt;
die &#039;&#039;&#039;potentiell abrufbaren Tiles&#039;&#039;&#039;&lt;br /&gt;
aller aktuellen &#039;&#039;und künftigen&#039;&#039; Layers,&lt;br /&gt;
die dieses Set verwenden&lt;br /&gt;
| Koordinaten im CRS des TileMatrixSets&lt;br /&gt;
| &amp;lt;!-- TODO: Minimalbeispiel --&amp;gt;&lt;br /&gt;
| &amp;lt;!-- TODO: Maximalbeispiel --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== XYZ &amp;amp;rarr; WMTS ==&lt;br /&gt;
&lt;br /&gt;
Hat man bereits einen nach XYZ-Konvention im Web verfügbaren Kachel-Satz, so lässt sich aus diesem ein (RESTful) WTMS machen, in dem man eine passende (statische) ServiceMetadata-XML-Datei &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt; serviert.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Kacheln von osm.ch als WMTS Konfig.-Datei:&lt;br /&gt;
https://gist.githubusercontent.com/das-g/882334b2844d5cdc7807eb9c12b8bccb/raw/WMTSCapabilities.xml&lt;br /&gt;
&lt;br /&gt;
=== XML-Schema-Validierung für &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch [https://stackoverflow.com/a/129401/674064 diese StackOverflow-Antwort bzgl. &amp;quot;XML Schema (XSD) validation tool&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
==== Mit &amp;lt;code&amp;gt;xmllint&amp;lt;/code&amp;gt; (libxml) ====&lt;br /&gt;
&lt;br /&gt;
(CLI-Tool, das bei libxml mitinstalliert wird, und somit auf Linux &amp;amp; Mac meist bereits vorhanden ist.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xmllint --noout --schema http://www.opengis.net/wmts/1.0 WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xmllint --noout --schema http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Falls das Schema lokal vorhanden ist, kann auch der Pfad zur Schema-Datei angegeben werden. Umgekehrt kann die XML-Datei auch als URL angegeben werden, um eine online verfügbare Version zu validieren. Allerdings scheint für Schema und XML nur HTTP, nicht aber HTTPS zu funktionieren.)&lt;br /&gt;
&lt;br /&gt;
==== Mit &amp;lt;code&amp;gt;xsd-validator&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
(Kleines Java-Programm, das den Standard-XML-Parser der JRE (normalerweise Xerces) verwendet.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/amouat/xsd-validator.git&lt;br /&gt;
wget http://www.opengis.net/wmts/1.0 --output-document=wmts.xsd&lt;br /&gt;
wget http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd&lt;br /&gt;
./xsd-validator/xsdv.sh wmts.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder einfach&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/amouat/xsd-validator.git&lt;br /&gt;
wget http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd&lt;br /&gt;
./xsd-validator/xsdv.sh wmtsGetCapabilities_response.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;xsd-validator&amp;lt;/code&amp;gt; kann nur mit lokalen Schema-Dateien umgehen, daher laden wir diese(s) hier mit &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt; selbst herunter. Auch die XML-Datei muss lokal vorliegen.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TileMatrixSet ===&lt;br /&gt;
&lt;br /&gt;
Für einen Kachel-Satz nach OSM- &amp;amp; Google Maps-Konvention kann das &amp;quot;Well-known scale set&amp;quot; &amp;quot;GoogleMapsCompatible&amp;quot; (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) aus Annex E.4 des [http://portal.opengeospatial.org/files/?artifact_id=35326 Standards] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Scale Denominator ====&lt;br /&gt;
&lt;br /&gt;
In Tabelle E.4 &amp;quot;Definition of Well-known scale set GoogleMapsCompatible&amp;quot; im Standard sind die Werte des &amp;quot;Scale Denominator&amp;quot; bereits für die Zoom-Levels 0&amp;amp;ndash;18 angegeben. Diese lassen sich aber auch wie folgt berechnen:&lt;br /&gt;
&lt;br /&gt;
===== Herleitung =====&lt;br /&gt;
&lt;br /&gt;
In Abschnitt 6.1 &amp;quot;Tile matrix set – the geometry of the tiled space&amp;quot; des Standards erhalten wir (unten auf Seite 8) u.A. folgende beiden Formeln:&lt;br /&gt;
&amp;lt;pre&amp;gt;pixelSpan = scaleDenominator × 0.28e-3 / metersPerUnit(crs)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;tileSpanX = tileWidth × pixelSpan&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraus folgt&lt;br /&gt;
&amp;lt;pre&amp;gt;tileSpanX = tileWidth × scaleDenominator × 0.28e-3 / metersPerUnit(crs)&amp;lt;/pre&amp;gt;&lt;br /&gt;
und daraus durch auflösen nach &amp;lt;code&amp;gt;scaleDenominator&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = tileSpanX × metersPerUnit(crs) / (tileWidth × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kachel-Kantenlänge in Pixel &amp;lt;code&amp;gt;tileWidth&amp;lt;/code&amp;gt; ist bei OSM &amp;amp; Google immer &#039;&#039;&#039;256&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Standard-Pixelgrösse ist gemäss OGC SLD Standard 0.28 Millimeter.&lt;br /&gt;
&lt;br /&gt;
Das CRS WebMercator verwendet (pseudo-)Metrische Koordinaten, daher ist &amp;lt;code&amp;gt;metersPerUnit(crs)&amp;lt;/code&amp;gt; hierfür &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bei Zoomlevel &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; wird die Welt zwischen 85.06°S and 85.06°N (und von 180°W bis 180°O) auf &amp;lt;code&amp;gt;2^Z × 2^Z&amp;lt;/code&amp;gt; Kacheln abgebildet. Entlang des Äquators hat man also &amp;lt;code&amp;gt;2^Z&amp;lt;/code&amp;gt; Kachel-Kanten. Laut Annex E.4 stimmen die &amp;quot;Scale Denominator&amp;quot;-Werte nur in Äquatornähe, also können wir das verwenden. Der Äquator-Radius ([http://www.epsg-registry.org/report.htm?type=selection&amp;amp;entity=urn:ogc:def:crs:EPSG::3857&amp;amp;reportDetail=short&amp;amp;style=urn:uuid:report-style:default-with-code&amp;amp;style_name=OGP%20Default%20With%20Code&amp;amp;title=EPSG:3857 im EPSG-Eintrag] &amp;quot;Semi-Major Axis (a)&amp;quot; genannt) ist der von WGS 84 und beträgt &#039;&#039;&#039;6&#039;378&#039;137&amp;amp;nbsp;m&#039;&#039;&#039;. Mit &amp;lt;code&amp;gt;Tau&amp;lt;/code&amp;gt; (a.k.a. &amp;lt;code&amp;gt;2&amp;amp;nbsp;Pi&amp;lt;/code&amp;gt;) multipliziert ergibt dies die Äquatorlänge. Damit ist&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tileSpanX = Äquatorlänge  / (2^Z)&lt;br /&gt;
          = 6378137 × Tau / (2^Z)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ergibt sich&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = (6378137 × Tau / (2^Z)) / (256 × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder umgeformt die&lt;br /&gt;
&lt;br /&gt;
===== Berechnungsformel =====&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = 6378137 × Tau / (256 × (2^Z) × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berechnung für Zoomlevels 0&amp;amp;ndash;18 in Python 3.6:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from math import tau&lt;br /&gt;
&lt;br /&gt;
equator_length = 6378137 * tau&lt;br /&gt;
{i : equator_length / (256 * 2**i * 0.28e-3) for i in range(19)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{0: 559082264.0287178,&lt;br /&gt;
 1: 279541132.0143589,&lt;br /&gt;
 2: 139770566.00717944,&lt;br /&gt;
 3: 69885283.00358972,&lt;br /&gt;
 4: 34942641.50179486,&lt;br /&gt;
 5: 17471320.75089743,&lt;br /&gt;
 6: 8735660.375448715,&lt;br /&gt;
 7: 4367830.1877243575,&lt;br /&gt;
 8: 2183915.0938621787,&lt;br /&gt;
 9: 1091957.5469310894,&lt;br /&gt;
 10: 545978.7734655447,&lt;br /&gt;
 11: 272989.38673277234,&lt;br /&gt;
 12: 136494.69336638617,&lt;br /&gt;
 13: 68247.34668319309,&lt;br /&gt;
 14: 34123.67334159654,&lt;br /&gt;
 15: 17061.83667079827,&lt;br /&gt;
 16: 8530.918335399136,&lt;br /&gt;
 17: 4265.459167699568,&lt;br /&gt;
 18: 2132.729583849784}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pixel Size (m) ====&lt;br /&gt;
&lt;br /&gt;
Die im Annex E.4 angegebenen (obwohl im XML wohl nicht anzugebenden) Pixel-Grössen in Metern ergeben sich, wenn man aus obiger Formel den 0.28&amp;amp;nbsp;mm/px-Faktor weglässt:&lt;br /&gt;
&amp;lt;pre&amp;gt;pixelSize = 6378137 × Tau / (256 × (2^Z))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berechnung für Zoomlevels 0&amp;amp;ndash;18 in Python 3.6:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from math import tau&lt;br /&gt;
&lt;br /&gt;
equator_length = 6378137 * tau&lt;br /&gt;
{i : equator_length / (256 * 2**i) for i in range(19)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{0: 156543.03392804097,&lt;br /&gt;
 1: 78271.51696402048,&lt;br /&gt;
 2: 39135.75848201024,&lt;br /&gt;
 3: 19567.87924100512,&lt;br /&gt;
 4: 9783.93962050256,&lt;br /&gt;
 5: 4891.96981025128,&lt;br /&gt;
 6: 2445.98490512564,&lt;br /&gt;
 7: 1222.99245256282,&lt;br /&gt;
 8: 611.49622628141,&lt;br /&gt;
 9: 305.748113140705,&lt;br /&gt;
 10: 152.8740565703525,&lt;br /&gt;
 11: 76.43702828517625,&lt;br /&gt;
 12: 38.21851414258813,&lt;br /&gt;
 13: 19.109257071294063,&lt;br /&gt;
 14: 9.554628535647032,&lt;br /&gt;
 15: 4.777314267823516,&lt;br /&gt;
 16: 2.388657133911758,&lt;br /&gt;
 17: 1.194328566955879,&lt;br /&gt;
 18: 0.5971642834779395}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pka</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Web_Map_Tile_Service&amp;diff=67931</id>
		<title>Web Map Tile Service</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Web_Map_Tile_Service&amp;diff=67931"/>
		<updated>2020-10-14T20:28:10Z</updated>

		<summary type="html">&lt;p&gt;Pka: Standard-Pixelgrösse gemäss OGC SLD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[OGC]]-Standard &#039;&#039;&#039;Web Map Tile Service (WMTS)&#039;&#039;&#039; ([http://www.opengeospatial.org/standards/wmts offizielle Website mit Versionen], [http://portal.opengeospatial.org/files/?artifact_id=35326 PDF v1.0.0]) ist eine von [[Web Map Tiling#Spezifikationen|mehreren Konventionen]] um Rasterkarten als (potenziell vor-berechnete &amp;amp; vor-gerenderte) Kachelsammlung anzubieten.&lt;br /&gt;
&lt;br /&gt;
Siehe auch &lt;br /&gt;
* [[Hintergrundkarten]] und [[Web Map Tiling]].&lt;br /&gt;
* Wikipedia ([https://en.wikipedia.org/wiki/Web_Map_Tile_Service en]|[https://de.wikipedia.org/wiki/Web_Map_Tile_Service de]).&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
&lt;br /&gt;
=== Einbinden auf SwissTopo-Webkarte ===&lt;br /&gt;
&lt;br /&gt;
# Gehe auf https://map.geo.admin.ch/&lt;br /&gt;
# Unter &amp;quot;Advanced Tools&amp;quot; (de: &amp;quot;Erweiterte Werkzeuge&amp;quot;), klicke &amp;quot;Import&amp;quot; (de: &amp;quot;Importieren&amp;quot;)&lt;br /&gt;
# Gib die URL zur &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt;-Datei an&lt;br /&gt;
# Klicke &amp;quot;Connect&amp;quot; (de: &amp;quot;Verbinden&amp;quot;)&amp;lt;br /&amp;gt;Die Liste der verfügbaren Layer des WMTS wird angezeigt. Durch Hovern über dem jeweiligen Listeneintrag wird eine Vorschau im Hintergrund geladen.&lt;br /&gt;
# Für jeden gewünschten Layer:&lt;br /&gt;
## Wähle (durch Anklicken) den gewünschten WMTS-Layer aus der angezeigten Liste&lt;br /&gt;
## Füll wahlweise das Feld &amp;quot;Description&amp;quot; (de: &amp;quot;Beschreibung&amp;quot; aus) &#039;&#039;&#039;(optional)&#039;&#039;&#039;&lt;br /&gt;
## Klicke &amp;quot;Add Layer&amp;quot; (de: &amp;quot;Layer Hinzufügen&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in QGIS ===&lt;br /&gt;
&lt;br /&gt;
Variante QGIS Builtin (XYZ/TMS Tiles Driver):&lt;br /&gt;
* Im QGIS Browser eine neue Verbindung (Connection) eines &amp;quot;XYZ Tiles&amp;quot; anlegen und dann &amp;quot;Add Layer to Project&amp;quot;.&lt;br /&gt;
* Siehe https://felix.rohrba.ch/en/2017/easily-add-tilemap-layers-qgis/ &lt;br /&gt;
&lt;br /&gt;
Variante mit GDAL Konfig.-Datei (XML)&lt;br /&gt;
* Siehe [[Hintergrundkarten]], [[Web_Map_Tiling]].&lt;br /&gt;
&lt;br /&gt;
Variante als WMTS Layer (OGC Standard, WMTSCapabilities.xml)&lt;br /&gt;
# Menü &amp;quot;Layer&amp;quot; &amp;gt; &amp;quot;Add Layer&amp;quot; &amp;gt; &amp;quot;Add WMS/WMTS Layer...&amp;quot; oder &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;-&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;-&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
# Button &amp;quot;New&amp;quot;&lt;br /&gt;
# Feld &amp;quot;Name&amp;quot; beliebig ausfüllen&lt;br /&gt;
# In Feld &amp;quot;URL&amp;quot; die URL zur &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt;-Datei angeben&lt;br /&gt;
# Button &amp;quot;OK&amp;quot;&lt;br /&gt;
# Button &amp;quot;Connect&amp;quot;&amp;lt;br /&amp;gt;Die Liste der verfügbaren Layer des WMTS wird angezeigt.&lt;br /&gt;
# Für jeden gewünschten Layer:&lt;br /&gt;
## Wähle (durch Anklicken) den gewünschten WMTS-Layer aus der angezeigten Liste&lt;br /&gt;
## Klicke Button &amp;quot;Add&amp;quot;&lt;br /&gt;
# Klicke Button &amp;quot;Close&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Begrenzungen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Position im XML-Baum (XPath)&lt;br /&gt;
! begrenzt&lt;br /&gt;
! mittels&lt;br /&gt;
! Minimalbeispiel&lt;br /&gt;
! Maximalbeispiel&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/ows:BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
das &#039;&#039;&#039;dargestellte Datenset&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
&lt;br /&gt;
(informativ;&lt;br /&gt;
Tiles können auch ausserhalb verfügbar sein, stellen dort aber keine Daten dar)&lt;br /&gt;
| Koordinaten im CRS des Layers&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:BoundingBox&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;420000 30000&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;900000 350000&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:BoundingBox crs=&amp;quot;urn:ogc:def:crs:EPSG:6.3:21781&amp;quot; dimensions=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;420000.000000 30000.000000&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;900000.000000 350000.000000&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/WGS84BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
das &#039;&#039;&#039;dargestellte Datenset&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
&lt;br /&gt;
(informativ;&lt;br /&gt;
Tiles können auch ausserhalb verfügbar sein, stellen dort aber keine Daten dar)&lt;br /&gt;
| dezimalen WGS84-Koordinaten (lon-lat: Längengrad vor Breitengrad)&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;-180 -85.05112878&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;180 85.05112878&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ows:WGS84BoundingBox crs=&amp;quot;urn:ogc:def:crs:OGC:2:84&amp;quot; dimensions=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ows:LowerCorner&amp;gt;-180.0 -85.05112877980659237838&amp;lt;/ows:LowerCorner&amp;gt;&lt;br /&gt;
    &amp;lt;ows:UpperCorner&amp;gt;180.0 85.05112877980659237838&amp;lt;/ows:UpperCorner&amp;gt;&lt;br /&gt;
&amp;lt;/ows:WGS84BoundingBox&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//Layer/TileMatrixSetLink/TileMatrixSetLimits/TileMatrixLimits&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
die &#039;&#039;&#039;abrufbaren Tiles&#039;&#039;&#039;&lt;br /&gt;
des Layers&lt;br /&gt;
für diese TileMatrix innerhalb des verlinken TileMatrixSets&lt;br /&gt;
&lt;br /&gt;
(normativ;&lt;br /&gt;
Anfrage ausserhalb sollte zu &amp;lt;code&amp;gt;TileOutOfRange&amp;lt;/code&amp;gt;-Exception bzw. HTTP-Status-Code &amp;lt;code&amp;gt;400&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Bad Request&amp;lt;/code&amp;gt; führen)&lt;br /&gt;
| Tile-Indices&lt;br /&gt;
| &amp;lt;!-- TODO: Minimalbeispiel --&amp;gt;&lt;br /&gt;
| &amp;lt;!-- TODO: Maximalbeispiel --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;//TileMatrixSet/BoundingBox&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
den &#039;&#039;&#039;Definitionsbereich&#039;&#039;&#039; des TileMatrixSets&lt;br /&gt;
und damit&lt;br /&gt;
die &#039;&#039;&#039;potentiell abrufbaren Tiles&#039;&#039;&#039;&lt;br /&gt;
aller aktuellen &#039;&#039;und künftigen&#039;&#039; Layers,&lt;br /&gt;
die dieses Set verwenden&lt;br /&gt;
| Koordinaten im CRS des TileMatrixSets&lt;br /&gt;
| &amp;lt;!-- TODO: Minimalbeispiel --&amp;gt;&lt;br /&gt;
| &amp;lt;!-- TODO: Maximalbeispiel --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== XYZ &amp;amp;rarr; WMTS ==&lt;br /&gt;
&lt;br /&gt;
Hat man bereits einen nach XYZ-Konvention im Web verfügbaren Kachel-Satz, so lässt sich aus diesem ein (RESTful) WTMS machen, in dem man eine passende (statische) ServiceMetadata-XML-Datei &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt; serviert.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Kacheln von osm.ch als WMTS Konfig.-Datei:&lt;br /&gt;
https://gist.githubusercontent.com/das-g/882334b2844d5cdc7807eb9c12b8bccb/raw/WMTSCapabilities.xml&lt;br /&gt;
&lt;br /&gt;
=== XML-Schema-Validierung für &amp;lt;code&amp;gt;WMTSCapabilities.xml&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Siehe auch [https://stackoverflow.com/a/129401/674064 diese StackOverflow-Antwort bzgl. &amp;quot;XML Schema (XSD) validation tool&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
==== Mit &amp;lt;code&amp;gt;xmllint&amp;lt;/code&amp;gt; (libxml) ====&lt;br /&gt;
&lt;br /&gt;
(CLI-Tool, das bei libxml mitinstalliert wird, und somit auf Linux &amp;amp; Mac meist bereits vorhanden ist.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xmllint --noout --schema http://www.opengis.net/wmts/1.0 WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xmllint --noout --schema http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Falls das Schema lokal vorhanden ist, kann auch der Pfad zur Schema-Datei angegeben werden. Umgekehrt kann die XML-Datei auch als URL angegeben werden, um eine online verfügbare Version zu validieren. Allerdings scheint für Schema und XML nur HTTP, nicht aber HTTPS zu funktionieren.)&lt;br /&gt;
&lt;br /&gt;
==== Mit &amp;lt;code&amp;gt;xsd-validator&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
(Kleines Java-Programm, das den Standard-XML-Parser der JRE (normalerweise Xerces) verwendet.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/amouat/xsd-validator.git&lt;br /&gt;
wget http://www.opengis.net/wmts/1.0 --output-document=wmts.xsd&lt;br /&gt;
wget http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd&lt;br /&gt;
./xsd-validator/xsdv.sh wmts.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder einfach&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/amouat/xsd-validator.git&lt;br /&gt;
wget http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd&lt;br /&gt;
./xsd-validator/xsdv.sh wmtsGetCapabilities_response.xsd WMTSCapabilities.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;xsd-validator&amp;lt;/code&amp;gt; kann nur mit lokalen Schema-Dateien umgehen, daher laden wir diese(s) hier mit &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt; selbst herunter. Auch die XML-Datei muss lokal vorliegen.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TileMatrixSet ===&lt;br /&gt;
&lt;br /&gt;
Für einen Kachel-Satz nach OSM- &amp;amp; Google Maps-Konvention kann das &amp;quot;Well-known scale set&amp;quot; &amp;quot;GoogleMapsCompatible&amp;quot; (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) aus Annex E.4 des [http://portal.opengeospatial.org/files/?artifact_id=35326 Standards] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Scale Denominator ====&lt;br /&gt;
&lt;br /&gt;
In Tabelle E.4 &amp;quot;Definition of Well-known scale set GoogleMapsCompatible&amp;quot; im Standard sind die Werte des &amp;quot;Scale Denominator&amp;quot; bereits für die Zoom-Levels 0&amp;amp;ndash;18 angegeben. Diese lassen sich aber auch wie folgt berechnen:&lt;br /&gt;
&lt;br /&gt;
===== Herleitung =====&lt;br /&gt;
&lt;br /&gt;
In Abschnitt 6.1 &amp;quot;Tile matrix set – the geometry of the tiled space&amp;quot; des Standards erhalten wir (unten auf Seite 8) u.A. folgende beiden Formeln:&lt;br /&gt;
&amp;lt;pre&amp;gt;pixelSpan = scaleDenominator × 0.28e-3 / metersPerUnit(crs)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;tileSpanX = tileWidth × pixelSpan&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraus folgt&lt;br /&gt;
&amp;lt;pre&amp;gt;tileSpanX = tileWidth × scaleDenominator × 0.28e-3 / metersPerUnit(crs)&amp;lt;/pre&amp;gt;&lt;br /&gt;
und daraus durch auflösen nach &amp;lt;code&amp;gt;scaleDenominator&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = tileSpanX × metersPerUnit(crs) / (tileWidth × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kachel-Kantenlänge in Pixel &amp;lt;code&amp;gt;tileWidth&amp;lt;/code&amp;gt; ist bei OSM &amp;amp; Google immer &#039;&#039;&#039;256&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Standard-Pixelgrösse ist gemäss OGC SLD Standard 0.28 Millimeter.&lt;br /&gt;
&lt;br /&gt;
Das CRS WebMercator verwendet (pseudo-)Metrische Koordinaten, daher ist &amp;lt;code&amp;gt;metersPerUnit(crs)&amp;lt;/code&amp;gt; hierfür &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bei Zoomlevel &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; wird die Welt zwischen 85.06°S and 85.06°N (und von 180°W bis 180°O) auf &amp;lt;code&amp;gt;2^Z × 2^Z&amp;lt;/code&amp;gt; Kacheln abgebildet. Entlang des Äquators hat man also &amp;lt;code&amp;gt;2^Z&amp;lt;/code&amp;gt; Kachel-Kanten. Laut Annex E.4 stimmen die &amp;quot;Scale Denominator&amp;quot;-Werte nur in Äquatornähe, also können wir das verwenden. Der Äquator-Radius ([http://www.epsg-registry.org/report.htm?type=selection&amp;amp;entity=urn:ogc:def:crs:EPSG::3857&amp;amp;reportDetail=short&amp;amp;style=urn:uuid:report-style:default-with-code&amp;amp;style_name=OGP%20Default%20With%20Code&amp;amp;title=EPSG:3857 im EPSG-Eintrag] &amp;quot;Semi-Major Axis (a)&amp;quot; genannt) ist der von WGS 84 und beträgt &#039;&#039;&#039;6&#039;378&#039;137&amp;amp;nbsp;m&#039;&#039;&#039;. Mit &amp;lt;code&amp;gt;Tau&amp;lt;/code&amp;gt; (a.k.a. &amp;lt;code&amp;gt;2&amp;amp;nbsp;Pi&amp;lt;/code&amp;gt;) multipliziert ergibt dies die Äquatorlänge. Damit ist&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tileSpanX = Äquatorlänge  / (2^Z)&lt;br /&gt;
          = 6378137 × Tau / (2^Z)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ergibt sich&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = (6378137 × Tau / (2^Z)) / (256 × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder umgeformt die&lt;br /&gt;
&lt;br /&gt;
===== Berechnungsformel =====&lt;br /&gt;
&amp;lt;pre&amp;gt;scaleDenominator = 6378137 × Tau / (256 × (2^Z) × 0.28e-3)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berechnung für Zoomlevels 0&amp;amp;ndash;18 in Python 3.6:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from math import tau&lt;br /&gt;
&lt;br /&gt;
equator_length = 6378137 * tau&lt;br /&gt;
{i : equator_length / (256 * 2**i * 0.28e-3) for i in range(19)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{0: 559082264.0287178,&lt;br /&gt;
 1: 279541132.0143589,&lt;br /&gt;
 2: 139770566.00717944,&lt;br /&gt;
 3: 69885283.00358972,&lt;br /&gt;
 4: 34942641.50179486,&lt;br /&gt;
 5: 17471320.75089743,&lt;br /&gt;
 6: 8735660.375448715,&lt;br /&gt;
 7: 4367830.1877243575,&lt;br /&gt;
 8: 2183915.0938621787,&lt;br /&gt;
 9: 1091957.5469310894,&lt;br /&gt;
 10: 545978.7734655447,&lt;br /&gt;
 11: 272989.38673277234,&lt;br /&gt;
 12: 136494.69336638617,&lt;br /&gt;
 13: 68247.34668319309,&lt;br /&gt;
 14: 34123.67334159654,&lt;br /&gt;
 15: 17061.83667079827,&lt;br /&gt;
 16: 8530.918335399136,&lt;br /&gt;
 17: 4265.459167699568,&lt;br /&gt;
 18: 2132.729583849784}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pixel Size (m) ====&lt;br /&gt;
&lt;br /&gt;
Die im Annex E.4 angegebenen (obwohl im XML wohl nicht anzugebenden) Pixel-Grössen in Metern ergeben sich, wenn man aus obiger Formel den mysteriösen 0.28&amp;amp;nbsp;mm/px-Faktor weglässt:&lt;br /&gt;
&amp;lt;pre&amp;gt;pixelSize = 6378137 × Tau / (256 × (2^Z))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Berechnung für Zoomlevels 0&amp;amp;ndash;18 in Python 3.6:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from math import tau&lt;br /&gt;
&lt;br /&gt;
equator_length = 6378137 * tau&lt;br /&gt;
{i : equator_length / (256 * 2**i) for i in range(19)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{0: 156543.03392804097,&lt;br /&gt;
 1: 78271.51696402048,&lt;br /&gt;
 2: 39135.75848201024,&lt;br /&gt;
 3: 19567.87924100512,&lt;br /&gt;
 4: 9783.93962050256,&lt;br /&gt;
 5: 4891.96981025128,&lt;br /&gt;
 6: 2445.98490512564,&lt;br /&gt;
 7: 1222.99245256282,&lt;br /&gt;
 8: 611.49622628141,&lt;br /&gt;
 9: 305.748113140705,&lt;br /&gt;
 10: 152.8740565703525,&lt;br /&gt;
 11: 76.43702828517625,&lt;br /&gt;
 12: 38.21851414258813,&lt;br /&gt;
 13: 19.109257071294063,&lt;br /&gt;
 14: 9.554628535647032,&lt;br /&gt;
 15: 4.777314267823516,&lt;br /&gt;
 16: 2.388657133911758,&lt;br /&gt;
 17: 1.194328566955879,&lt;br /&gt;
 18: 0.5971642834779395}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pka</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Diskussion:Workshop_GEOSummit_2012&amp;diff=38088</id>
		<title>Diskussion:Workshop GEOSummit 2012</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Diskussion:Workshop_GEOSummit_2012&amp;diff=38088"/>
		<updated>2012-02-02T08:05:21Z</updated>

		<summary type="html">&lt;p&gt;Pka: QGIS User Group Switzerland&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Referenten:&lt;br /&gt;
* Stefan Keller, HSR Rapperswil&lt;br /&gt;
* Olivier Ertz, HEIG-VD, Yverdon &lt;br /&gt;
* Geomedia/GEOSPro (Intergraph): Hugo Thalmann&lt;br /&gt;
* AutoCAD Map (AutoDesk): Matthias Liechti&lt;br /&gt;
* ArcGIS (Esri/Geocom): Lukas Divis und Pascal Megert&lt;br /&gt;
* QGIS (QGIS/Sourcepole): Pirmin Kalberer (QGIS User Group Switzerland)&lt;br /&gt;
 &lt;br /&gt;
Programmentwurf (9:00-12:00, 13:30-16:30):&lt;br /&gt;
&lt;br /&gt;
# Einführung (10 min.)&lt;br /&gt;
# Datenmodellierung (0.5h)&lt;br /&gt;
# Darstellungsmodellierung und -Austausch (v.a. Tabellarisch a la SIA424, und OGC SE/SLD, weitere?) (1.0h).&lt;br /&gt;
# Kaffeepause	(0.5h)&lt;br /&gt;
# Darstellungsmodellierung Diskussion (0.5)&lt;br /&gt;
# Datenexport und -import (0.5)&lt;br /&gt;
# Mittagspause (1.5h, 12:00-13:30)&lt;br /&gt;
# Demo Fachapplikations-Erstellung (je GIS eine Gruppe) (2.0h 13:30-15:30)&lt;br /&gt;
# Diskussion - gemeinsame Schlussdiskussion v.a. über Modell-Umsetzungs-Probleme (0.5h), &lt;br /&gt;
# Abschluss&lt;br /&gt;
&lt;br /&gt;
Bemerkungen: Der Ablauf ist ähnlich [[Workshop_Vom_Datenmodell_zum_Planungsalltag|FSU-Workshop]] am Beispiel Raumplanung (Minimales GDM Nutzungsplanung Bund) Dorf Nänikon unter Einbezug der Firmen, bzw. GIS-Lösungen von Intergraph, ESRI, QGIS und AutoDesk, die parallel Lösungen demonstrieren - wie bereits in einem FSU-Kurs für Raumplaner gezeigt (2h mit Diskussion).&lt;/div&gt;</summary>
		<author><name>Pka</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=PostgreSQL-PostGIS-H%C3%B6ck&amp;diff=27952</id>
		<title>PostgreSQL-PostGIS-Höck</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=PostgreSQL-PostGIS-H%C3%B6ck&amp;diff=27952"/>
		<updated>2010-07-12T09:02:25Z</updated>

		<summary type="html">&lt;p&gt;Pka: Datumskorrektur + Teilnahme Pirmin Kalberer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;PostgreSQL/PostGIS-Höck in Zürich&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wann? &#039;&#039;&#039;14. Juli 2010 ab 18:15 Uhr&#039;&#039;&#039; (vergangene Höcks siehe [[Agenda Archiv]]). &lt;br /&gt;
* Wo? Im bQm kultur café &amp;amp; bar (&amp;quot;Tischgenau&amp;quot; an einer Ecke der Polyterrasse), ETH, Leonhardstrasse 34, 8092 Zürich.&lt;br /&gt;
* Wer? Es sind alle Interessierten eingeladen - auch PostgreSQL/PostGIS-Neulinge.&lt;br /&gt;
&lt;br /&gt;
Damit wir planen können, bitten wir um eine Anmeldung (Teilnahme kostenlos):&lt;br /&gt;
&lt;br /&gt;
  Zur [http://gis.hsr.ch/index.php?option=com_mosforms&amp;amp;Itemid=184 Online-Anmeldung...]&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[GISpunkt-Seminar PostGIS]], [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
=== Um was geht es? ===&lt;br /&gt;
&lt;br /&gt;
Bei diesem Höck ( Hoeck ) geht vor allem um den Know-How-Austausch bei (anschliessend) gemütlichem Zusammensein.&lt;br /&gt;
&lt;br /&gt;
Mögliche Themen könnten sein:&lt;br /&gt;
* PostGIS 1.5&lt;br /&gt;
* Replikation&lt;br /&gt;
* Historisierung &lt;br /&gt;
* (weitere...)&lt;br /&gt;
&lt;br /&gt;
Wir sind aber auch offen für weitere Themen rund um PostgreSQL/PostGIS (Anmerkung: Weitere Themen oben einfach einfügen).&lt;br /&gt;
&lt;br /&gt;
=== Organisatorisches ===&lt;br /&gt;
&lt;br /&gt;
Ablauf:&lt;br /&gt;
* Vorstellungsrunde&lt;br /&gt;
* Präsentation vorbereiteter Themen&lt;br /&gt;
* jeweils mit Diskussion&lt;br /&gt;
* Anschliessend gehen wir zum gemütlichen Teil über&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Teilnehmer ==&lt;br /&gt;
Bitte hier (öffentlich) einschreiben oder persönlich über die [http://gis.hsr.ch/index.php?option=com_mosforms&amp;amp;Itemid=184 Online-Anmeldung].&lt;br /&gt;
# [[Benutzer:Stefan|Stefan]] 08:12, 12. Jul. 2010 (UTC)&lt;br /&gt;
# Pirmin Kalberer  Mon, 12 Jul 2010 11:01:53&lt;br /&gt;
# (dein Name hier (bitte Mail in deinem Wiki-Konto angeben, damit man dich erreichen kann))&lt;/div&gt;</summary>
		<author><name>Pka</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=PostgreSQL&amp;diff=23507</id>
		<title>PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=PostgreSQL&amp;diff=23507"/>
		<updated>2009-06-08T10:52:58Z</updated>

		<summary type="html">&lt;p&gt;Pka: Bücher&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL ist eines der bewährtesten Datenbanksysteme im Bereich der Open Source Software. PostgreSQL ist weitgehend SQL-konform und braucht einen Vergleich mit bekannten Produkten nicht zu scheuen, insbesondere was die Wartbarkeit (Total Cost of Ownership), Funktionalität und Geschwindigkeit betrifft. PostgreSQL wird zunehmend in Dienstleistungsbetrieben und in öffentlichen Verwaltungen eingesetzt. beispielsweise für Geodaten. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Postgres&#039;&#039; war der erste Projekt- bzw. Produktname und entstand aus &#039;Post&#039; und &#039;Ingres&#039;. Ingres war das von Prof. Stonebraker initiierte Vorgängerprojekt.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
* [[PostGIS]], [[PostGIS - Tipps und Tricks]] und [[PostGIS-Beispiele]] &lt;br /&gt;
* [[GISpunkt-Seminar PostGIS]]&lt;br /&gt;
* [[PostgreSQL - Tipps und Tricks]], [http://wiki.hsr.ch/Datenbanken/wiki.cgi?PostgreSQL PostgreSQL auf dem HSR Wiki] (u.a. mit Bücher)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Die Volltextsuche (Module &#039;Open Full Text Search&#039;, OpenFTS) ist ab PostgreSQL Version 8.3 Bestandteil der Standardlieferumfangs, das Modul TSearch2 ist also ein veralteter Vorgänger davon.&lt;br /&gt;
&lt;br /&gt;
* Hotbackup: http://www.postgresqlforums.com/wiki/Backup_&amp;amp;_Recovery&lt;br /&gt;
&lt;br /&gt;
* Performance tuning: [http://www.revsys.com/writings/postgresql-performance.html RevSys (Hardware, Tuning, Explain, etc.)], [http://groups.google.ch/group/EtoE/browse_thread/thread/eaabeda775e65260/1d3c809e723c6b07?hl=de&amp;amp;lnk=st&amp;amp;q=Best+CPU+for+PostgreSQL#1d3c809e723c6b07 PostgreSQL 8 Performance Checklist (genaue Erklärung der Variablen in postgresql.conf], [http://www.pcguide.com/ref/hdd/perf/raid/ RAID Hinweise]. Für kleinere bis mittlere PostgreSQL Installationen mit primär Leseoperationen empfiehlt sich RAID 0  oder RAID 1. RAID 0 hat jedoch keine Redundanz. RAID 5 hat schlechte Performanz, ausser wenn 6 oder mehr Disks. SCSI Ultra 320 Disks sind zwar teurer aber immer noch wesentlich schneller als S-ATA/IDE Disks.&lt;br /&gt;
&lt;br /&gt;
== Bücher ==&lt;br /&gt;
&lt;br /&gt;
* Peter Eisentraut &amp;amp; Bernd Helmle, PostgreSQL-Administration, O&#039;Reilly Verlag, ISBN 978-3-89721-777-5 (sehr empfehlenswert)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Installation unter Windows:&lt;br /&gt;
* [http://www.pg-forum.de/haeufig-gestellte-fragen-faq/918-installation-von-postgresql-unter-windows.html pg-forum.de] (de)&lt;br /&gt;
* [http://pginstaller.projects.postgresql.org/ Homepage postgresql.org]&lt;br /&gt;
* [http://yum.pgsqlrpms.org/livecd.php PostgreSQL Live CD]&lt;br /&gt;
&lt;br /&gt;
Frontend- und Administrations-Software:&lt;br /&gt;
* pgAdmin III - DB-Administrations-Software (im Standard-Lieferumfang)&lt;br /&gt;
* [http://squirrel-sql.sourceforge.net/ SquirrelDB] - DB-Administrations-Software&lt;br /&gt;
* [http://pgworksheet.projects.postgresql.org/ PgWorksheet] - Ein einfaches GUI Frontend&lt;br /&gt;
* [http://pfm.projects.postgresql.org/ Postgres Forms (pfm)]&lt;br /&gt;
* [http://www.rbt.ca/autodoc/ PostgreSQL Autodoc] - Making database diagrams for documentation&lt;br /&gt;
* phpPgAdmin (Webbasiert): http://phppgadmin.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
Erweiterungs-Module (Backend):&lt;br /&gt;
* [http://slony.info/ Slony1/Slony-I] zur Daten-Replikation sowie Cascading und Switch-/Fail-over.&lt;br /&gt;
* [http://pgcluster.projects.postgresql.org/ PGCluster] - Enthält einen Load Balancer, eine Cluster DB, und ein Replikations-Server für PostgreSQL.&lt;br /&gt;
* [http://pgpool.projects.postgresql.org/ Pgpool] - Ein Connection Pool Server für PostgreSQL. Sitzt als Connection-Cache zwischen Clients und PostgreSQL-Server. Zudem können damit zwei PostgreSQL-Servers für Fail over verbunden werden. Zudem ist &amp;quot;scheduled switch over&amp;quot; möglich. Pgpool-II behebt die Limitation auf 2 Server.&lt;br /&gt;
* [[PostGIS]] - die Geometrie-Funktionen-Erweiterung (PostgreSQL Version 8 hat PostGIS integriert, falls bei der Installation angegeben).&lt;br /&gt;
* [http://www.postlbs.org/ PostLBS] - mit dem Modul pgRouting zur Berechnung des kürzesten Weges und des &amp;quot;Problems des Handlungsreisenden&amp;quot; und dem Modul GeoCoder (nur Japan).&lt;br /&gt;
* [http://dba.openoffice.org/drivers/postgresql/ SDBC Driver] - Treiber zur direkten Nutzung von PostgreSQL aus OpenOffice heraus ohne &#039;Umweg&#039; über JDBC/ODBC.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download: &lt;br /&gt;
* http://www.postgresql.org/download/windows/&lt;br /&gt;
* Aktuelle Windows-Versionen PostgreSQL 8.3.5 mit PostGIS 1.3.5. -- [[Benutzer:Stefan|Stefan]] 11:45, 14. Jan. 2009 (CET)&lt;br /&gt;
&lt;br /&gt;
Windows-Installation:&lt;br /&gt;
 &lt;br /&gt;
# Die Windows Version von PostgreSQL enthält PostGIS als optionale Komponente.&lt;br /&gt;
# Weil der Release-Zyklus von PostgreSQL unterschiedlich ist von demjenigen von PostGIS, enthält der offizielle PostgreSQL Windows installer meistens eine ältere PostGIS-Version. Dies genügt für viele Zwecke.&lt;br /&gt;
# Wer die neuste PostgreSQL und die neuste PostGIS-Version haben will, installiert zuerst PostgreSQL ohne PostGIS. Dann kann der PostGIS installer gestartet werden (Download von http://www.postgis.org/download/windows/). &lt;br /&gt;
&lt;br /&gt;
* Official Installation Guide: [http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows Running &amp;amp; Installing PostgreSQL On Native Windows]&lt;br /&gt;
* Tipps:&lt;br /&gt;
** Siehe [http://www.pg-forum.de/h-ufig-gestellte-fragen-faq/ FAQ auf pg-forum.de]&lt;br /&gt;
** Es gibt einen Windows User postgres. Dieser darf keine Windows-Login-Rechte haben (deaktivieren des User Account Control).&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
&lt;br /&gt;
* Tipps:&lt;br /&gt;
** Unbedingt mit Language Support psql compilieren.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.de PostgreSQL Homepage (deutsch)]]&lt;br /&gt;
* [http://www.postgresql.org PostgreSQL Homepage (engl.)]]&lt;br /&gt;
* [http://www.pgug.de/ PostgreSQL User Group Deutschland]&lt;br /&gt;
* [http://www.pg-forum.de/ PG-Forum.de]&lt;br /&gt;
* [http://www.powerpostgresql.com/PerfList PostgreSQL 8.0 Performance Checklist]&lt;/div&gt;</summary>
		<author><name>Pka</name></author>
	</entry>
</feed>