Vector Layers#
Opening a Vector File#
Open methods:
Mode |
Description |
|---|---|
|
Read only |
|
Write |
import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
fn = r'C:\data\sites.shp'
dataSource = driver.Open(fn, 0)
layer = dataSource.GetLayer()
Getting Info#
# Name
name = layer.GetName()
# Number of features
numFeatures = layer.GetFeatureCount()
# Extent: Xmin, Xmax, Ymin, Ymax
extent = layer.GetExtent()
print('UL:', extent[0], extent[3])
print('LR:', extent[1], extent[2])
# Spatial reference
sRef = layer.GetSpatialRef()
sRefText = sRef.ExportToWkt()
EPSG = sRef.GetAuthorityCode(None)
# Geometry type
type_num = layer.GetGeomType()
type_name = ogr.GeometryTypeToName(type_num)
Geometry types:
Type Number |
Type Name |
|---|---|
|
Unknown (any) |
|
Point |
|
Line String |
|
Polygon |
|
Multi Point |
|
Multi Line String |
|
Multi Polygon |
Tables#
# Field info
layerDef = layer.GetLayerDefn()
for i in range(layerDef.GetFieldCount()):
fieldDef = layerDef.GetFieldDefn(i)
fieldName = fieldDef.GetName()
fieldTypeCode = fieldDef.GetType()
fieldType = fieldDef.GetFieldTypeName(fieldTypeCode)
fieldWidth = fieldDef.GetWidth()
fieldPrecision = fieldDef.GetPrecision()
# Field values
for i in range(layer.GetFeatureCount()):
feature = layer.GetFeature(i)
dict_feature = feature.items()
value = feature.GetField("FIELD")
Geometry#
# Feature by FID
feature = layer.GetFeature(0)
geometry = feature.GetGeometryRef()
feat_numb = geometry.GetGeometryCount()
geotype = geometry.GetGeometryName()
# Point
x = geometry.GetX()
y = geometry.GetY()
# Polygon
area = geometry.GetArea()
centroid = geometry.Centroid().GetPoint()
ring = geometry.GetGeometryRef(0)
vertex_num = ring.GetPointCount()
for vertex in range(vertex_num):
lat, lon, z = ring.GetPoint(vertex)
Filtering#
Attribute Filtering#
>>> layer.GetFeatureCount()
42
>>> layer.SetAttributeFilter("cover = 'shrubs'")
>>> layer.GetFeatureCount()
6
>>> layer.SetAttributeFilter(None)
>>> layer.GetFeatureCount()
42
Spatial Filtering#
# By extent
layer.SetSpatialFilterRect(Xmin, Ymin, Xmax, Ymax)
# By a polygon
polygon = poly.GetFeature(0)
polyGeom = polygon.GetGeometryRef()
layer.SetSpatialFilter(polyGeom)
Delete Objects#
feature.Destroy()
dataSource.Destroy()