PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

cara menggunakan nilai kolom sebagai input untuk operasi spasial

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KESALAHAN:string kutipan yang tidak diakhiri pada atau di dekat

  2. Komit PostgreSQL Sqlalchemy membutuhkan banyak waktu

  3. Postgresql:menghapus spasi di antara jenis digit tertentu

  4. Alat ETL Terbaik untuk Bermigrasi ke PostgreSQL

  5. Cara mendapatkan elemen dari array Json di PostgreSQL