postgresql
添加几何字段
select AddGeometryColumn('test', 'cities', 'shape', 4326, 'POINT', 2)
database table feild srid type 2维/3维
条件判断
coalesce(null,1) 返回第一个不是null的值 (类似mysql的ifnull)
自增长数字
generate_series(1, 99)
合并字段值
array_agg(column) (类似mysql的group_concat())
拼接字段值
string_agg(column,delimiter) (类似String.join(delimiter,elements..))
分页
limit pageSize offset startIndex
like
~ 匹配正则表达式,大小写相关 'thomas' ~ '.*thomas.*'
~* 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*'
!~ 不匹配正则表达式,大小写相关 'thomas' !~ '.*Thomas.*'
!~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.*'
DDL
CREATE TABLE "testdatabase"."test" (
"id" serial4 NOT NULL COMMENT '自动创建序列',
"name" varchar(64) DEFAULT ''::character varying
);
CREATE INDEX "idx_name" ON "public"."table" USING gist (
"column" "public"."gist_geometry_ops_2d"
);
postgis
查看srid
st_srid(geom)
更改srid
update table set geom = st_setsrid(geom, 4548) ;
SELECT updategeometrysrid('table', 'column', 4326);
几何对象构造 srid 可以省略
st_GeomFromText('POINT(117.029774783967 39.2252910679476)',4326);
st_GeomFromJson('{"type":"Point","coordinates":[117.02925861421,39.2270537797677]}',4326);
获取数据
ST_Asgeojson(geometry)
ST_AsText(geometry)
坐标系转换
ST_Transform(geometry,4326) geom字段必须指定srid
判断A是否包含B 全部包含 内边界相交为false
ST_Contains(geometry A, geometry B)
判断两个几何对象是否相交 外边界相交为true
ST_Intersects(geometry, geometry)
获取两个几何对象相交的部分
ST_Intersection(geometry, geometry)
面积 st_area(geometry)
周长 ST_perimeter(geometry)
获取点的X坐标 ST_X(geometry)
获取点的Y坐标 ST_Y(geometry)
获取点的Z坐标 ST_Z(geometry)
范围查询 必须是投影坐标系
ST_DWithin(geometry,geometry,radius) geom无位置区分 半径单位为米
两个几何对象的距离 两个几何对象的坐标系必须一致
ST_distancesphere (geometry,geometry) 大地坐标系
ST_distance (geometry,geometry) 投影坐标系
geometry geometry 不区分坐标系
合并几何对象
ST_Union(geometry, geometry)
st_union(array_agg(geom))
st_union(st_accum(geom))
构造几何数组
ST_Accum(geometry set)
几何操作符:
A范围=B范围 A = B
A范围覆盖B范围或A范围在B范围左侧 A &<> B
A范围在B范围左侧 A <<>> B
A范围覆盖B范围或A范围在B范围下方 A & B
A范围在B范围下方 A <> B
A=B A ~= B
A范围被B范围包含 A @ B
A范围包含B范围 A ~ B
A范围覆盖B范围 A && B
postgis 常用函数