Jika mereka harus berada dalam satu kueri, Anda hanya perlu menggunakan nilai keluaran ST_X
dan ST_Y
di ST_MakePoint
fungsi. Jika nilai x dan y ada dalam kolom atau merupakan hasil operasi, Anda hanya perlu meneruskan nilai ini ke dalam fungsi:
SELECT ST_MakePoint(column_x,column_y) FROM t;
Atau jika mereka berada di dalam geometri..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Menggunakan CTE
atau subquery (Lihat komentar). Prinsipnya serupa, tetapi menggunakan CTE Anda semacam membuat set sementara dan menggunakannya sebagai tabel. Contoh berikut menghasilkan nilai x dan y dan beri nama j
, lalu di kueri luar Anda menangkap nilai-nilai ini untuk membuat titik dengan SELECT
. yang lain , tapi kali ini menggunakan j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Menerapkannya ke kueri Anda ..
Demo (subquery):db<>fiddle
Demo (CTE):db<>fiddle
WITH j AS (
SELECT
ST_X((ST_DumpPoints(ST_AsText(ST_Intersection(
ST_SetSRID(
ST_MakeEnvelope(
ST_X(point),
ST_Y(point),
ST_X(point)+{width},
ST_Y(point)+{height}),
25832),ST_Buffer(j.geometry, {bufferRadius})
)))).geom) AS XOfLowerLeftOfGridCellIntersectingWithBuffer,
ST_Y((ST_DumpPoints(ST_AsText(ST_Intersection(
ST_SetSRID(
ST_MakeEnvelope(
ST_X(point),
ST_Y(point),
ST_X(point)+{width},
ST_Y(point)+{height}),
25832),ST_Buffer(j.geometry, {bufferRadius})
)))).geom) AS YOfLowerLeftOfGridCellIntersectingWithBuffer,
....
)
SELECT ST_MakePoint(XOfLowerLeftOfGridCellIntersectingWithBuffer,
YOfLowerLeftOfGridCellIntersectingWithBuffer)
FROM j
Beberapa pemikiran tentang kueri Anda (tanpa dapat melihat gambaran besarnya):
ST_AsText
pasti tidak masuk akal dalam permintaan Anda. Anda bisa menyingkirkannya.- Perhatikan bahwa kode yang Anda gunakan untuk mengekstrak koordinat x dan y adalah identik, dan
ST_DumpPoints
sudah mengembalikan poin. Jadi, saya yakin logika Anda salah, karena Anda membuat ulang titik yang sama yang sebelumnya Anda bagi menjadi nilai yang terpisah.