sql >> Database >  >> RDS >> PostgreSQL

hoe de waarde van een kolom te gebruiken als invoer voor een ruimtelijke bewerking?

Als ze in een enkele query moeten staan, hoeft u alleen de uitvoerwaarden van ST_X te gebruiken en ST_Y in de ST_MakePoint functie. Als de x- en y-waarden in kolommen staan ​​of het resultaat zijn van een bewerking, hoeft u deze waarden alleen maar door te geven in de functie:

SELECT ST_MakePoint(column_x,column_y) FROM t;

Of in het geval dat ze binnen geometrieën zijn..

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

Een CTE gebruiken of een subquery (zie opmerkingen). Het principe is vergelijkbaar, maar met een CTE maak je een soort tijdelijke set en gebruik je deze als een tabel. Het volgende voorbeeld genereert x- en y-waarden en noem deze j , dan vang je in de buitenste query deze waarden om een ​​punt te maken met een andere SELECT , maar deze keer met j :

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

Toepassen op uw vraag ..

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                  

Een paar gedachten over uw vraag (zonder het grote geheel te kunnen zien):

  • ST_AsText absoluut geen zin in je vraag. Je kunt er vanaf komen.
  • Houd er rekening mee dat de code die u gebruikt om de x- en y-coördinaten te extraheren identiek zijn, en ST_DumpPoints levert al punten op. Dus ik denk dat je logica gebrekkig is, omdat je hetzelfde punt opnieuw maakt dat je eerder in afzonderlijke waarden had opgesplitst.



  1. kreeg mysql-fout tijdens het maken van trigger

  2. Hoe .pdf-bestanden in MySQL op te slaan als BLOB's met PHP?

  3. Hoe vind je het verschil tussen twee tabellen?

  4. Hoe los ik InnoDB-corruptie op die een tabelnaam vergrendelt bij het maken (errno:-1) op AWS RDS?