irpas技术客

SQL实现ArcGIS的空间连接和相交分析_GIS小菜鸟_arcgis sql

irpas 3998

空间连接和相交分析作为ArcGIS软件中非常基本也是非常实用的工具,在土地管理、经济分析等领域都有比较好的应用场景,比如快速统计不同社区的储备土地的面积和占比,不同社区的规上企业数量和产出等。当数据量到了百万级的时候,使用ArcGIS的工具分析花费的时间就会很长,特别是近期处理百万级的人口数据时,花了半个多小时才完成一个ArcGIS的空间连接,效率明显低下。近期在处理百万级的数据时,利用空间数据库ST_Intersects/ST_Intersection,实现了空间连接和相交分析的功能,百万级的数据进行空间连接一分钟内完成,同时也节省了往原始数据连接属性的时间。下面给大家介绍下ST_Intersects实现空间连接和相交分析的用法。

基本介绍。先看下ESRI关于ST_Intersects、ST_Intersection的官方说明。

ST_Intersects—帮助 | ArcGIS Desktop如果两个几何的交集不生成空集,则 ST_Intersects 返回 1(Oracle 和 SQLite)或 t (PostgreSQL);否则返回 0(Oracle 和 SQLite)或 f (PostgreSQL)。https://desktop.arcgis.com/zh-cn/arcmap/10.3/manage-data/using-sql-with-gdbs/st-intersects.htm

?

ST_Intersection—帮助 | ArcGIS Desktophttps://desktop.arcgis.com/zh-cn/arcmap/10.3/manage-data/using-sql-with-gdbs/st-intersection.htm?

具体实现。这里我使用的SDE环境为PostgreSQL。1.获取社区范围内公交站点的数量。 主要数据:社区(空间数据,主键为sqid)、公交站点(空间数据)主要思路:新建一个数值型的公交站点字段,利用st_intersets判断公交站点和社区的空间关系,然后更新进相应字段中。SQL语句: update 社区 set 公交站点数量=t.公交站点数量 from (select a.sqid,count(b.*) as 公交站点数量 from 社区 a,公交站点 b where st_intersects(a.shape,b.shape)='t' group by a.sqid) t where 社区.sqid = t.sqid

2.获取社区范围内居住用地面积。 主要数据:社区(空间数据,主键为sqid)、土地利用(空间数据,分类代码dlbm)主要思路:新建一个数值型的居住用地面积字段,利用st_intersection获取社区与居住用地相交范围内居住用地的面积和属性。SQL语句: update 社区 set 居住用地面积=t.居住用地面积 from (select a.sqid ,sum(st_area(st_intersection(a.shape,b.shape))) as 居住用地面积 from 社区 a,土地利用 b where st_intersects(a.shape,b.shape)='t' and b.dlbm like '07%'-- b.dlbm like '07%'判断为居住用地 group by a.sqid) t where 社区.sqid = t.sqid

比较之下,传统的统计一个社区内的居住用地的面积,利用ArcGIS可能需要先做相交,然后筛选出居住用地利用汇总统计功能形成一个统计表格数据,在将属性挂接回原社区数据的属性字段中,需要三个步骤。而利用SQL一步就可以实现,特别是数据量大的时候优势更加明显。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #arcgis #SQL #ST_Intersects应用