Iwan7 - Abruf von rotierten Kartenbildern
Mit einer speziellen Aufrufsyntax ist es möglich, Ausschnitte aus einer Karte rotiert darzustellen. Der zu definierende Ausschnitt wird dabei nicht wie sonst üblich über eine BoundingBox angegeben, sondern über den oberen linken Punkt eines Rechteckes um den rotiert wird, sowie den Rotationswinkel. Das folgende Bild illustriert den Abruf einer rotierten Karte.
Endpunkt: /render
Encoding: GET/POST (application/x-www-form-urlencoded)
Generiert ein Kartenbild durch Rendern der angegebenen Ebenen und sendet das Ergebnis als PNG Bild zurück. Im Antwort-Header werden zudem Informationen über den Zeichenvorgang zurückgegeben.
Das Gesamtbild kann wie im obigen Beispiel aus mehreren Bildkacheln bestehen. Pro Abfrage kann immer nur eine dieser Bildkacheln abgerufen werden.
Argumente:
targetEpsg: Zieltransformation
requestEpsg: Die Projektion in der der Rotationsmittelpunkt sowie Abfragehöhe und Breite vorliegen
width: Die physische Gesamtbreite des zu zeichnenden Bildausschnittes in Pixeln (Summe der Breite aller Bildkacheln)
rotationCenterPointX: Die X Koordinate (in Karteneinheiten) des Mittelpunktes des Abfragerechteckes um den rotiert wird (Projektion ist requestEpsg)
rotationCenterPointY: Die Y Koordinate (in Karteneinheiten) des Mittelpunktes des Abfragerechteckes um den rotiert wird (Projektion ist requestEpsg)
rotationAngleInDegree: Der Rotationswinkel in Grad mit dem die Karte rotiert wird (positive Werte bedeuten Rotation gegen den Uhrzeigersinn, d.h. im obigen Beispiel wäre der Rotationswinkel ungefähr 45 Grad) Achtung: Die Rotation wird erst nach der Projektion in targetEpsg durchgeführt.
requestAreaWidthInMapUnits: Die Breite des rotierten Abfragebereiches in Karteneinheiten (Projektion ist requestEpsg)
requestAreaHeightInMapUnits: Die Höhe des rotierten Abfragebereiches in Karteneinheiten (Projektion ist requestEpsg)
maxPhysicalTileWidthInPixel: Die maximale physische Breite einer Bildkachel
maxPhysicalTileHeightInPixel: Die maximale physische Höhe einer Bildkachel
Der Parameter height wird ignoriert und stattdessen aus dem Höhen- und Breitenverhältnis des Abfragerechteckes sowie der physischen Bildbreite intern berechnet. Ist maxPhysicalTileWidthInPixel kleiner als width oder maxPhysicalTileHeightInPixel kleiner als height so wird das Bild in Kacheln unterteilt und mit den folgenden beiden Argumenten wird die zu zeichnende Kachel ausgewählt. Pro Aufruf kann immer nur eine Kachel abgerufen werden. Die zurückgegebene Bildkachel hat damit maximal die Größe von maxPhysicalTileWidthInPixel und maxPhysicalTileHeightInPixel.
tileColumn: Der Spaltenindex der Kachel (Start ist 0; muss kleiner sein als die horizontale Anzahl der Kacheln)
tileRow: Der Reihenindex der Kachel (Start ist 0; muss kleiner sein als die vertikale Anzahl der Kacheln)
Achtung: beim Abruf der Kacheln bleiben alle Argumente bis auf tileColumn und tileRow konstant!
scaleFactor (1.0): Die Auflösung (gibt an um wieviel mal das physische Bild größer ist als das Logische)
layers: Kommagetrennte Liste der zu zeichnenden Ebenennamen
RenderEngine (Agee): Direct2d|Agee (GDIPlus wird hier nicht unterstützt)
Beispiel Aufruf:
"http://localhost:8287/iwan/ref/render?width=1000&layers=LUL_2DF03A93DE2FEA3528F40B3500AA3758,LUL_2C52846EB926E62C7BDCC15445565D37&rotationCenterPointX=5412253&rotationCenterPointY=5659492&rotationAngleInDegree=45.0&requestAreaWidthInMapUnits=300&requestAreaHeightInMapUnits=200&maxPhysicalTileWidthInPixel=9000&maxPhysicalTileHeightInPixel=9000&tileRow=0&tileColumn=0&targetEpsg=31469&requestEpsg=31469&scaleFactor=1.0"
Die Größe der Kacheln ist immer kleiner oder gleich maxPhysicalTileWidthInPixel bzw. maxPhysicalTileHeightInPixel und wird so gewählt das alle Kacheln möglichst gleich groß sind, damit das Seitenverhältnis stimmt.
IDU Intern:
In .Net gibt es Hilfsfunktionen mit deren Hilfe sich die Kachelparameter (Anzahl, Größe, Position, BoundingBox) berechnen lassen.
Datei: Rendering\RendererUtils.h
Namespace: IduIT.GeoLib.Net.Rendering.RendererUtils
Klasse: MapParameterCalculator
Funktionen:
ComputeGridExtent: Berechnet die horizontale und vertikale Anzahl von Bildkacheln
ComputeTileParameterForRotatedMap: Berechnet die Parameter einer Bildkachel
ComputeTileSetParameterForRotatedMap: Berechnet die Parameter aller Bildkacheln
Zuletzt geändert: 20.09.2024 07:22:06 (erstmals erstellt 22.06.2018)