8_读取矢量数据

本文详细介绍了如何使用Python的osgeo.ogr模块读取和操作ESRI Shapefile矢量数据,包括获取图层、图层属性、要素信息、几何形状以及矢量文件的投影参数。示例代码演示了从打开shapefile到获取特征的属性和几何信息的完整过程,并展示了如何遍历和提取属性表内容。最后,文章提到了释放资源的重要性。

读取矢量数据

读取矢量数据的方式就是上一章所讲的两种方法。

操作图层

现在要明白矢量数据的文件组织结构。

shp—>layer—>feature—>geometry—>wkt

一个shp文件中是只包含一个layer的;

layer就是同一个要素的集合,比如点集合、线集合、面集合,一个城市所有的学校为点集合;

feature指代单个的点线面之类的geometry,比如学校点集合中的某一个学校就是一个要素,在属性表中表示为一行数据;

geometry的组织方式就是wkt

__author__ = 'He XK'
from osgeo import ogr

if __name__ == '__main__':
    shp_filename = 'shp/province_1.shp'
    driver = ogr.GetDriverByName('ESRI Shapefile')
    shp = driver.Open(shp_filename)
    print(shp.GetLayerCount())  # 1
    # 获取图层
    layer = shp.GetLayer(0)
    # 获取图层要素
    print(layer.GetFeatureCount())  # 37
    print(layer.GetGeomType())  # 3
    print(layer.GetExtent())  # (-3349547.371448596, 1834629.4342002147, 699750.9271820501, 5953688.75950143)

操作图层首先需要获取layer,通过layer = shp.GetLayer(0),顺序从0开始,默认是0,所有的shp也只能有一个layer

可以查看图层的要素数量、图层范围等信息。

获取图层属性

layer_info = layer.GetLayerDefn(
Fiona是一个Python库,它作为GDAL(Geospatial Data Abstraction Library)的一个接口,主要用于处理地理空间数据,特别是矢量数据,如Shapefile、GeoJSON等。如果你想要使用Fiona读取矢量数据,首先需要安装`fiona`和GDAL库。 以下是使用Fiona读取矢量数据的基本步骤: 1. 安装依赖库: ```bash pip install fiona ``` 2. 导入库并打开文件: ```python from fiona import collection # 使用with语句自动关闭文件 with collection('path_to_your_shapefile.shp', 'r') as source: # 遍历每一个几何对象(feature) for feature in source: geometry = feature['geometry'] properties = feature['properties'] print(f'Geometry: {geometry}, Properties: {properties}') ``` 在这个例子中,`path_to_your_shapefile.shp`需要替换为你实际的矢量数据文件路径。 接下来,关于矢量数据融合,通常是指将多个矢量数据集合并到一起,形成一个新的数据集。这可以基于共享的边界、属性或其他特定条件。Fiona本身并不直接支持融合操作,但你可以结合其他GIS库(如PySAL、geopandas等)来完成数据融合。例如,可以先将数据加载到一个DataFrame中,然后使用这些库提供的函数进行合并: ```python import geopandas as gpd # 合并两个shapefile df1 = gpd.read_file('shapefile1.shp') df2 = gpd.read_file('shapefile2.shp') merged_df = df1.append(df2, ignore_index=True) # 或使用其他合并方法 merged_df.to_crs(epsg=4326).save('merged_shapefile.shp') # 可能需要转换坐标系后再保存 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值