PostGIS的空间数据库操作
1、SHP导入POSTGIS数据库 导出sql再导入数据库
方法1:以SQL文件为中间媒介实现shp导入空间数据库
Step1:shp2pgsql -s 4326 F:\\spatial\\data\\cities.shp cities >D:\\cities.sql
说明:-s 设置坐标系统; F:\\spatial\\data\\cities.shp指定数据源; cities 目标表名称。 Step2:运行postgres数据库;输入登录密码:admin 进入数据库;选中postgis数据库
Step3:点击工具栏上的
,弹出sql窗口
Step4:点击,找到刚才生成的SQL文件,打开,运行即可。
方法2:通过命令行直接导入空间库
Step1:shp2pgsql -s 4326 F:\\spatial\\data\\cities.shp public.cities psql -U postgres -p admin -d postgis
说明:-s 设置坐标系统; F:\\spatial\\data\\cities.shp指定数据源 ;public.cities 目标表名称; –U 用户名; –p 密码; –d 空间数据库名称。
方法3:通过界面导入空间库
Step1:在开始菜单中,运行 postgis 2.0下面的
Step2:点击
,设置数据库连接;确定,如果成功,在前一
界面上会出现“Connection succeeded.”的信息。
Step3:点击
,在对话框找到需要转入空间数据库的shp文件,
open
Step4:点击
即可导入数据
进行编码设置。
Step5:如果数据中的字段存在汉字的话,可以点击
2、SHP导入POSTGIS数据库 方法1:通过命令行直接导出shp
pgsql2shp -f d:\\shop_point.shp -h localhost -u postgres -P admin postgis public.cities
说明:-f d:\\shop_point.shp导出文件的名称和路径; -h 数据库的ip地址;–U 用户名; –p 密码; postgis 空间数据库名称;public.cities空间数据库表的名称
方法2:通过命令行直接导出shp
Step1:在开始菜单中,运行 postgis 2.0下面的Step2:点击
,设置数据库连接;确定,如果成功,在
前一界面上会出现“Connection succeeded.”的信息。
Step3:选择export界面
Step3:点击
;再点击
即可
3、PostGIS函数分类 字段处理函数
AddGeometryColumn为已有的数据表增加一个地理几何数据字段; DropGeometryColumn删除一个地理数据字段的; SetSRID设置SRID值
几何关系函数
这类函数目前共有10个,分别是: Distance,Equals,Disjoint,Intersects, Touches Crosses, Within, Overlaps,Relate
Contains, 几何分析函数
这类函数目前共有12个,分别是: Centroid, Area, Lenth, PointOnSurface, Boundary, Buffer, ConvexHull, Intersection, SymDifference, Difference, GeomUnion, MemGeomUnion
读写函数
这类函数很多,主要是用于在各种数据类型之间的转换,尤其是在于Geometry数据类型与其他如字符型等数据类型之间的转换,函数名如AsText、GeomFromText等。
4、Geo-SQL查询
Select c1.city_name From Cities C1, Rivers R Where ST_Overlaps(C1.geom,ST_Buffer(R.geom,3000))
Select c1.city_name From Cities C1, (Select geom from rivers where name='Alabama') as m Where ST_Overlaps(C1.geom,ST_Buffer(m,3000))
Select c1.city_name From Cities C1, (Select ST_Buffer(geom,3000) as dd from rivers where name='Platte') as m Where ST_Overlaps(C1.geom,m.dd)=true
Select c1.city_name, ST_Overlaps(C1.geom,m.dd) From Cities C1, (Select ST_Buffer(geom,3000) as dd from rivers where name='Platte') as m
做一个点查询(查询州数据)ST_Within 点查询城市 ST_Buffer、ST_Within 查询某一州包含的城市 ST_Contains 查询面价大于XX的州有哪些 ST_Area
查询州的名字(按照面积从大到小排序)ST_Area
条件查询空间数据,查询结果的空间数据,用文本显示 ST_AsText
与某点距离小于XX的要素有哪些(点线面分别查询一次)ST_Distance、ST_MakePoint 查询名字为XX的河流,流经哪些州 ST_Crosses
将某个城市平移一定的距离 ST_GeomFromText、ST_AsText
附件:常用的Geo-SQL查询
1. SELECT shengjie_region.name,shijie_region.name FROM
shengjie_region ,shijie_region where shijie_region.provincena = shengjie_region.name and ST_Within(ST_MakePoint(121.54, 38.91), shengjie_region.geom) 点查询某省份,并找到该省份的城市
2. SELECT name FROM shijie_region where ST_Within(ST_MakePoint(121.54, 38.91),