Name

ST_Intersection — Returnerar ett raster eller en uppsättning geometri-pixelvärdespar som representerar den delade delen av två raster eller den geometriska skärningspunkten mellan en vektorisering av rastret och en geometri.

Synopsis

setof geomval ST_Intersection(geometry geom, raster rast, integer band_num=1);

setof geomval ST_Intersection(raster rast, geometry geom);

setof geomval ST_Intersection(raster rast, integer band, geometry geomin);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, text returnband, double precision[] nodataval);

Beskrivning

Returnerar ett raster eller en uppsättning geometri-pixelvärdespar som representerar den delade delen av två raster eller den geometriska skärningspunkten mellan en vektorisering av rastret och en geometri.

De tre första varianterna, som returnerar en uppsättning geomval, fungerar i vektorrymd. Rastret vektoriseras först (med hjälp av ST_DumpAsPolygons) till en uppsättning geomval-rader och dessa rader korsas sedan med geometrin med hjälp av PostGIS-funktionen ST_Intersection (geometry, geometry). Geometrier som endast skär ett noddatavärdesområde i ett raster returnerar en tom geometri. De utesluts normalt från resultaten genom korrekt användning av ST_Intersects i WHERE-satsen.

Du kan komma åt geometri- och värdedelarna i den resulterande uppsättningen geomval genom att omge dem med parenteser och lägga till '.geom' eller '.val' i slutet av uttrycket. t.ex. (ST_Intersection(rast, geom)).geom

De andra varianterna, som returnerar ett raster, fungerar i rasterutrymme. De använder två raster-versionen av ST_MapAlgebraExpr för att utföra korsningen.

Det resulterande rastrets utsträckning motsvarar den geometriska skärningspunkten mellan de två rasterutsträckningarna. Det resulterande rastret innehåller "BAND1", "BAND2" eller "BOTH" band, enligt vad som skickas som returbandparameter. Nodatavärdesområden som finns i något band resulterar i nodatavärdesområden i alla band i resultatet. Med andra ord blir varje pixel som korsas av en nodatavärdespixel en nodatavärdespixel i resultatet.

Raster som blir resultatet av ST_Intersection måste ha ett nodatavärde tilldelat för områden som inte korsar varandra. Du kan definiera eller ersätta nodata-värdet för alla resulterande band genom att tillhandahålla en nodataval[] -array med ett eller två nodata-värden beroende på om du begär "BAND1"-, "BAND2"- eller "BÅDA"-band. Det första värdet i matrisen ersätter nodatavärdet i det första bandet och det andra värdet ersätter nodatavärdet i det andra bandet. Om ett inmatningsband inte har något nodatavärde definierat och inga sådana tillhandahålls som en matris, väljs ett med hjälp av funktionen ST_MinPossibleValue. Alla varianter som accepterar en matris av nodatavärden kan också acceptera ett enda värde som kommer att tilldelas varje efterfrågat band.

I alla varianter, om inget bandnummer anges, antas band 1. Om du behöver en skärningspunkt mellan ett raster och en geometri som returnerar ett raster, se ST_Clip.

[Note]

För att få mer kontroll över den resulterande omfattningen eller vad som ska returneras när du stöter på ett nodata-värde, använd två raster-versionen av ST_MapAlgebraExpr.

[Note]

Använd ST_Clip för att beräkna skärningen mellan ett rasterband och en geometri i rasterrymd. ST_Clip fungerar på raster med flera band och returnerar inte ett band som motsvarar den rastrerade geometrin.

[Note]

ST_Intersection bör användas tillsammans med ST_Intersects och ett index på rasterkolumnen och/eller geometrikolumnen.

Förbättrad: 2.0.0 - Intersektion i rasterrymden infördes. I tidigare versioner före 2.0.0 stöddes endast intersektion som utfördes i vektorrymd.

Exempel på detta: Geometri, Raster -- resulterar i geometri vals

SELECT
    foo.rid,
    foo.gid,
    ST_AsText((foo.geomval).geom) As geomwkt,
    (foo.geomval).val
FROM (
    SELECT
        A.rid,
        g.gid,
        ST_Intersection(A.rast, g.geom) As geomval
    FROM dummy_rast AS A
    CROSS JOIN (
        VALUES
            (1, ST_Point(3427928, 5793243.85) ),
            (2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')),
            (3, ST_GeomFromText('LINESTRING(1 2, 3 4)'))
    ) As g(gid,geom)
    WHERE A.rid = 2
) As foo;

 rid | gid |      geomwkt                                               | val
-----+-----+---------------------------------------------------------------------------------------------
   2 |   1 | POINT(3427928 5793243.85)                                  | 249
   2 |   1 | POINT(3427928 5793243.85)                                  | 253
   2 |   2 | POINT(3427927.85 5793243.75)                               | 254
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 251
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 253
   2 |   2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8)   | 252
   2 |   2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250
   2 |   3 | GEOMETRYCOLLECTION EMPTY