Iwan7 - Aufruf Urls
Alle Aufrufe erfolgen in der Form http
Der Projektname ist dabei optional, wird kein Projekt angegeben, wird das Projekt $default verwendet.
Ein Projekt dient der Trennung der Ebenen. Es sind keine Projektübergreifenden Zugriffe möglich. Der Name der Ebene ist pro Projekt eindeutig.
Wenn die Url mit /no_trace/ beginnt, wird der Aufruf nicht protokolliert.
Folgende Aktionen stehen zur Verfügung:
Rund um Ebenen
/json/load | /json/reinitialize | /unload | /json/layers | /json/findLayers | /json/layersreinitrequired | /json/layerExists | /json/layerSourceFiles | /json/renderstats | /ui/layers | /ui/load
Rund um Snapshots
/json/snapshot/create | /json/snapshot/delete | /json/snapshot/getid|
Karten und Symbolik
/render | /legend | /json/validatecss | /json/render | /json/installedFonts
Datenabruf
Status/Konfiguration
/activities/cancel | /activities/cancelGroup | /stat | /config | /json/writeConfig | /ui/state | /ui/enc
/trace | /traceSize | /traceTruncate | json/trace | json/tracemodify
TileJobs
Sonstige
Zusatzinformationen können per Http-Header an den Server mit übermittelt werden:
- x-iwan-project
- x-iwan-username
- x-iwan-groupnames
Wird ein Projektname per Http-Header übergeben, wird dieser bevorzugt verwendet.
Der Benutzername und die Gruppennamen (Komma-getrennt) werden dem Aufrufkontext zur Verfügung gestellt und können z.B. bei Datenbankabfragen mit verwendet werden.
Um Aktivitäten in Gruppen zusammenzufassen, die dann abbrechbar sind, kann der Header
- x-iwan-activitygrouptoken
übergeben werden. Damit werden die Aktivitäten für die Dauer das Vorgangs in einer Gruppe zusammengefasst.
Rund um Ebenen
Laden von Ebenen
Endpunkt: /json/load
Encoding: POST (application/json)
Lädt eine oder mehrere Ebenen. Erwartet wird eine Array von Ebenendefinitionen im Json Format. Siehe dazu die Beschreibung zu den verfügbaren Datenquellen, bzw. den allgemeinen Hinweisen zu JSON Format der Ebenenbeschreibung.
Als Antwort wird eine Beschreibung der Ebenen geliefert.
Neuladen von Ebenen
Endpunkt: /json/reinitialize
Encoding: GET/POST (application/x-www-form-urlencoded)
Lädt die Ebene neu. Diese Funktion ist vor allem für die Nutzung im Zusammenhang mit den Ergebnissen aus json/layersreinitrequired sinnvoll.
Argumente:
- layer: Name der Ebene
Als Antwort wird eine Beschreibung der Ebene mit dem zusätzlichem Attribut bool:wasReloaded
geliefert.
Entladen von Ebenen
Endpunkt: /unload
Encoding: GET/POST (application/x-www-form-urlencoded)
Entlädt die Ebene aus dem Projekt, sofern vorhanden. Zurückgegeben wird ein Array von Zahlenwerten, die die Verwendung der Ebenen anzeigen (der Unload kann u.U. erst mit der letzten Referenz auf die Ebene erfolgen)
Argumente:
- layer: Name der Ebene
oder
- layers: Namen der Ebenen, kommagetrennt
Abrufen der Ebenen-Informationen
Endpunkt: /json/layers
Encoding: GET
Ruft Informationen über geladene Ebenen ab, gibt Array oder ein Einzelobjekt (bei Verwendung von layer) zurück.
Argumente:
embedDefaultCss (false): Css mit abrufen
layer (null): Name der Ebene, ist diese nicht vorhanden wird eine LayerNotFound Exception geliefert
... oder ...
- layers (null): Komma getrennte Liste der Ebenen, nicht vorhandene Ebenen werden ignoriert
Wird weder layer oder layers angegeben, werden alle Ebenen zurückgegeben.
Beachte, dass bei layer ein Einzel-Objekt, bei den anderen Optionen immer ein Array zurückgeliefert wird.
[
{
"layerName": "STR",
"primarySource": "D:\\TEMP\\STRAS.shp",
"secondSource": "",
"title": "",
"description": "Shape-Datei",
"featureCount": 13371,
"subLayers": [],
"primarySourceLastModified": "2015-02-15T15:11:42.331Z",
"displayScaleRange": {
"minimum": 0,
"maximum": 0
},
"envelope": {
"epsgCode": 31469,
"minx": 5400673.414,
"miny": 5649421.5315,
"maxx": 5427367.4021,
"maxy": 5671795.5065
},
"supportsCssStyling": true,
"defaultCss": "",
"supportedStyle": 1,
"querySupport": 3,
"type": "VectorLayer",
"detailedType": "Shapefile",
"attributs": [
{
"name": "ShapeRowId",
"type": "Int32",
"flags": "UniqueValues, HasIndex, IsNotNull, ComputedColumn, RowId",
"length": -1,
"ordinal": 0
},
{
"name": "ShapeGeometry",
"type": "Geom",
"flags": "HasIndex",
"length": -1,
"ordinal": 1
},
{
"name": "CLASS",
"type": "Int32",
"flags": "Default",
"length": 8,
"ordinal": 0
}
],
"loadedAt": "2017-06-03T07:49:38.137Z",
"loadingDurationMs" : 80
}
]
Suchen von Ebenen anhand der Quell-Datei
Endpunkt: /json/findlayers
Encoding: GET/POST (application/x-www-form-urlencoded)
Ermittelt die Ebenennamen, die als Datenquelle mind. eine mit filePattern übereinstimmende Datei verwenden.
Zurückgegeben wird ein Dictionary mit Projekt-Name als Schlüssel und der Liste der gefundenen Ebenennamen in diesem Projekt.
Argumente:
lookInAllProjects (false): wenn true, dann wird in allen Projekten gesucht, sonst nur im aktuellen
filePattern : Teil des gesuchten Dateinamen, kann * oder ? als Platzhalter enthalten. Intern sind die Dateinamen immer absolut. In dieser Methoden werden auch temp. erstellte Dateien mit gesucht (z.B. die Cache-Datenbank einer DXF Datei).
Durch | können mehrere Muster übergeben werden.
Beispiel-Ausgabe:
{"REF":[
"L1",
"L2"
]}
Suchen von Ebenen, die neu geladen werden müssen
Endpunkt: /json/layersreinitrequired
Encoding: GET/POST (application/x-www-form-urlencoded)
Ermittelt die Ebenennamen, deren Quelle sich seit dem Laden geändert hat und die neu geladen werden müssen.
Zurückgegeben wird ein Dictionary mit Projekt-Name als Schlüssel und der Liste der gefundenen Ebenennamen in diesem Projekt.
Argumente:
- lookInAllProjects (false): wenn true, dann wird in allen Projekten gesucht, sonst nur im aktuellen
Beispiel-Ausgabe:
{"REF":[
"L1",
"L2"
]}
Prüfen, ob Ebene(n) vorhanden ist/sind
Endpunkt: /json/layerExists
Encoding: GET/POST (application/x-www-form-urlencoded)
Gibt in einer Bitmaske für jeden angefragten Layer zurück, ob dieser aktuell im aktiven Projekt geladen ist (0=nicht vorhanden, 1 = vorhanden)
Argumente:
- layers : Komma-getrennte Liste, der zu prüfenden Ebenen
Bsp.:
/iwan/{project}/json/layerExits?layers=A,B,C
Ausgabe:
010
Anrufen aller Quelldateien einer Ebene
Endpunkt: /json/layerSourceFiles
Encoding: GET/POST (application/x-www-form-urlencoded)
Gibt ein String-Array aller Dateinamen der Quelle zurück (absoluter Pfad).
Argumente:
- layer : Name der Ebenen
- includeTempFiles (false): auch temp. Dateien mit zurückliefern.
Anrufen der Zeichen-Statistik
Endpunkt: /json/renderstats
Encoding: GET/POST (application/x-www-form-urlencoded)
Gibt alle verfügbaren Ebenen Zeicheninformationen im aktuellen Projekt zurück, optional gefiltert auf die MapRenderId (siehe.
Antwort ist ein Array von Die Statistik pro Zeichenvorgang wird maximal nach 1 Minute lang vorgehalten.
Argumente:
- ids (): Kommagetrennte Liste der MapRenderIds aus dem aktivem Projekt (wenn leer, werden alle aktuellen Einträge geliefert)
- remove (false): die vom Abruf betroffenen Einträge löschen.
Rund um Snapshots
Erstellen / Aktualisieren
Endpunkt: /json/snapshot/create
Encoding: GET/POST (application/x-www-form-urlencoded)
Erstellt oder modifiziert die Daten eines Snapshots. Zurückgegeben wird die Beschreibung der erstellten, bzw. aktualisierten Snapshot-Ebene.
Argumente:
layer: Name der Quell-Ebene
snapshotid: Id des Snapshots, darf nicht mit dem Namen einer vorhandene Ebene kollidieren
filter: Filter, optional, als Json
mode: Einer der Werte Replace, Remove, Append
Löschen eines Snapshots
Endpunkt: /json/snapshot/snapshotDelete
Encoding: GET/POST (application/x-www-form-urlencoded)
Löscht einen Snapshot mitsamt der Daten. Die Methode hat keine Rückgabe.
Argumente:
layer: Name der Quell-Ebene
snapshotids: Ids der Snapshots, optional (Komma getrennte Liste)
byCaller: Bool, schließt sich mit snapshotids aus, wenn übergeben, dann alle Snapshots mit der callerId
Abrufen der Snapshots
Endpunkt: /json/snapshot/getid
Encoding: GET
Gibt die Snapshot-Ids für die aktuelle callerId zurück.
Karten und Symbolik
Abrufen von Kartenbildern.
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.
Argumente:
targetEpsg (0) : Zieltransformation
width: physische Breite in Pixeln
height: physische Höhe in Pixeln
scaleFactor (1.0): Auflösung
layers: Komma getrennte Liste der zu zeichnenden Ebenennamen
bbox: Komma getrennte in der Form "x,y,x,y,epsg", wenn nicht angegeben, dann wird die Ausdehnung der layers verwendet Die Bounding Box wird an das Höhen- und Breitenverhältnis der physischen Bildgröße angepasst.
RenderEngine (Agee): Gdiplus|Direct2d|Agee
IDU Intern:
In .Net gibt es eine Hilfsfunktion 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
Funktion:
- ComputeTileSetParameter: Berechnet die Parameter aller Bildkacheln
Abruf rotierter Kartenbilder:
Es können auch rotierte Kartenbilder abgerufen werden. Dies ist hier im Detail beschrieben.
Layer-spezifische Argumente
scr:{layerName}: Überschreibt die Min/Max Maßstabsbereiche (Scale-Range). Die Angabe erfolgt in der Form "min,max", wobei die Werte auch fehlen dürfen.
flt:{layerName}: Ein Filter, der für diese Ebene beim Zeichenvorgang mit übergeben werden kann. Dieser wird mit dem BBox Filter mit UND kombiniert. Es kann dabei ein Filter-JSON übergeben werden, oder ein einfache Ausdruck in der Form "Spalte = Wert". Das Json wird als solches erkannt, wenn der Text mit "{" beginnt und mit "}" endet.
Bsp. für Filter als JSON:
{ "filter": { "or": { "whereGeom": { "column": "shapegeometry", "is": "DefaultRelateT8Stars", "values": [ "SRID=25833;POLYGON((379765.36344379 5652930.59893910,379765.36344379 5663326.03478588,387714.81438545 5663326.03478588,387714.81438545 5652930.59893910,379765.36344379 5652930.59893910))" ] }, "where": { "column": "KREIS", "behavior": "CompareStringsCaseInSensitiv", "is": "Like", "values": [ "%görlitz%" ] } } } }
css:{layerName} | cssFile:{layerName}: optionaler Stile für diese Ebene, css wird gegenüber cssFile bevorzugt.
sublayers:{layerName} : Komma-getrennte Liste der darzustellenden Sublayer der Ebene
Antwort-Header
Folgende Http-Header werde im Ergebnis der Kartenanforderung mit zurückgegeben:
- IwanImageInfo - Map
- IwanImageType - Png24
- IwanImageState - <UnknownDrawState|EmptyImage|Complete|Failed|SomeErrors>, ms
- IwanImageSize - width,height,physicalWidth,0|1 (Scaled)
- IwanImageBBox - xmin,ymin,xmax,ymax,epsgCode
- IwanImageMapScale - scale
- IwanImageTimeSinceReq - {nMilliseconds)
- IwanImageRenderEngine - GdiPlus|Direct2D|Agge
Abrufen von Kartenbildern (Argumente als Json).
Endpunkt: /json/render
Encoding: POST (application/json)
Encoding: GET (mit Paramter json=..)
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.
Erwartet wird eine Anforderung als MapRenderRequest
Verhält sich sonst identisch mit render.
Abrufen von Legenden-Bildern
Endpunkt: /legend
Encoding: GET/POST (application/x-www-form-urlencoded)
Erstellt ein Legenden-Symbol aus dem übergeben Css und liefert dieses als PNG Bild zurück
Im http-Header "IwanLegImageInfo" wird leerzeichengetrennt Breite und Höhe in Pixel ausgegenen.
Argumente:
Css-Quelle, eines der Argumente
- layer : Name der Ebene, dessen Default-Css verwendet werden soll
oder ...
- cssFile : css - Dateiname (aus Serversicht)
oder ...
css: css als Text
boxWidth (35): Breite des Ausgabebild in Pixeln
boxHeight (25): Breite des Ausgabebild in Pixeln
mapScale (3000): Angenommener Maßstab
ignoreMapExcludeSetting (false): Ignoriere die Einstellung "exclude-from-map-legend" der betroffenen Blöcke.
format (Image): Ausgabeformat Image, Html oder JSON
Nur für Format "Image"
labelFontSize (14): Schriftgröße in Pixeln
labelFontName (Arial): Schriftart
Rahmen und Abstände:
verticalBorderInPixel (10)
verticalSpacingInPixel (5)
horizontalBorderInPixel (10)
horizontalSpacingInPixel (5)
Ausgabeformate:
Image: Ein Einzelbild mit allen Elementen und Labeln, immer im Format PNG
Html: Ein Html dem Template pro Eintrag:
<figure> <img height="n" width="n" src="data:image/png;base64,..."> <figcaption>Label</figcaption> </figure>
Json: Ein String-Array, 2 Array Einträge bilden jeweils einen Legendeneintrag, 1. Base64 Byte-Array mit dem PNG Bild, 2. Label
Css Validierung
Endpunkt: /json/validatecss
Encoding: GET/POST (application/x-www-form-urlencoded)
Beispiel-Ausgabe:
{
"layername":"STR",
"success":false,
"error":"Fehler im....",
"isCssError":true
}
Argumente:
css: Das Css, welches geprüft werden soll
layer: Name der Ebene die für die Validierung verwendet wird (ist erforderlich, da im css Spalten verwendet werden können etc.)
Abrufen installierter Schriftarten
Endpunkt: /json/installedFonts
Encoding: GET/POST (application/x-www-form-urlencoded)
Gibt die Namen der installierten True-Type-Fonts zurück als String-Array zurück.
Argumente:
charset (default): Zeichensatz (default, symbol)
family (""): Name der Schriftfamilie (bspw. Helvetica)
Vorschaubilder für True-Type-Marker
Endpunkt: /json/markerPreview
Encoding: GET/POST (application/x-www-form-urlencoded)
Generiert ein Bild oder ein HTML oder Json mit den Vorschaubildern für Punkte mit TrueType-Markern.
Argumente:
fontName : Name der Schriftart
startCharCode : Wert des Start-Zeichencode
endCharCode : Wert des End-Zeichencode
Weitere Parameter siehe: legend
Bsp. (mit sinnvollen/typischen Werten):
/json/markerpreview?fontName=webdings&startCharCode=33&endCharCode=255&format=html&boxheight=50&boxWidth=50
Datenabruf
Datenabruf GeoSQL
Endpunkt: /bin/query
Encoding: POST (plain/text)
Ruft einen Data-Reader als Ergebnis einer GeoSQL Abfrage ab. Der Transport erfolgt über ein sehr effizientes proprietäres Binärformat.
Beim Start der Abfrage wird unmittelbar der Http-Header x-iwan-activity-id übermittelt. Mit diesem kann der Aufrufer den Vorgang parallel zum laufendem Datenabruf abbrechen.
In der IduIT.GeoLib.Net steht über die Klasse DataSerializer eine Implementierung eines System.Data.IDataReader für Zugriff auf diese Abfragen zur Verfügung.
Argumente (POST):
- sql: Abfrage als gültiges GeoSQL
Argumente (Http-Header):
x-iwan-timeout-ms (30000): Timeout in Millisekunden
x-iwan-allowdirectsql (false): Abfrage direkt in der Datenquelle absetzen, wenn möglich.
Beispiel in Kombination mit IduIT.GeoLib.Net / c#
System.Data.IDataReader QueryIwan(string sql)
{
var resp = new IDU.Web.Http.HttpRawPostFormRequestContent("tex/plain;charset=utf-8")
{
Url = new Uri(_baseUri, "bin/query"),
RawBody = sql
}
).GetResponse();
return IduIT.GeoLib.Net.Data.DataSerializer.CreateFromStream(
resp.GetResponseStream(),
true));
}
Datenabruf (direkt)
Endpunkt: /bin/layerreader
Ruft einen Data-Reader ab. Der Transport erfolgt über ein sehr effizientes proprietäres Binärformat.
In der IduIT.GeoLib.Net steht über die Klasse DataSerializer eine Implementierung eines System.Data.IDataReader für Zugriff auf diese Abfragen zur Verfügung.
Argumente (Form/Get):
- layer: Der Name der Ebene
Argumente (Http-Header):
- x-iwan-timeout-ms (30000): Timeout in Millisekunden
Status/Konfiguration
Aktivitäts-Informationen
Endpunkt: /stat
Encoding: GET
Gibt Informationen zur Aktivität zurück (Anzahl Requests gesamt und aktuell)
{
"current":1,
"total":42,
"globalInfo":"Läuft seit %i Minuten.\r\n22ms avg...",
"totalPerEndPoint":{
"/layer/load":12,
"/stat": 10
}
}
Wobei ... current : Aktuelle Anzahl aktiver Aufrufe total : Requests gesamt totalPerEndPoint: Map mit der relativem Endpunkt-Url als Schlüssel und der Anzahl der jeweiligen Aufrufe
Argumente:
- Keine -
Laufzeit-Konfiguration
Endpunkt: /config
Encoding: GET/POST (application/x-www-form-urlencoded)
Gibt die Laufzeitkonfiguration zurück oder legt diese fest.
{
"traceLevel":"TraceError",
"renderMode":"NoParallel",
"renderEngine":"GdiPlus"
}
Argumente:
traceLevel: Einer der Werte: TraceNone, TraceWarning, TraceError, TraceInfo, TraceDebug, TraceDetail,TraceDetailEx
renderMode: Eine Kombination der Werte: NoParallel, RenderLayersParallel, UseVectorQueue,DebugRenderSkipVRendering
renderEngine: GdiPlus, Direct2d oder Agge
Bsp.:
meinServer:8287/iwan/config?traceLevel=TraceError
Projekt-Konfiguration
Endpunkt: /json/writeConfig
Encoding: POST (application/json)
Erstellt oder aktualisiert die Konfigurationsdateien im aktuellen Projekt-Kontext.
{
"workingDir":"c:\\projectFolder",
"tempDir":"c:\\tempFolder",
"allowAccessToUndefinedProjects":false
}
Abruf des Trace-Files als HTML
Endpunkt: /trace
Encoding: GET
Ruft das Trace-File als HTML Tabelle ab.
Argumente:
- rows (100): Anzahl der Zeilen
Abruf des Trace-Files als JSON
Endpunkt: json/trace
Encoding: GET
Ruft das Trace-File als JSON Array ab. 0 = Timestamp 1 = Error-Level 2 = ThreadId 3 = Message
Argumente:
- rows (100): Anzahl der Zeilen
Abruf des Größe Trace-Files
Endpunkt: /traceSize
Encoding: GET
Ruft die Dateigröße des Trace-File ab. Ist kein Tracefile vorhanden, wird ein leerer String zurückgegeben.
Argumente:
- raw (false): Als Zahlenwert ausgeben, sonst als Dateigröße formatiert (1MB)
Leeren des Trace-Files
Endpunkt: /traceTruncate
Encoding: GET
Gibt true oder eine Exception zurück. Ist kein Tracefile vorhanden, wird ein leerer String zurückgegeben.
Trace Info/Änderungen
Endpunkt: json/tracemodify
Encoding: GET
Gibt ein JSON Objekt mit ...
{
traceFileSize:number;
traceLevel:TraceNone|TraceWarning|TraceError|TraceInfo| TraceDebug|TraceDetail|TraceDetailEx;
}
zurück. Optional kann übergeben werden truncate=true|false und TraceLevel=neuerLevel
Abbruch von Einzel Aktivitäten
Endpunkt: /activities/cancel
Encoding: GET/POST (application/x-www-form-urlencoded)
Sendet ein Abbruch-Signal an die Aktivität mit der angegebenen cancelId (muss ein INT64 sein). Gibt true oder false als Text zurück.
Argumente:
- cancelId: Id-der Aktivität
Abbruch von Gruppen Aktivitäten
Endpunkt: /activities/cancelgroup
Encoding: GET/POST (application/x-www-form-urlencoded)
Sendet ein Abbruch-Signal an alle Aktivitäten-Gruppen mit der angegebenen cancelGroupToken. Gibt die Anzahl der abgebrochenen Vorgänge zurück.
Argumente:
- cancelGroupToken: Id der Aktivitätengruppe (entsprechend den im Http-Header x-iwan-activitygrouptoken übergebenem Wert bei der Anforderung)
SQL Statement als JSON
Endpunkt: /json/parseSQL
Encoding: POST
Parst das im Body übergebene SQL und gibt als JSON Array die Struktur der Abfrage zurück.
In .Net gibt es im IduIT.Core.Mapping.MapServer.Iwan7Connector
die Methode ...
Iwan7.ParsedSQL.IParsedSQLStatement[] ParseSQLQueryUsingDuckDBsParser(string sql);
... mit welcher die Information strukturiert ausgewertet werden kann.
Interaktive Formulare
Für Debug-Zwecke stehen einige einfache HTML Formulare zur Verfügung:
/ui/query : Ermöglicht das Ausführen von GeoSQL-Abfragen.
/ui/state : Auflistung der aktuellen Aktivitäten mit Möglichkeit zum Abbrechen.
/ui/load : Einfaches Formular zum Laden von Ebenen per JSON.
/ui/layers : Ausgaben einer HTML Tabelle der aktuell geladenen Ebenen mit Möglichkeit zum Entladen (mgl. Argumente: dropLayer=, clearWfsCache=1}).
/ui/dashboard : Übersicht und Einstellungen.
/ui/enc : Verschlüsselung
Formate
struct MapRenderRequest
{
public:
/// <summary>
/// Bildbreite in Pixeln
/// </summary>
uint16_t width;
/// <summary>
/// Bildhöhe in Pixeln
/// </summary>
uint16_t height;
/// <summary>
/// Skalierung (default ist 1.0)
/// </summary>
Core::Optional<double>scaleFactor;
/// <summary>
/// Vorgabe-Maßstäbe, wenn außerhalb des Bereichs (kann eigentlich nur nach "oben" passieren), dann der ermitteltet Maßstab (unter Berücksichtigung von MapScaleMultipleOf, wenn angegeben)
/// </summary>
std::unique_ptr<std::vector<double>>targetMapScales;
/// <summary>
/// Kann mit TargetMapScales kombiniert werden, oder alleine Verwendung finden, sichert zu, dass der Kartenmaßstab ein vielfaches von N ist (z.B. 1000).
/// Berücksichtigt auch MapScaleFarToNearBalance
/// </summary>
Core::Optional<uint32_t>mapScaleMultipleOf;
/// <summary>
/// Für TargetMapScales, Standardwert ist 1
/// Bei farToNearBalance=1 ist sichergestellt, dass der übergebene Extent garantiert im Kartenbild zu sehen ist
/// Bei Absenkung des Wertes, wird dann mehr und mehr ein Beschneiden zugelassen und der mehr hereingezoomte Level verwendet
/// Der Wert 0 bedeutet, dass immer der nächstniedrige Maßstab - sofern es noch einen gibt - verwendet wird.
/// </summary>
Core::Optional<double>mapScaleFarToNearBalance;
/// <summary>
/// Ziel-Epsg der Karte, wenn nicht angegeben wird die aus der BBox verwendet
/// </summary>
Core::Optional<int>targetEpsgCode;
/// <summary>
///
/// </summary>
Core::Optional<Core::Renderer::RenderEngine>renderEngine;
/// <summary>
/// Die BBox, wenn nicht angegeben, wird diese aus der Liste der zu zeichnenden Elemente ermittelt.
/// </summary>
std::unique_ptr<Core::Geometry::BBox> bbox;
/// <summary>
/// Liste der Ebenen
/// </summary>
std::vector<MapRenderLayer>layers;
/// <summary>
/// Hintergrundfarbe, kann auch TRANSPARENT sein
/// </summary>
std::unique_ptr<Core::String> backgroundColor;
};
struct MapRenderLayer
{
/// <summary>
/// Der Name der Ebene - schließt sich mit Features aus
/// </summary>
std::unique_ptr<Core::String> name;
/// <summary>
/// Features - schließt sich mit Name aus
/// </summary>
std::unique_ptr<std::vector<AdHocRenderLayerFeature>>features;
/// <summary>
/// Css, optional, sonst das der Ebene oder CssFile
/// </summary>
std::unique_ptr<Core::String> css;
/// <summary>
/// CssFile (nur, wenn CSS nicht definiert ist)
/// </summary>
std::unique_ptr<Core::String> cssFile;
/// <summary>
/// Scale-Range-Override min,max, wobei min/ max auch leer sein kann
/// </summary>
std::unique_ptr<Core::String> scr;
/// <summary>
/// Der Filter als JSON String
/// </summary>
std::unique_ptr<Core::String> flt;
/// <summary>
/// Name der Sublayer, optional
/// </summary>
std::unique_ptr<std::vector<Core::String>> subLayer;
};
struct AdHocRenderLayerFeature
{
/// <summary>
/// Die Geometrie (wird reprojeziert, wenn erforderlich)
/// </summary>
std::unique_ptr<IduIT::GeoLib::Core::Geometry::IGeometry>geom;
/// <summary>
/// Die Sachdaten (Dictionary String/Variant), kann im CSS referenziert werden
/// </summary>
std::unique_ptr<VariantMap>data;
}
Zuletzt geändert: 07.06.2024 19:59:35 (erstmals erstellt 03.06.2017) // Alias: ""