-
Notifications
You must be signed in to change notification settings - Fork 5
Creating Triggers for the Geocoder
Mario Basa edited this page Apr 27, 2022
·
2 revisions
The following are the steps that can be taken to automatically geocode an address in a table on each INSERT
and/or UPDATE
action.
CREATE OR REPLACE FUNCTION geocder_trigger_func()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
BEGIN
IF NEW.address IS NOT NULL AND NEW.address <> '' THEN
NEW.gc = geocoder(NEW.address);
END IF;
RETURN NEW;
END;
$$
CREATE TABLE trigtable (id SERIAL,address TEXT,gc GEORES);
CREATE TRIGGER trigtable_trigger1
BEFORE INSERT OR UPDATE
ON trigtable
FOR EACH ROW
EXECUTE PROCEDURE geocder_trigger_func();
The table definition will be like this:
Table "public.trigtable"
Column | Type | Collation | Nullable | Default
---------+---------+-----------+----------+---------------------------------------
id | integer | | not null | nextval('trigtable_id_seq'::regclass)
address | text | | |
gc | geores | | |
Triggers:
trigtable_trigger1 BEFORE INSERT OR UPDATE ON trigtable FOR EACH ROW EXECUTE FUNCTION geocder_trigger_func()
INSERT INTO trigtable (address) VALUES
('京都府京都市上京区御前通今出川上ル馬喰町885'),
('京都府京都市中京区二条通富小路東入晴明町673-2'),
('京都府京都市中京区河原町蛸薬師東側塩屋町324古城ビル地下1F'),
('京都府京都市中京区御池通寺町東入下本能寺前町492番地1他'),
('京都府京都市上京区今出川通六軒町西入西上善寺町207-6');
Display the inserted data:
select id,address from trigtable;
id | address
----+----------------------------------------------------------------
1 | 京都府京都市上京区御前通今出川上ル馬喰町885
2 | 京都府京都市中京区二条通富小路東入晴明町673-2
3 | 京都府京都市中京区河原町蛸薬師東側塩屋町324古城ビル地下1F
4 | 京都府京都市中京区御池通寺町東入下本能寺前町492番地1他
5 | 京都府京都市上京区今出川通六軒町西入西上善寺町207-6
(5 rows)
Display the Geocoder Data:
select (gc).code,(gc).todofuken,(gc).shikuchoson,
(gc).ooaza,(gc).chiban,(gc).x,(gc).y from trigtable;
code | todofuken | shikuchoson | ooaza | chiban | x | y
------+-----------+--------------+--------------+--------+------------+-----------
2 | 京都府 | 京都市上京区 | 馬喰町 | 885 | 135.736477 | 35.030054
2 | 京都府 | 京都市中京区 | 晴明町 | 673 | 135.765329 | 35.013509
2 | 京都府 | 京都市中京区 | 塩屋町 | 324 | 135.769512 | 35.005731
2 | 京都府 | 京都市中京区 | 下本能寺前町 | 492 | 135.767985 | 35.010143
2 | 京都府 | 京都市上京区 | 西上善寺町 | 207 | 135.740488 | 35.029396
(5 rows)
update trigtable set address = '北海道札幌市白石区東札幌五条5-4-30-2' where id = 5;
Display the updated data:
select id,address from trigtable;
id | address
----+----------------------------------------------------------------
1 | 京都府京都市上京区御前通今出川上ル馬喰町885
2 | 京都府京都市中京区二条通富小路東入晴明町673-2
3 | 京都府京都市中京区河原町蛸薬師東側塩屋町324古城ビル地下1F
4 | 京都府京都市中京区御池通寺町東入下本能寺前町492番地1他
5 | 北海道札幌市白石区東札幌五条5-4-30-2
(5 rows)
Display the Geocoder Data:
select (gc).code,(gc).todofuken,(gc).shikuchoson,
(gc).ooaza,(gc).chiban,(gc).x,(gc).y from trigtable;
code | todofuken | shikuchoson | ooaza | chiban | x | y
------+-----------+--------------+------------------+--------+------------+-----------
2 | 京都府 | 京都市上京区 | 馬喰町 | 885 | 135.736477 | 35.030054
2 | 京都府 | 京都市中京区 | 晴明町 | 673 | 135.765329 | 35.013509
2 | 京都府 | 京都市中京区 | 塩屋町 | 324 | 135.769512 | 35.005731
2 | 京都府 | 京都市中京区 | 下本能寺前町 | 492 | 135.767985 | 35.010143
2 | 北海道 | 札幌市白石区 | 東札幌五条五丁目 | 4 | 141.395119 | 43.049696
(5 rows)