Beispiel Datenabruf via GeoSQL, einsetzten als VALUES in PostgreSQL als JOIN
{{##~~
{
htmlDescription: "Darstellung JOIN zwischen DB und GeoSQL",
formats:["NativeCardoType"]
}
~~##}}
{{
BO.StringContentInterpretation = "None"
# Zugriff auf eine Datenbank
# das in diesme Beispiel verwendetet VALUES (siehe unten ist PostgreSQL spezifisch!
$pgDb = BO.DbSQL("CA_ANYSOURCE");
# Abfrage an Iwan7 via GeoSQL
# Hier kommen u.a. Geometrien heraus, das fiktive Ziel: mit diesen
# in der PG-Datenbank einen JOIN durchführen
$geoSql = BO.GeoSQL();
# ... dort 2 Spalten aus der Ebene L23 abfragen, String + Geom
# Beachte, die gleiche EPSG wie in der Tabelle, wo es dann eingesetzt wird
$reader = $geoSql.ExecuteAsTable(sql:"
SELECT
gml_identifier,
ST_Transform(geom,25832) geom
FROM
L23
LIMIT 10");
# Aus dem Reader die Zeilen als Array[] zurückgeben lassen
# 0 = Inhalt der Spalte gml_identifiert, 1 = Inhalt der Spalte geom
$dataArray = $reader.ColumnsData(["gml_identifier","geom"])
# Daraus machen wir jetzt PostgreSQL VALUES
$list = [];
for $row in $dataArray
# hier mit AddParam hantieren
# Beachte: es gibt Limits für Anzahl der Parameter, bei PG: 65535
$list[$list.size] = $"({$pgDb.AddParam($row[0])},{$pgDb.AddParamGeom($row[1])})";
end
# Das als SQL Fragment zusammenbauen
# das entspricht einer Tabelle
$valuesTablesFragment = $"(VALUES {$list | array.join ","}) as pseudoTable(id,geom)"
############################################################
# Ergebnis Abfrage, die direkt in der PG DB ausgeführt wird
# die per GeoSQL beschafften Geometrien als JOIN Quelle mit
# anfügen
############################################################
$sql = $"SELECT
bodenrichtwerte.id,
pseudoTable.id
FROM
bodenrichtwerte
JOIN
{$valuesTablesFragment} on ST_Intersects(pseudoTable.geom,bodenrichtwerte.shapeGeometry)
"
# Fertig, Ergebnis abrufen und als Cardo Datentabelle ausgeben
$pgDb.ExecuteStoreResult($sql);
}}
Zuletzt geändert: 06.02.2026 17:21:10 (erstmals erstellt 09.02.2026) // Alias: ""