PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

cách sử dụng giá trị của một cột làm đầu vào cho một hoạt động không gian

Nếu chúng phải nằm trong một truy vấn, bạn chỉ cần sử dụng các giá trị đầu ra của ST_XST_Y trong ST_MakePoint hàm số. Nếu các giá trị x và y nằm trong cột hoặc là kết quả của một phép toán, bạn chỉ cần chuyển các giá trị này vào hàm:

SELECT ST_MakePoint(column_x,column_y) FROM t;

Hoặc trong trường hợp chúng nằm bên trong các hình học ..

SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;

Sử dụng CTE hoặc một truy vấn con (Xem nhận xét). Nguyên tắc tương tự, nhưng sử dụng CTE, bạn sắp xếp tạo một tập hợp tạm thời và sử dụng nó như một bảng. Ví dụ sau tạo các giá trị x và y và đặt tên là j , sau đó trong truy vấn bên ngoài, bạn bắt các giá trị này để tạo một điểm với SELECT khác , nhưng lần này sử dụng j :

WITH j AS (
  SELECT 1 AS X, 2 AS y -- your big query goes here
) 
SELECT ST_MakePoint(X,Y) FROM j;

Áp dụng nó vào truy vấn của bạn ..

Demo (truy vấn con): 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                  

Một vài suy nghĩ về truy vấn của bạn (mà không thể nhìn thấy bức tranh toàn cảnh):

  • ST_AsText chắc chắn không có ý nghĩa trong truy vấn của bạn. Bạn có thể loại bỏ nó.
  • Lưu ý rằng mã bạn đang sử dụng để trích xuất các tọa độ x và y là giống hệt nhau và ST_DumpPoints đã trả lại điểm. Vì vậy, tôi tin rằng logic của bạn còn thiếu sót, vì bạn đang tạo lại chính điểm mà trước đó bạn đã chia thành các giá trị riêng biệt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách được khuyến nghị nhất để lưu trữ thời gian trong PostgreSQL bằng Java là gì?

  2. Làm cách nào để viết một truy vấn Django tính toán ngày tháng khi được thực thi dưới dạng PostGres SQL?

  3. Amazon Aurora PostgreSQL CHỌN VÀO OUTFILE S3

  4. DictCursor dường như không hoạt động dưới psycopg2

  5. Sử dụng CASE trong PostgreSQL để ảnh hưởng đến nhiều cột cùng một lúc