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