sql >> Databáze >  >> RDS >> PostgreSQL

jak použít hodnotu sloupce jako vstup do prostorové operace

Pokud musí být v jediném dotazu, stačí použít výstupní hodnoty ST_X a ST_Y v ST_MakePoint funkce. Pokud jsou hodnoty x a y ve sloupcích nebo jsou výsledkem operace, stačí tyto hodnoty předat do funkce:

SELECT ST_MakePoint(column_x,column_y) FROM t;

Nebo v případě, že jsou uvnitř geometrie..

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

Pomocí CTE nebo poddotaz (viz komentáře). Princip je podobný, ale pomocí CTE vytvoříte dočasnou sadu a použijete ji jako tabulku. Následující příklad vygeneruje hodnoty x a y a pojmenuje je j , pak ve vnějším dotazu zachytíte tyto hodnoty a vytvoříte bod s dalším SELECT , ale tentokrát pomocí j :

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

Použití na váš dotaz ..

Demo (poddotaz):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                  

Několik myšlenek k vašemu dotazu (aniž byste byli schopni vidět celkový obrázek):

  • ST_AsText Váš dotaz rozhodně nemá smysl. Můžete se toho zbavit.
  • Všimněte si, že kód, který používáte k extrakci souřadnic x a y, je identický a ST_DumpPoints už vrací body. Domnívám se tedy, že vaše logika je chybná, protože znovu vytváříte stejný bod, který jste dříve rozdělili na oddělené hodnoty.



  1. PHP If else prohlášení, že databázový záznam je prázdný, zobrazí výchozí obrázek

  2. Zablokování v PostgreSQL při spuštění UPDATE

  3. PostgreSQL Composite primární klíč a sériový přírůstek?

  4. WordPress objednejte příspěvky podle 2 vlastních polí najednou