美文网首页开源Gis专辑
利用postgis进行图斑处理

利用postgis进行图斑处理

作者: 上岸躲雨 | 来源:发表于2018-11-07 17:53 被阅读63次

1 背景

最近写了个爬取网络地图矢量数据的爬虫(土地分类),程序比较给力能够把数据爬取下来,且效率还是比较高的。
直接上图:


原始数据

由于是请求矢量切片爬取的数据,就存在瓦片边界的问题,比如一个完整的多边形可能因为存在于多个切边上这个多边形就被切成多个部分。怎么把这个分开来的多边形合并起来,这就需要解决。本质上这个问题就是处理图斑的问题。当然可以用arcgis、qgis的类似软件进行人工处理。但是写代码的,怎么能用这种耗时耗力的方法呢。

2 思路

第一个想到的是监测边界,然后程序合并(程序写起来难度太大了)。
第二个方法是建立网格,一个一个格子去处理(复杂度依然存在)。
第三观察图形,发现能合并的数据距离都极近,那如果把多边形进行聚簇,然后对簇进行合并,问题就解决了。

postgis里面有ST_ClusterWithin函数,可以进行聚簇。

Synopsis
geometry[] ST_ClusterWithin(geometry set g, float8 distance);

Description
ST_ClusterWithin is an aggregate function that returns an array of GeometryCollections, where each GeometryCollection represents a set of geometries separated by no more than the specified distance. (Distances are Cartesian distances in the units of the SRID.)

当然里面也会用到其他的一些函数:如ST_UnaryUnion、ST_CollectionHomogenize等,这里就不对各个函数进行解释了,自行Google。这些比较偏的函数,为了实现这个功能,也是费尽脑汁,对着电脑坐了一整天。废话少说,直接上处理程序的代码。

--以一种土地类型进行合并
WITH testdata AS (
    SELECT
        UNNEST (
            ARRAY (
                SELECT
                    st_transform (geom, 3857)
                FROM
                    region grh
                WHERE
                    grh.z = 17
                AND heigth = 'regions:public'
            )
        ) as geom
)
SELECT ST_UnaryUnion(ST_CollectionHomogenize(st_transform(unnest(ST_ClusterWithin(geom, 0.1)),4326))) FROM testdata

3 结果验证

合并结果

效果蛮好的,磨刀不费砍柴工,有了这套解决方案,以后再碰到需要处理的图斑,一条sql语句,直接搞定。所以玩开源方案,能随便组织自己的想法,真是蛮爽。

相关文章

  • 利用postgis进行图斑处理

    1 背景 最近写了个爬取网络地图矢量数据的爬虫(土地分类),程序比较给力能够把数据爬取下来,且效率还是比较高的。直...

  • 利用multicorn实现PostgreSQL与Elastics

    学习记录 项目中利用PostgreSQL作为数据存储,同时利用postgis处理空间属性,再利用ElasticSe...

  • 基于qgis+postgis做空间分析

    一 背景 postgis有着太多强大的空间分析函数,一直以来也习惯使用postgis的函数做着空间分析与数据处理。...

  • postgis导入shp数据指空间坐标系的方法

    1、通过postgis导入界面进行设置 2、通过sql语句进行设置 SELECT UpdateGeometrySR...

  • 利用model进行处理数据

    在开发的过程中,经常会用到传值,上级页面向下一级页面传值,这个就不多说了,很简单的,正向传值就好了。重点说下,二级...

  • 十二,MyBatis进行批处理

    本节学习利用集合保存批处理数据,再利用批处理sql(使用foreach进行遍历)一次性进行数据的批处理 一,批量新...

  • GO 语言超时实现

    利用select 进行一个超时的处理

  • Nodejs利用GraphicsMagick进行图形处理

    nodejs利用GraphicsMagick进行图形处理 Gm有瑞士军刀 之称,在图形处理非常优秀 进行插件安装 ...

  • postgis的csv表空间数据转shp

    收到别人给的csv格式postgis空间数据时,一般需要转换为常见的shp格式或导入自己的postgis库进行使用...

  • CNN

    卷积神经网络在图像处理方面具有广泛应用,下面这张图展示了利用CNN来对图片进行特征提取,最后对图片进行分类的应用:...

网友评论

    本文标题:利用postgis进行图斑处理

    本文链接:https://www.haomeiwen.com/subject/hcavxqtx.html