Python OGR绑定手册

OGR Python绑定对于某些算法和任务来说是必需的,例如,当不想使用PostGIS时。 没有官方文档,所以希望自己写

有关可用命令的完整列表,请参见https://github.com/OSGeo/gdal/tree/master/autotest

进口

 从osgeo import gdal 
从osgeo import ogr
从osgeo导入osr

在Python OGR绑定中打开GeoJSON文件:

 驱动程序= ogr.GetDriverByName(“ GeoJSON”) 
dataSource = driver.Open(文件名,0)
layer = dataSource.GetLayer()用于图层中的特征:
geom = feature.GetGeometryRef()

在Python OGR绑定中打开任何矢量格式的文件:

  ds = gdal.OpenEx('data / poly.shp') 

返回数据源

附加参数:

  • utf8_path
  • nOpenFlags
  • open_options = [”]来自驱动程序的#options,请参阅驱动程序页面
  • allowed_drivers = [‘CAD’]
  • 兄弟文件
  utf8_path 
nOpenFlags
open_options = ['']来自驱动程序的#options,请参阅驱动程序页面
allowed_drivers = ['CAD']
兄弟文件

错误处理

除非您显式调用UseExceptions(),否则Python绑定不会引发异常。

执行SQL

可以使用空间过滤器几何形状和设置方言进行查询。 方言可以是默认值-OGR(带几何字段的别名)和sqlite(带Spatialite的ST_ *功能)。

https://gdal.org/python/osgeo.ogr.DataSource-class.html#ExecuteSQL

  ExecuteSQL(DataSource self,char const * statement,Geometry空间过滤=无,char const *方言)->图层 

对于查询,您需要表(层)名称。 获得它

 层= dataSource.GetLayer() 
layername = layer.GetName()

全部一起

  sql ='''SELECT * FROM {layername} ORDER BY {fields} LIMIT 10'''。format(fields =','。join(“ NAME”,“ HIGHWAY),layername = self.srclayer.GetName()) ResultSet = self.srcdataSource.ExecuteSQL(sql) 
层= self.srcdataSource.GetLayer()
对于ResultSet中的功能:
一个= feature.GetField(“ NAME”)
打印一个
 从osgeo import ogr 
import osshapefile =“ states.shp”
驱动程序= ogr.GetDriverByName(“ ESRI Shapefile”)
dataSource = driver.Open(shapefile,0)
layer = dataSource.GetLayer()用于图层中的特征:
打印功能。GetField(“ STATE_NAME”)
layer.ResetReading()

如果要再次开始遍历该层,则必须调用ResetReading。

具有社交网络图像大小的徽标生成

 马桶-f mono12 -F金属-E svg“ GDAL / OGR Python API”> ascii.svg 
inkscape -z -e ascii.png -w 600 -h 300 ascii.svg

遍历所有图层,要素,字段和几何

 从osgeo import ogr 

数据= ogr.Open('/ path / to / vector / file')

print('数据名称:',data.GetName())

#使用GetLayer('layername'/ layerindex)获取图层
用于数据层:
print('Layer Name:',layer.GetName())
print('Layer Feature Count:',len(layer))
#每层都有一个架构,告诉我们要素包含哪些字段和几何字段
打印(``层模式'')
layer_defn = layer.GetLayerDefn()
对于我在range(layer_defn.GetFieldCount())中:
打印(layer_defn.GetFieldDefn(i).GetName())
#有些图层具有多种几何特征类型
#大多数情况下,虽然只能有一个
为我在range(layer_defn.GetGeomFieldCount())中:
#有时候名字不出现
#但类型代码定义正确
打印(layer_defn.GetGeomFieldDefn(i).GetName(),layer_defn.GetGeomFieldDefn(i).GetType())
#使用GetFeature(featureindex)获取功能
#这是featureindex可能不会从0开始的那个
layer.ResetReading()
对于图层中的要素:
print('Feature ID:',feature.GetFID())
#使用GetField('fieldname'/ fieldindex)获取元数据字段
print('Feature Metadata Keys:',Feature.keys())
print('Feature Metadata Dict:',Feature.items())
print('Feature Geometry:',feature.geometry())

取自https://gist.github.com/CMCDragonkai/e7b15bb6836a7687658ec2bb3abd2927

PythonGotchas – GDAL

并非此处列出的所有项目都是bug。 其中一些只是GDAL和OGR的工作方式,如果没有这些,就无法轻易解决

trac.osgeo.org

  • https://www.gdal.org/classOGRLayer.html
  • https://trac.osgeo.org/gdal/wiki/PythonGotchas
  • https://gdal.org/python/osgeo.ogr.DataSource-class.html