![027bb87b2067bd033c5c4075bc28e62f.png](https://i-blog.csdnimg.cn/blog_migrate/376f1bb5fea2ee9bf5ef23fe7d124ab0.jpeg)
矢量数据是地理特征表示为离散的几何形状ー特别是点、线和面。通常矢量数据一般不会用来表示连续数据,比如高程数据。矢量数据与我们生活息息相关,最常用的导航地图上的各要素,如道路、景点、医院、商场等要素都是以矢量数据来表示。目前主流的Arcgis软件能够很好的进行矢量数据的操作,而通过代码来实现矢量数据的操作的话,则会在某种程度上提高工作效率,比如矢量数据属性的批量增删改查(可以利用arcgis的站点包arcpy也能实现一些批量处理工作,但是arcgis10系列支持python2,而arcgis pro支持python3,在这里推荐一个非常好用的开源gis项目,QGIS)。
先了解一下矢量数据的结构组成。Data Source:类OGRDataSource是一个抽象基类,表示含有OGRLayer对象的一个文件或一个数据库。Layer:类OGRLayer是一个抽象基类,表示数据源类OGRDataSource里面的一层要素(feature)。Feature:类OGRFeature封装了一个完整feature的定义,一个完整的feature包括一个geometry和geometry的一系列属性。Geometry:类Geometry (包括OGRGeometry等类)封装了OpenGIS的矢量数据模型,并提供了一些几何操作,以及空间参考系统(投影)。看似很复杂,其实很好理解,在这里可以与GEE中的对象作类比。如这里的Geometry其实相当于GEE中的ee.Geometry,Feature相当于GEE中的ee.Feature,而Layer就相当于GEE中的ee.FeatureCollection。
![648612b23c200f7c4bed3094737d6da8.png](https://i-blog.csdnimg.cn/blog_migrate/ab2c76d05b44516f65038edf55be6abb.png)
从简单开始,利用ogr读取读取矢量数据。从数据源(data source)开始,可以通过dir,来查看数据源的相关函数、类和属性等内容。
![c188c68f55c9e8d5ba1ab60a46f4c790.png](https://i-blog.csdnimg.cn/blog_migrate/5dbd2399547952c1c542039457d14d0d.jpeg)
接下来是层(Layer)的相关操作。我们比较关心的是层的具体定义信息,也就是属性表的信息,可以通过如下两种方法实现,也可以对Layer的相关属性进行操作,比如投影信息,层范围,几何对象类型等。
![3037d1073d47a5c043fe340ac338f759.png](https://i-blog.csdnimg.cn/blog_migrate/d2b5b9e4623e5637a1bec65cf7752163.jpeg)
![223c28cc180d51fa83d2d7cde3c61746.png](https://i-blog.csdnimg.cn/blog_migrate/921d0f38e0fcbe9ee2c166839d55d75b.jpeg)
![c268cab7d6149391fe8937003686c2d7.png](https://i-blog.csdnimg.cn/blog_migrate/6b94f533e1cec613620fba550697aa87.jpeg)
![e8e98d53b48c44badfb1f5937e471e4e.png](https://i-blog.csdnimg.cn/blog_migrate/76e5c5a75921cdcc635c97617757d0ea.jpeg)
最后就是对要素(Feature)的操作,主要就是要素内容的获取,只有先获取内容,才能对内容进行修改。同样可以通过dir查看要素(Feature)的主要函数、属性等。利用循环,可以获取所有要素内容。
![8562c11536502521125186c0ec200602.png](https://i-blog.csdnimg.cn/blog_migrate/00f5077538243e1ce031d164ccc1f71d.jpeg)
回头看,不难发现,矢量数据的读取,就好比一个装有宝石的盒子,外面又套了好几个盒子,为了看到最里面盒子里的宝石是什么样子,就必须从外到里,逐级的把盒子打开。从始至终我并没有说到矢量数据的写入,这是因为介绍完矢量数据读取后,它的写入实现也就容易了,可以类比栅格数据的写入,具体就是创建data source,定义投影信息,创建Layer,定义图层信息(属性表),创建要素(Feature),写入具体内容,这与就实现了矢量数据的写入,具体实现的话,感兴趣的自己去尝试一下。
OK,今天就说到着。晚安。