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;