SQL:常见空间与属性数据库的操作
程序员文章站
2022-04-13 22:15:26
...
PostgreSQL数据库与对应的空间拓展postGIS的初步使用总结
属性操作:(以下表名用table表示,字段名用field表示)
//创建表语句:
create TABLE framework1.table1
(
gid integer NOT NULL DEFAULT ......,
field1 type1,
field2 type2,
geom geometry(PointZM),
CONSTRAINT table1_pkey PRIMARY KEY (gid)
)
//查询语句:
select table.field from table where field = DDD;
//插入语句:
insert into table(field1,field2,field3,field4,field5,field6) values('SS1','SS2','SS3',DD1,DD2,DD3);
//复制表中某字段的所有内容到另一字段
update table1 set field2= field1 ;
//将表中某一字段所有值均赋为SSS
update table1 set field2= 'SSS' ;
空间操作:
//创建空间信息
select AddGeometryColumn('table_name','column_name',new_srid,'MULTIPOINT',dim); //参数依次为表名、字段名、坐标系代号、几何类型、维度
例:
select AddGeometryColumn('own_point','point_geom',4326,'MULTIPOINT',3);
//加载GIS数据,例:insert into roads(road_id, roads_geom, road_name) values(1,st_geomfromtext('linestring(191232 243118,191108 243242)',-1),'Jeff Rd')
//转换数据显示
select ST_AsText(geom) FROM public.table1;
select ST_AsEwkt(geom) FROM public.table1;
SELECT gid, ST_AsText(geom), ST_AsEwkt(geom), ST_X(geom), ST_Y(geom) FROM public.table1;
//显示表中任意两个几何对象的距离(第三个参数为可选项,可指定椭球参数(椭球体名、半主轴长、扁率)计算)
SELECT ST_Distance_Sphere(p1.geom,p2.geom,'SPHEROID["GRS_1980",6378137,298.257222]') FROM table1 AS p1, table2 AS p2 WHERE p1.gid > p2.gid;
//判断某点与表中几何对象的距离关系(以point(121,32)为例,找出距离在1000以内的表中所有几何对象)
select st_distance(p1.geom::geography, ST_GeomFromText('POINT(121 32)', 4326)::geography) from table1 as p1 where ST_dwithin(p1.geom::geography, ST_GeomFromText('POINT(121 32)', 4326)::geography, 1000);
类似还有st_Contains(...)函数、st_covers(..)函数等。都可以在数据库->架构->函数里查看。
具体关于geometry的几何关系的详细说明,可以参考PostGIS中的Geometry相互关系。
关于PostGIS常用函数的使用,可以参考PostgreSQL+PostGIS 的使用【转】
在导入shp数据到数据库时,若没有设置srid,则会默认srid为0。可通过ST_srid(geom)函数查询。srid为0时,PostGIS无法获知你数据的坐标系,也就无法使用st_transform()函数进行转换。首先需要设置自己数据的srid。语句如下:
SELECT UpdateGeometrySRID('table','geom',4326);
SQL语句通俗记法:
with-->“和”,as-->“指代为”,where-->“条件--当”,from-->"从哪里"
..本人新手,正在学习,持续更新,欢迎指导。