PostgreSQL Always功能使用

1
分享 2023-12-28

背景
有些弱gis项目,比如通讯行业,大部分都是采集的poi点,比如基站或者信令数据,录入数据的应用都是用的X,Y坐标,那如何再不改变应用的情况下,可以在一些GIS软件是展示这些数据,毕竟很多的GIS软件并不支持直接显示X,Y坐标
解决方法
可以通过在表中添加一个类型为geometry的字段,然后利用PG的Generate Always功能自动更新该类型的值
步骤
create table testg (id serial primary key ,x double precision,y double precision, geom geometry(point,4326) generated always as ST_SetSRID(ST_MakePoint(x,y),4326) stored);
insert into testg (x,y) values (12.34,34.3);
insert into testg (x,y) values (23.34,44.3);
select geom from testg;
geom
----------------------------------------------------
0101000020E6100000AE47E17A14AE28406666666666264140
0101000020E6100000D7A3703D0A5737406666666666264640
(2 行记录)

select st_asewkt(geom) from testg;
st_asewkt
-----------------------------
SRID=4326;POINT(12.34 34.3)
SRID=4326;POINT(23.34 44.3)

create index on testg using gist(geom);
CREATE INDEX

\d testg
数据表 "sde.testg"
栏位 | 类型 | 校对规则 | 可空的 | 预设
------+----------------------+----------+----------+-------------------------------------------------------------------
id | integer | | not null | nextval('testg_id_seq'::regclass)
x | double precision | | |
y | double precision | | |
geom | geometry(Point,4326) | | | generated always as (st_setsrid(st_makepoint(x, y), 4326)) stored
索引:
"testg_pkey" PRIMARY KEY, btree (id)
"testg_geom_idx" gist (geom)
使用GeoScene Desktop展示如下

1.png

 

0 个评论

要回复文章请先登录注册