Skip to content

PostGIS

Init

sql
CREATE EXTENSION postgis;

SQL

Add GEOM column

sql
-- use `ST_GeomFromText` for `WKT`
ALTER TABLE province ADD COLUMN geom geometry(Point, 4326);

UPDATE province
SET geom = ST_SetSRID(
    ST_MakePoint(
        cast(longitude AS DOUBLE PRECISION),
        cast(latitude AS DOUBLE PRECISION)
        ),
    4326)
WHERE latitude IS NOT NULL AND longitude IS NOT NULL;

Cast projection unit to meter

sql
ST_Distance(
    geom::geography,
    ST_MakePoint(longitude,latitude)::geography) <= 3000

Find polygon from point

sql
-- single point
ST_DWithin(ST_SetSRID(ST_POINT(longitude,latitude),4326)::geography, geom,0)

 against another table
SELECT *
FROM a JOIN b
ON ST_WITHIN(points.geom, boundary.geom)
LIMIT 10;

Find distance betwee x & y

sql
-- unit depends on projection
ST_Distance(
    the_geom::geography,
    ST_MakePoint(longitude,latitude)::geography)
AS distance_from_holy_land

Count points in polygon

sql
SELECT boundary.gid, count(points.geom) AS totale
FROM boundary LEFT JOIN points
ON ST_CONTAINS(boundary.geom,points.geom)
GROUP BY boundary.gid;