用线裁剪面之-PostGIS版本

地理数据处理的常用工具

如果经常需要处理地理数据,大多数人都无法绕开ArcGIS这套软件,ArcGIS以其强大的功能与稳定性著称,是当之无愧的GIS界大拿。偶尔会有些人会接触到FME或QGIS等软件。但地理数据处理,是一个广阔的世界,除此之外,亦有很多优秀的软件可供我们使用,或者你可以写些代码来进行数据的处理与分析,今天主要介绍空间数据库——PostGIS。

PostGIS可以做什么

可能有很多人(包括我)都会觉得,数据库嘛,不就是存数据的嘛,怎么还跟数据处理扯上关系了?因为这种常识的存在,导致我一直只是用postgresql来存储数据,数据的处理与分析也都是用其他的工具。直到有一天,单位的小哥哥看我处理数据,我们在交流中我发现,原来PostGIS有这么多的函数,有这么多的功能,竟然这么强大。从空间分析运算,到属性处理,PostGIS都有相关的函数,并且在数据库中的这些运算,非常的高效。这么说吧,如果要更新某个表的某个字段(我觉得表越大,在数据库进行计算的优势越明显),分别用ArcMap与pg来做,可能用ArcMap软件打开属性表的时间,PostGIS都已经算完了,没办法,就是这么高效!我这几天测试过,将一张有近2万条点数据的空间表的XY信息提取到字段,使用pg,只需要300ms左右,可以说,是非常的高效了。

操作示例

测试数据

前两天有朋友在群里闻到一个问题,如何用线裁剪面?据我了解,无论是ArcGIS还是FME都没有什么函数或转换器能直接实现线裁开面的功能。以下为测试数据:

我绘制了三条线与五个面,作为测试数据。

线状数据存在line表中,存储几何的字段为geom_c;面状数据存在polygon表中,存储几何的字段为geom;裁剪后的结果数据存在out表中。

要完成的事情

使用这三条线,裁剪开这五个面。

用到的SQL脚本
INSERT  INTO public.out(geom) SELECT (ST_Dump(ST_SPLIT(geom,geom_c))).geom  FROM  public.polygon,public.line WHERE ST_Intersects(public.line.geom_c,public.polygon.geom);
脚本执行结果

本来觉得挺简单的事情,边写边查,竟然写了几个小时,一转眼就天就黑了。但执行却是非常快:

只有20毫秒!

执行后的结果数据

可以看到,所有面都被正确的裁剪开了,结果完全符合预期。PG干的漂亮!

说点啥呢

做数据处理,应该尽量去掌握多种数据处理工具,这样才不会在工作中手忙脚乱。不能什么时候都靠一种工具,这样很容易会在工作中遇到问题。个人觉得应该至少有一种工具可以用到极致,然后再有几个比较了解的工具,然后慢慢的形成自己的技术体系。

一只努力学习的GISer

原文发布于微信公众号 - 数据处理与分析(Qing_master)

原文发表时间:2018-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券