postgis sql语句备忘

创建触发器,在更新或新增前取geom多边形中心点存入xy字段

CREATE OR REPLACE FUNCTION update_xy_on_insert_block()
RETURNS TRIGGER AS $$
BEGIN
    NEW.lat := st_y(st_centroid(NEW.geom));
    NEW.lng := st_x(st_centroid(NEW.geom));
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_xy_on_block
BEFORE INSERT OR UPDATE ON block_info
FOR EACH ROW
EXECUTE FUNCTION update_xy_on_insert_block();

更新geom字段的空间参考

– 先更新geom字段srid
SELECT UpdateGeometrySRID(‘land_change’,‘geom’,3857);
– 检查一下
select st_srid(geom) from xzqh_shi_qd limit 1;
– 更新字段
update land_change set geom = st_transform(ST_SetSRID(geom,4326),3857);
–没有就设置
select st_setsrid(geom,3857) from corn;

新增geom字段

SELECT AddGeometryColumn ('public','data_result_geom', 'geom', 3857, 'MultiPolygon', 2,false);

距离点最近的道路

-- The nearest road
with input as (select st_transform(ST_Buffer('SRID=3857;POINT(8193767.174781749 4786678.39110056)', 49918),4326) as i_geom)
SELECT id, name,ST_Distance(
    geom::geography,
    input_geom::geography
    ) as distance
FROM (
  SELECT
    road.id,
    road.name,
    road.geom,
    input.i_geom as input_geom
  FROM
    tb_base_road_high_china road,input
  ORDER BY
    road.geom <#>
    input.i_geom
  LIMIT 10
) as closest_candidates
ORDER BY
  ST_Distance(
    geom,
    input_geom
    );

距离点最近的点

with input as (select st_transform(geom,4326) as i_geom from average_slope_grid_china where id = 77403)
SELECT id, name,
       ST_Distance(
    tb_base_poi_medical_china.geom::geography,
           input.i_geom::geography
    ) AS distance
FROM tb_base_poi_medical_china,input
ORDER BY geom <#> input.i_geom
LIMIT 1;

修改表权属

alter table file_storage
    owner to aceshorers;

修改时区

alter database aceshorers set timezone = 'PRC';

json字段查询

select attributes::json as jsondata from data_result_geom where result_id = 8 limit 1;

select json_object_keys(tb.jsondata) as fields from (select attributes::json as jsondata from data_result_geom where result_id = 8 limit 1) as tb;

备份数据库

pg_dump --username=postgres --no-password --host=localhost --port=5432 --dbname=grainmonitoring --format=custom --file=./db.dump --verbose

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值