跳转到主要内容

postgis_raster

PostGIS raster types and functions

postgis : PostGIS raster types and functions

Overview

ID Extension Package Version Category License Language
1502 postgis_raster postgis 3.6.4 GIS GPL-2.0 C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-d-- No Yes No Yes no no

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT PGDG 3.6.4 18 17 16 15 14 postgis postgis
RPM PGDG 3.6.3 18 17 16 15 14 postgis36_$v -
DEB PGDG 3.6.4 18 17 16 15 14 postgresql-$v-postgis-3 -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el8.aarch64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el9.x86_64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el9.aarch64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el10.x86_64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el10.aarch64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
d12.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
d12.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
d13.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
d13.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u22.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u22.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u24.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u24.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u26.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u26.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install postgis;		# install via package name, for the active PG version
pig install postgis_raster;		# install by extension name, for the current active PG version

pig install postgis_raster -v 18;   # install for PG 18
pig install postgis_raster -v 17;   # install for PG 17
pig install postgis_raster -v 16;   # install for PG 16
pig install postgis_raster -v 15;   # install for PG 15
pig install postgis_raster -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION postgis_raster CASCADE; -- requires postgis

Usage

PostGIS Raster: Raster data support for PostGIS

PostGIS Raster extends PostGIS with support for raster (gridded) data stored directly in PostgreSQL. It enables raster analysis, raster/vector interaction, and map algebra operations within SQL.

Setup

CREATE EXTENSION postgis_raster;

Loading Raster Data

The raster2pgsql command-line tool imports raster files (GeoTIFF, etc.) into PostgreSQL:

# Load a GeoTIFF as tiled 100x100 rasters, create spatial index, use COPY
raster2pgsql -s 4326 -t 100x100 -I -C -M elevation.tif public.dem | psql mydb

# Append to existing table
raster2pgsql -s 4326 -t 100x100 -a more_data.tif public.dem | psql mydb

Key flags:

  • -s <srid> – Set the SRID
  • -t <width>x<height> – Tile the raster into chunks
  • -I – Create a spatial GiST index
  • -C – Apply raster constraints
  • -M – Vacuum analyze after loading

Querying Raster Data

Raster Metadata

-- Get raster dimensions and pixel size
SELECT rid,
    ST_Width(rast) AS width,
    ST_Height(rast) AS height,
    ST_ScaleX(rast) AS pixel_size_x,
    ST_ScaleY(rast) AS pixel_size_y,
    ST_NumBands(rast) AS bands,
    ST_SRID(rast) AS srid
FROM dem LIMIT 5;

Pixel Values

-- Get the value at a specific point
SELECT ST_Value(rast, ST_SetSRID(ST_MakePoint(-73.985, 40.748), 4326)) AS elevation
FROM dem
WHERE ST_Intersects(rast, ST_SetSRID(ST_MakePoint(-73.985, 40.748), 4326));

-- Get value at column/row position (band 1)
SELECT ST_Value(rast, 1, 10, 20) FROM dem WHERE rid = 1;

Band Statistics

SELECT (ST_SummaryStats(rast)).*
FROM dem WHERE rid = 1;
-- Returns: count, sum, mean, stddev, min, max

Raster Processing

Clipping Rasters by Vector Geometry

-- Clip raster to a polygon boundary
SELECT ST_Clip(rast, geom) AS clipped_rast
FROM dem, boundaries
WHERE ST_Intersects(rast, geom);

Map Algebra

Apply pixel-by-pixel operations:

-- Single-raster map algebra: classify elevation
SELECT ST_MapAlgebra(rast, 1, NULL,
    'CASE WHEN [rast] > 100 THEN 1 WHEN [rast] > 50 THEN 2 ELSE 3 END') AS classified
FROM dem;

-- Two-raster map algebra: difference between two DEMs
SELECT ST_MapAlgebra(a.rast, 1, b.rast, 1, '[rast1] - [rast2]') AS diff
FROM dem_old a, dem_new b
WHERE ST_Intersects(a.rast, b.rast);

Raster/Vector Interaction

-- Convert raster pixels to vector points
SELECT (ST_PixelAsPoints(rast)).*
FROM dem WHERE rid = 1;

-- Convert raster to polygons (one per unique value)
SELECT (ST_DumpAsPolygons(rast)).*
FROM dem WHERE rid = 1;

-- Intersect raster with vector and get values
SELECT p.name, ST_Value(d.rast, p.geom) AS elevation
FROM dem d, points p
WHERE ST_Intersects(d.rast, p.geom);

Resampling and Reprojection

-- Resample to a different pixel size
SELECT ST_Rescale(rast, 0.001, -0.001) FROM dem;

-- Reproject to a different SRID
SELECT ST_Transform(rast, 3857) FROM dem;

Exporting Rasters

-- Export as GeoTIFF (binary)
SELECT ST_AsTIFF(rast) FROM dem WHERE rid = 1;

-- Export as PNG
SELECT ST_AsPNG(rast) FROM dem WHERE rid = 1;

-- Export as JPEG
SELECT ST_AsJPEG(rast) FROM dem WHERE rid = 1;