python OGR库读取矢量文件——OGR shp操作

from osgeo import ogr


# **注释**     

layer: 图层(整体)# feature:图层中的要素(整体下的每个图层)

## 一  
```python

# 输入shp文件路径 
inshp = r"E:\out\CPP\20180101\30\CPP_20180101_30_610000.shp"
# 打开输入shp文件
driver = ogr.GetDriverByName('ESRI Shapefile')
dataSource = driver.Open(inshp, 1) # 等价于 dataSource = ogr.Open(inshp, 1)
# 输出shp文件路径
outshp = r"E:\out\CPP\20180101\30\CPP_20180101_30_610000_out.shp"
```
## 二 
```python

#### 学会使用layer.GetFeature()【见法一】与layer.GetNextFeature()【见法二】 实现相同的功能####

# 法一:遍历layer下的要素
layer = dataSource.GetLayer()
Count = layer.GetFeatureCount()
for i in range(Count):
    feature = layer.GetFeature(i)
    
    [# 其它操作
    pass
    # 其它操作]

    # 遍历每个要素下的字段
    for j in range(feature.GetFieldCount()):
        print(feature.GetField(j))
    [# 其它操作
    pass
    # 其它操作]

# 法二:与法一等价
feature = layer.GetNextFeature()
while feature:
    # 遍历每个要素下的字段
    for j in range(feature.GetFieldCount()):
        print(feature.GetField(j))
    [# 其它操作
    pass
    # 其它操作]
    feature = layer.GetNextFeature()   
```

## 三 ``# 空间参考信息三种获取方式“

```python
(1) # *** layer:shp整体图层
prosrs = layer.GetSpatialRef()
(2)
feature = layer.GetFeature(i) # 在循环内
geom = feature.GetGeometryRef()
prosrs = geom.GetSpatialReference()
(3)
prosrs = osr.SpatialReference()
prosrs.ImportFromEPSG(4326)
```

## 四

```python
### 创建输出文件
if os.path.exist(outshp):
    driver.DeleDataSource(out_shp)
outds = driver.CreateDataSource(out_shp)
outlayer = outds.CreateLayer(out_shp[:-4], srs=prosrs, geom_type = ogr.wkbPolygon)
# 创建出输要素
outfeature = ogr.Feature(outlayer.GetLayerDefn())
# 创建输出字段
field_l = ogr.FieldDefn("GRIDCODE", ogr.OFTReal)
outlayer.CreateField(field_l)
```

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的`ogr`可以用于矢量数据读取、写入、转换和操作。如果要将两个矢量数据集(例如shapefile)融合在一起,可以使用`ogr`的`Union()`函数。以下是一个示例代码: ```python from osgeo import ogr # 打开第一个shapefile shp1 = ogr.Open("path/to/shapefile1.shp") layer1 = shp1.GetLayer() # 打开第二个shapefile shp2 = ogr.Open("path/to/shapefile2.shp") layer2 = shp2.GetLayer() # 创建新的shapefile driver = ogr.GetDriverByName("ESRI Shapefile") new_shp = driver.CreateDataSource("path/to/new_shapefile.shp") # 创建新的图层 new_layer = new_shp.CreateLayer("new_layer", layer1.GetSpatialRef(), layer1.GetGeomType()) # 添加字段 layer_def = layer1.GetLayerDefn() for i in range(layer_def.GetFieldCount()): field_def = layer_def.GetFieldDefn(i) new_layer.CreateField(field_def) # 将第一个图层的要素添加到新图层 for feature in layer1: new_layer.CreateFeature(feature) # 将第二个图层的要素添加到新图层 for feature in layer2: new_layer.CreateFeature(feature) # 对新图层进行融合(Union) new_layer = None new_shp = None union_shp = driver.Open("path/to/new_shapefile.shp") union_layer = union_shp.GetLayer() union_layer.SetSpatialFilter(None) results = [] for feature in union_layer: results.append(feature.Clone()) union_layer = None union_shp = None ``` 这段代码首先打开两个shapefile,然后创建一个新的shapefile和图层。它复制了第一个图层的字段,并将其添加到新图层。接下来,它将第一个图层和第二个图层的要素添加到新图层。最后,它使用`Union()`函数将新图层的要素融合在一起,并将结果存储在一个列表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值