GeoExtension (uxGeo)
LoadLayerInIwan7
uxGeo.LoadLayerInIwan7(typeName:string,layerName:String,conflictHandling:LayerNameConflictHandling,args:IDicionary<string>,throwOnError?:boolean=true ): bool
Lädt eine Ebene in Iwan7. Die Argumente entsprechen den Iwan7 Ebenentypen.
Die Ebene kann dann bspw. in GetMapImage verwendet werden.
Beispiel
uxGeo.LoadLayerInIwan7(typeName:"WMTS", layerName:"WebAtlasSn", conflictHandling:"ReplaceIfArgumentsChanged", args:{
url:"https://geodienste.sachsen.de/wmts_geosn_webatlas-sn/guest"
}) ;
GetGeoSQLDataReaderResult
uxGeo.GetGeoSQLDataReaderResult(sql:string): TableSnapshotResult
Diese Methode ruft einen DataReader per GeoSql ab und liest alle Zeilen in eine Liste ein.
Beispiel:
table = uxGeo.GetGeoSQLDataReaderResult sql:"SELECT * FROM L1"
In der cardo Umgebung werden die Ebenen bei Bedarf adHoc in Iwan7 geladen, beachten Sie, dass der Ebenentyp in Iwan7 unterstüzt wird.
Der Zugriff auf die Daten des Rückgabewerts erfolgt per Zeilenindex und Spaltenname. Alternativ kann das Ergebnis auch in einer Schleife abgerufen werden.
Beispiel:
{{
table = uxGeo.GetGeoSQLDataReaderResult sql:"SELECT * FROM L1"
}}
<b>Wert:</b>{{table.Rows[0]["Spalte1"]}}
{{
}}
Abrufe aller Zeilen:
{{
# Die Abfrage zusammenstellen
sql="SELECT
ST_INTERSECTION(PrimaryGeometry, OtherGeom) ins,
*
FROM
L1
WHERE ST_INTERSECTS(PrimaryGeometry, OtherGeom)
AND ST_Area(ins) > 100
";
# Die Tabellendaten mit Parameter sql -->
table = uxGeo.GetGeoSQLDataReaderResult sql:sql
# Ein Array um ein paar Zeilendaten zu sammeln
geomArray = []
# Schleife über alle Tabellenzeilen
for row in table.Rows
rowNum = for.index;
# das Array füllen
geomArray = geomArray | array.add {
geom: row['ins'].ExtendedWellknownText,
data: {
sequenceNumber: rowNum,
title: row['surname'] + row['lastname']
}
};
end;
}}
GeometryFromString
GeometryFromString(anyGeom:string) => IduIT.GeoLib.Net.Geometry
Diese Methode wandelt einen Geometrie-String (bspw. EWKT) in eine Geometrie zur Weiterverarbeitung um. Damit lassen sich dann die weiteren Eigenschaften der Geometrie nutzen, bzw. kann dies als Argument für Funktionen verwendet werden die ein Geometrie-Objekt voraussetzen.
Beispiel:
{{
geom = uxGeo.GeometryFromString data : 'SRID:4326;POINT(13.0 51.0)'
}}
Die Bounding-Box der Geometrie ist: {{geom.Envelope}}
BoundingBoxFromGeom
Diese Methode konvertiert serverseitig eine Geometrie in eine BBox in Json-Struktur.
type TBBox = {minx: double, miny: double, maxx: double, maxy: double, epsgCode: int};
uxGeo.BoundingBoxFromGeom(geom:IduIT.GeoLib.Net.Geometry) => TBBox;
BoundingBoxFromFeatureLayerFeatures
Diese Methode ermittelt aus einer Liste übergebener Geometrien im Format Iwan7RenderAdHocEl (welches auch im RenderMapImage zur Angabe von AdHocFeatures erwartet wird) die max. BoundingBox aller Geometrien.
type TBBox = {minx: double, miny: double, maxx: double, maxy: double, epsgCode: int};
uxGeo.BoundingBoxFromGeom(features:IList<Core.Mapping.MapServer.Iwan7.JsonTypes.JsonRenderArgs.Iwan7RenderAdHocEl>) => TBBox;
RenderMapImage
Diese Methode erstellt ein Kartenbild. Es können zusätzliche FeatureLayer hinzugefügt werden.
type TMapImageInfo = {ImageBytes:byte[],MapScale:double,...};
type TRenderArguments = {};
uxGeo.RenderMapImage(args:TRenderArguments) => TMapImageInfo
Für die weitere Verwendung wird MapImageInfo.ImageBytes : Byte[] genutzt.
TRenderArguments
Die Beschreibung der Argumente finden Sie im Bereich der Iwan7 Dokumentation- TRenderArguments = MapRenderRequest
targetEpsgCode: int
- Ziel-Epsg, wenn 0, dann wir die der BBox verwendet
width: int
- Bildbreite in Pixeln
height: int
- Bildhöhe in Pixeln
scaleFactor: double
- Die Skalierung der Objekte unter Beachtung des Maßstabs, Standard ist 1.0
- Mit diesem Parameter kann die Auflösung (Resolution) des Bildes erhöht werden, wenn die Ausgabegröße des Bildes dann um den selben Faktor geändert wird.
- Bsp:
- Ziel: Ausgabe Bild 500x500 aber mit doppelter Auflösung
- Parameter einstellen:: width: 1000, height: 1000, scaleFactor: 2
- Ausgabe 'runterscalieren':
<img style="width:500px; height:500px;" src="..." />
targetMapScales: double[]
- Mögliche Kartenmaßstäbe
- der Maßstab mit der geringsten Abweichung zum Istwert (welcher sich aus der BBOX ergibt) wird verwendet
backgroundColor: string
- die Hintergrundfarbe, Standard ist Weiß
- die Syntax entspricht den Farbangaben wie sie bei der Css-Symbolik verwendet wird
bbox: {minx : double, miny : double, maxx : double, maxy : double, epsgCode : int}
- Bounding Box der Kartenanforderung, wenn nicht angegeben die Ausdehnung der zu zeichnenden Ebenen
layers: Iwan7RenderLayer[] - MapRenderLayer
die Liste zu zeichnender Ebenen
Beispiel:
[ {name: "L123"}, { features: [{ geom: geometryObject, data: { title: "GeometrieTitel", sequenceNumber: 1 } }] } ]Iwan7RenderLayer
Wichtige Eigenschaften
- name : string
- Name der Ebene, schließt sich mit "features" aus
- features: Iwan7RenderAdHocEl[]
- Ad-Hoc Features für die Darstellung zusätzlicher Geometrien, schließt sich mit "name" aus
- css: string
- die css Formatierung für die Ebene, siehe Css für Vektordaten
- cssFile : string
- die Pfadangabe zu einer Datei mit css Inhalten, schließt sich mit css aus
- scr : string
- ScaleRangeOverride - Überschreibt den Sichtbarkeitsmaßstab, Möglich ist die Angabe "min, max" oder ",max" und "min,"
Iwan7RenderAdHocEl - AdHocRenderLayerFeature
Eigenschaften
- geom : string
- die serialisierte Geometrie, als WKT
- data : {name : value,...}[]
- Zusatzdaten auf welche man dann zB. per CSS wieder zugreifen kann um diese in der Karte darzustellen
- name : string
TMapImageInfo
BBox: IduIT.GeoLib.Net.Box
- resultierende BBox
MapRenderId: long
MapScale: long
- der resultierende Maßstab
DurationMs: double
PrepareDurationMs: double
RenderDurationMs: double
CompressionDurationMs: double
- verschieden Zeitangaben zur Verarbeitungszeit
RenderEngine: string
ImageBytes: Byte[]
- das Bild als Bytes-Array
Beispiel:
{{
# hier wird dass CSS für die features des Ad-Hoc-Layers erstellt
featureCss = '
ordered {
polygon {
render-quality: antialiased;
fill-color: black(0.1);
fill-pattern: solid;
border-line:
{
line-dash-style: dash;
render-quality: antialiased;
line-width: 2m;
line-min-width: 4;
line-max-width: 3;
line-color: Red(1.0);
line-join: round;
line-cap: round;
};
}
}'
# hier wird die BoundingBox einer Geometrie ermittelt
bbox = uxGeo.BoundingBoxFromGeom (uxGeo.GeometryFromString testGeomWkt) buffer:100;
# Kartenbild erstellen
mapImage = uxGeo.RenderMapImage {
width: 1000,
height: 1000,
backgroundColor: 'white(0)',
layers:[
# "Normale" Ebene mit Namen
{name: "L227"},
# AdHoc-FeatureLayer --> Hier wird die Geometrie des Dokuments dargestellt
{
#die einzelnen Verschnittgeometrien
features: geomArray,
css: featureCss
}],
bbox:bbox,
targetMapScales:[1000,2000,3000,5000,10000]
};
Ebene filtern
Beispiel - Ebene filtern auf Objekte, die sich mit der Geometrie des Bussiness-Objektes schneiden:
mapImage = uxGeo.RenderMapImage {
...
layers: [
{
name: "L123",
flt: $"ST_Intersects(GEOM, \"{BO.Geom.ExtendedWellknownText}\")",
}
],
...
};
Unterscheidung der Geometrie-Typen
Soll im Scriban nach dem Geometrietyp unterschieden werden, z.B. um unterschiedlich zu puffern, kann das wie in folgendem Beispiel erfolgen:
geomObject = uxGeo.GeometryFromString bauvorhabenGeom;
case geomObject.GeometryType
when 1, 2, 5, 6, 7 #Point, Multipoint, Line, Multiline, GeometryCollection?
bauvorhabenGeomForIntersect = (geomObject.ST_Buffer(15)).ExtendedWellknownText;
end;
Folgende Geometrietypen gibt es:
public enum DetailTypeType
{
NullGeometry = 0,
Point = 1,
Multipoint = 2,
Polygon = 3,
MultiPolygon = 4,
Linestring = 5,
MultiLinestring = 6,
GeometryCollection = 7
}
Zuletzt geändert: 30.04.2025 13:42:06 (erstmals erstellt 02.05.2025) // Alias: ""