GIS空间分析之Clip

网友投稿 380 2022-12-02

GIS空间分析之Clip

文章目录

​​开篇​​​​案例介绍​​​​代码展示​​​​方法总结​​

作者:阿振

写作时间:2020-06-16 周一 早安

开篇

接着上篇《​​GIS空间分析之Buffer​​》之后,这篇来介绍矢量数据的裁剪(Clip)。裁剪其实算不上是一种空间分析功能,就是一种简单矢量数据处理操作。

一般,我们会使用一个代表研究区域或者感兴趣的区域(AOI,Area of Interest)的多边形数据去裁剪一个比较大的全区域的数据,得到的结果就是感兴趣区域中包含的数据。矢量数据的裁剪在平时工作中用得不是特别多。

案例介绍

本文使用一个AOI区域(黄河流域区)区裁剪中国的县界(线要素),从而得到黄河流域区中的县界。

在上篇《​​GIS空间分析之Buffer​​​》中我们是使用了Geometry类的​​Buffer()​​​方法建立缓冲区的,而本篇中我们需要使用Layer图层类的​​Clip()​​方法进行矢量数据裁切。

对于矢量数据的操作,有的是通过Geometry类的方法实现的,有的是通过Layer类的方法实现的。

下面来看一下我们的数据,红色区块是黄河流域,红色的线表示的是各个县的边界。

代码展示

from pathlib import Pathimport ogrogr.UseExceptions()# 读取被裁剪的数据in_ds: ogr.DataSource = ogr.Open('../data/County.shp')in_lyr: ogr.Layer = in_ds.GetLayer()# 读取裁剪范围数据method_ds: ogr.DataSource = ogr.Open('../data/YellowRiver.shp')method_lyr: ogr.Layer = method_ds.GetLayer()fname: str = 'Clipped.shp'# 创建被裁剪以后的输出文件driver: ogr.Driver = ogr.GetDriverByName('ESRI Shapefile')if Path(fname).exists(): driver.DeleteDataSource(fname)# 新建DataSource,Layerout_ds: ogr.DataSource = driver.CreateDataSource(fname)out_lyr: ogr.Layer = out_ds.CreateLayer(fname, in_lyr.GetSpatialRef(), in_lyr.GetGeomType())# 开始进行裁剪in_lyr.Clip(method_lyr, out_lyr)out_ds.FlushCache()del in_ds, method_ds, out_ds

裁剪的结果如下:

方法总结

首先我们使用​​ogr.Open()​​​函数分别读取被裁剪的数据以及裁剪范围数据;使用​​GetLayer()​​方法获取数据的图层。裁剪范围数据在GDAL中被称为Method Layer。使用Driver类的​​CreateDataSource()​​​方法创建裁剪输出结果;使用​​CreateLayer()​​​函数创建输出图层。​​CreateLayer()​​函数传入三个参数,分别是图层名,空间参考以及空间要素类型。后两个参数可以通过读取被裁剪数据获取。使用读取被裁剪数据图层的​​Clip()​​函数进行裁剪,改函数传入两个参数,分别是方法图层(Method Layer)以及输出结果图层(Result Layer)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java异常处理执行顺序详解try catch finally
下一篇:Python快速入门视频
相关文章

 发表评论

暂时没有评论,来抢沙发吧~