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)
```
python OGR库读取矢量文件——OGR shp操作
于 2022-09-15 10:23:55 首次发布