PostGIS 基本教學

Howard Hwang
Dec 16, 2022

--

建立一個 sequence:

CREATE SEQUENCE demo_id_seq;

建立一個 demo 表格,並讓 id 隨著剛剛的 sequence 自動增加、還有一個 name 欄位:

CREATE TABLE demo ( id INTEGER PRIMARY KEY DEFAULT nextval('demo_id_seq'), name VARCHAR(40) );

增加 location 欄位,使用 4326 的 SRID:

SELECT AddGeometryColumn('demo', 'location', 4326, 'POINT', 2);

建立索引:

CREATE INDEX demo_location_idx on demo using GIST (location);

新增點位:

ST_GeomFromText 的函式,他可以把文字轉成座標。

另外因為我們使用經緯度,所以使用 4326 這個 SRID。

# 101 座標
INSERT INTO demo(name, location) VALUES ('Taipei 101', ST_GeomFromText('POINT(121.5646380 25.0339138)', 4326));

# ntust 台科座標
INSERT INTO demo(name, location) VALUES ('ntust', ST_GeomFromText('POINT(121.5394628 25.0130727)', 4326));

資料查詢

# 查詢兩點距離
SELECT ST_Distance( ST_Transform((SELECT location FROM demo WHERE name='Taipei 101'), 900913), ST_Transform((SELECT location FROM demo WHERE name='ntust'), 900913) )as distance;

#查詢和臺北101相距 4000 公尺內的點(排除掉自己)
SELECT * FROM demo WHERE ST_Distance( ST_Transform(location, 900913), ST_Transform((SELECT location FROM demo WHERE name='Taipei 101'), 900913) ) < 4000 and name<>'Taipei 101';

--

--

Howard Hwang
Howard Hwang

No responses yet