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
      • 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
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: ""