1.在普通业务表中创建geometry字段
alter table b_code_stats add geom geometry(MultiPoint,3857);
2.将普通经纬度字段转换成web墨卡托3857格式的geometry字段
update b_code_stats set geom = st_multi(st_transform(ST_GeometryFromText('POINT('||f_lng||' '||f_lat||')',4326), 3857)) ;
思路:通过经纬度字段,构建对应的wkt的text文本,然后通过ST_GeometryFromText()函数将其转换成4326坐标系的geometry字段,再用st_transform()函数将其转换成3857投影坐标下的geometry字段,最后通过st_multi()函数将单点类型转换成多点类型。
3.恢复数据库表结构和数据
-
恢复整库:pg_restore --dbname=CJHD --jobs=4 --verbose CJHD.backup
-
恢复单个表及其数据:pg_restore -t citycode -d testdb citycode.sql
4.修改表中geom字段的srid值
update b_code_stats set geom = st_setsrid(geom ,3857)
5.常用转换函数
-
st_astext(geom) 实现geometry 到wkt的转换
-
st_geomfromtext(wkt,wkid) 实现wkt到geomrtry的转换
-
st_asgeojson(geometry) geometry转geojson:
-
st_geomfromgeojson(geojson) geojson转geometry
-
st_transform(geometry, integer) 坐标转换
6.常用空间关系判断函数
-
st_equals(geometryA, geometryB) 相等(Equals)--几何形状拓扑上相等。
-
st_disjoint(geometryA, geometryB) 脱节(Disjoint)--几何形状没有共有的点。
-
st_intersects(geometryA, geometryB) 相交(Intersects)--几何形状至少有一个共有点(区别于脱节)。
-
st_touches(geometryA, geometryB) 接触(Touches)--几何形状有至少一个公共的边界点,但是没有内部点。
-
st_crosses(geometryA, geometryB) 交叉(Crosses)--几何形状共享一些但不是所有的内部点。
-
st_within(geometryA, geometryB) 内含(Within)--几何形状A的线都在几何形状B内部。
-
st_dwithin(geometry, geometry, double precision) 检测一个对象是否在另一个对象的缓冲区范围内。
-
st_contains(geometryA, geometryB) 包含(Contains)--几何形状B的线都在几何形状A内部(区别于内含)。
-
st_overlaps(geometryA, geometryB) 重叠(Overlaps)--几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。
7.常见的空间操作(Geometry Operations)
-
st_buffer(geom,distance)或者st_buffer(wkt,distance) 缓冲区
-
st_intersection(geom,geom)或者st_intersection(wkt,wkt) 相交计算
-
st_union(geom,geom,…)或者st_union(wkt,wkt,…) 合并计算
-
st_difference(geomA,geomB)或者st_difference(wkt,wkt) 差异计算--AB形状的差异分析就是A里有B里没有的所有点的集合。
-
st_symdifference(geomA,geomB) 对称差异分析--AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合
具体关系如下图所示
8.其他一些常用函数
-
st_isempty(geom) 判断是否为空
-
st_x(geom)/ st_y(geom) 中心点x/y
-
st_distance(geom,geom) 或者st_distance(wkt,wkt) 两点间的距离
-
st_distance_sphere(point a,point b) 根据经纬度,获取两点距离(单位:米)
-
st_geometrytype(geometry A) 得到几何类型
-
st_length(geom)或者st_length(wkt) 线的长度/面的周长
-
st_area(geom)或者st_area(wkt) 面的面积
9.postgresql创建序列,并于自增字段关联
创建序列: CREATE SEQUENCE t_certificate_c_certificateid_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
将表字段与序列相关联
alter table t_certificate alter column c_certificateid set default nextval('t_certificate_c_certificateid_seq');