filmov
tv
Read and write vector files with GDAL/OGR in Python

Показать описание
This tutorial explains how to open vector files with GDAL/OGR in Python, add attribute fields to store measures such as the perimeter and area of a polygon, and save the updated features to a new shapefile. We will also look at how to create a geometry from individual coordinates in Python and write it to a new vector file.
Code:
from osgeo import ogr
# open shapefile
layer = ds.GetLayer()
# get extent
ext = layer.GetExtent()
# get a single feature
feature = layer.GetFeature(1)
# loop over all features in a layer
for feature in layer:
print(feature.GetField("FID"))
# create new shapefile
driver = ogr.GetDriverByName("ESRI Shapefile")
# copy layer
outlayer = ds.CopyLayer(layer, "out")
# create a new attribute field
newfield = ogr.FieldDefn("Perimeter", ogr.OFTReal)
newfield.SetWidth(10)
newfield.SetPrecision(3)
outlayer.CreateField(newfield)
# get the perimeter of each polygon
for feature in outlayer:
geom = feature.GetGeometryRef()
perim = geom.Boundary().Length()
feature.SetField("Perimeter", perim)
outlayer.SetFeature(feature)
# close everything
outlayer = outds = feature = None
# create a ring geometry from the extent of the merged layer
ring.AddPoint(ext[0], ext[2])
ring.AddPoint(ext[1], ext[2])
ring.AddPoint(ext[1], ext[3])
ring.AddPoint(ext[0], ext[3])
ring.AddPoint(ext[0], ext[2])
# convert to polygon
poly.AddGeometry(ring)
# save to shapefile
outlayer = outds.CreateLayer("extent", layer.GetSpatialRef())
feature = ogr.Feature(outlayer.GetLayerDefn())
feature.SetGeometry(poly)
outlayer.CreateFeature(feature)
outds = outlayer = feature = None
Code:
from osgeo import ogr
# open shapefile
layer = ds.GetLayer()
# get extent
ext = layer.GetExtent()
# get a single feature
feature = layer.GetFeature(1)
# loop over all features in a layer
for feature in layer:
print(feature.GetField("FID"))
# create new shapefile
driver = ogr.GetDriverByName("ESRI Shapefile")
# copy layer
outlayer = ds.CopyLayer(layer, "out")
# create a new attribute field
newfield = ogr.FieldDefn("Perimeter", ogr.OFTReal)
newfield.SetWidth(10)
newfield.SetPrecision(3)
outlayer.CreateField(newfield)
# get the perimeter of each polygon
for feature in outlayer:
geom = feature.GetGeometryRef()
perim = geom.Boundary().Length()
feature.SetField("Perimeter", perim)
outlayer.SetFeature(feature)
# close everything
outlayer = outds = feature = None
# create a ring geometry from the extent of the merged layer
ring.AddPoint(ext[0], ext[2])
ring.AddPoint(ext[1], ext[2])
ring.AddPoint(ext[1], ext[3])
ring.AddPoint(ext[0], ext[3])
ring.AddPoint(ext[0], ext[2])
# convert to polygon
poly.AddGeometry(ring)
# save to shapefile
outlayer = outds.CreateLayer("extent", layer.GetSpatialRef())
feature = ogr.Feature(outlayer.GetLayerDefn())
feature.SetGeometry(poly)
outlayer.CreateFeature(feature)
outds = outlayer = feature = None
Комментарии