空间数据库学习(一)—— PostGIS 简单空间查询
文章同步更新于我的个人博客:松果猿的博客,欢迎访问获取更多技术分享。
同时,您也可以关注我的微信公众号:松果猿的代码工坊,获取最新文章推送和编程技巧。
首先创建数据库:
执行以下语句安装postgis扩展:
1 | CREATE EXTENSION postgis; |
或者右键点击数据库的扩展
>创建扩展
:
数据库建好后,下面我们导入shp数据,在开始菜单找到PostGIS Shapefile and DBF Loader Exporter
,打开它,准备将我们的数据导入数据库:
在弹窗中点击View connection details
连接我们刚刚创建的数据库
输入用户名密码等等:
在日志中看到Connection succeeded
即成功:
点击Add File
将我们的数据添加进去:
注意这里的文件路径不能有中文,点击Import
导入数据库
查看日志出现Shapefile import completed
即导入成功
下面我们来到查询工具执行语句
(1) 找出江苏省的邻省;
1 | SELECT p1.name FROM province p1,province p2 |
同理,以下是其他相关查询语句,熟悉不同类型的空间关系函数及使用方法:
(2) 找出京广线所经过的省份;
1 | select railway.name, province.name from railway, province where |
(3) 找出距离每条铁路最近的省会城市
1 | SELECT c1.name , r.name FROM city c1, railway r |
(4) 距离京广线 100 公里之内的的省会城市
1 | SELECT c.name FROM railway r,city c |
(5) 列出每个省份的名字和面积
1 | SELECT p.name, ST_Area(p.geom) Area FROM province p |
(6) 求出每条铁路经过的省份及在其境内的长度 intersects & intersection
1 | SELECT r.name,p.name,ST_Length(ST_Intersection(r.geom,p.geom)) Length FROM |
(7) 每个城市到北京的距离
1 | SELECT c1.name,ST_Distance(c1.geom,c2.geom) Distance |
(8) 按照邻省数目列出所有省份;
1 | SELECT p1.name, Count(p2.name) FROM province p1, province p2 |
(9) 查询只有一个邻省的省份;
1 | SELECT p1.name, Count(p2.name) FROM province p1, province p2 |
(10) 查询邻省最多的省份。
第 1 步:
1 | CREATE VIEW Neighbor AS |
第 2 步:
1 | SELECT name, num_neighbors FROM Neighbor WHERE |
本文的相关shp数据下载链接:https://github.com/songguo1/postgresql
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.