zoukankan      html  css  js  c++  java
  • python OGR操作矢量数据

    OGR简单要素库是地理空间数据抽象库(GDAL)的一部分,是一个开源库,可以读写许多不同格式的矢量数据,编辑属性值,筛选等。

    当使用OGR打开数据源,例如Shapefile文件、GeoJSON文件,会有一个DataSource对象,此数据源可以有一个或者多个子图层对象,每一个图层代表数据源中的一个数据集,许多矢量数据格式(如Shapefile)只能包含一个数据集,但是其他如SpatialLite可以包含多个数据集,不管一个数据源中有多少数据集,每一个数据集都被OGR认为是一个图层,也就是说在数据源和实际数据集之间多了一个叫做图层(Layer)的东西,这一点需要注意理清概念。

     对于实际的数据,每一个图层都是要素对象的集合,包含其几何形状和属性,如果在GIS软件中加载一个思路数据,在属性表中的每一行对应一个要素,每列对应一个属性字段,在一些GIS软件中(ArcGIS)在属性表中会有一个shape列显示几何对象。

    读取矢量数据

    需要记住一个数据源由一个或多个图层组成,所以打开数据源后,需要获得具体的图层

    数据源有一个GetLayer函数,可以来获得图层索引或者图层名,图层索引从0开始,默认返回第一个图层

    Shapefile数据源只有一个图层,所以不需要提供索引

    图层由一个或多个要素组成,每一个要素表示一个地理对象。地理对象的几何形状和属性值存储在这些要素中

    from osgeo import ogr
    import sys
    
    fn=r"D:0Paper0Datazonal_shpwatershed.shp"
    ds=ogr.Open(fn,0)#1为编辑模式
    if ds is None:
        sys.exit('Could not open {0}.'.format(fn))
    lyr = ds.GetLayer(0)
    
    #输出前10个要素的信息
    i=0
    for feat in lyr:
        pg=feat.geometry()
        name=feat.GetField('ID')
        print(name)
        i+=1
        if i==10:
            break
        
    num_features=lyr.GetFeatureCount()#要素个数     
    del ds #删除变量 强制关闭文件
  • 相关阅读:
    pins-模块内的代码及资源隔离方案
    Android Gradle defaultConfig详解及实用技巧
    实用抓包工具:whistle
    Gradle中的闭包
    Android Gradle 依赖配置:implementation & api
    Android Studio Run项目出现Failure [INSTALL_FAILED_TEST_ONLY]
    Android 8.0对隐式广播的进一步限制
    cookie 详解
    一分钟内搭建全web的API接口神器json-server详解
    高性能前端 art-template 模板
  • 原文地址:https://www.cnblogs.com/icydengyw/p/14626387.html
Copyright © 2011-2022 走看看