[gdal-dev] Reading S57 Extents from Python
Mike Slinn
mslinn at mslinn.com
Wed Apr 16 20:04:01 EDT 2008
Below is a heavily modified version of Frank's get_soundg.py sample
program. It dumps out rather more information than the original. A few
questions:
1. layer.GetExtent() does not seem to return anything useful (lines
58-61). Is GetExtent() not implemented? Is there another way to
efficiently obtain the extents of the visible entities on a layer?
2. Do Points and Features need to be Destroy()'d (line 74-76)? Those
Python classes have no Destroy() methods.
Mike
------------------------------------------------------------------------
try:
from osgeo import osr, ogr
except ImportError:
import osr, ogr
import string, sys
def usage():
print 'Usage: read_s57.py <s57file>\n'
sys.exit(1)
def dumpFields(layerDefn):
"""Dump all fields in layer"""
field_count = layerDefn.GetFieldCount()
for fld_index in range(field_count):
fd = layerDefn.GetFieldDefn(fld_index)
print " Field %s; type %d" % (fd.GetName(), fd.GetType())
def dumpS57(s57filename):
ds = ogr.Open(s57filename)
print str(ds.GetLayerCount()) + " layers found:"
for index in range(ds.GetLayerCount()):
layer = ds.GetLayer(index)
extents = layer.GetExtent()
layerDefn = layer.GetLayerDefn()
print " Layer %s is of type %d and has %d fields:" % \
(layerDefn.GetName(), layerDefn.GetGeomType(), layerDefn.GetFieldCount())
dumpFields(layerDefn)
#print dir(extents) # doesn't show any methods ... is GetExtent() not implemented?
#print " Extents: (" + \
#extents.MinX + ", " + extents.MinY + ") to (" + \
#extents.MaxX + ", " + extents.MaxY + ") " #+ "; " + layer.GetLayerDefn()
layer_soundg = ds.GetLayerByName('SOUNDG')
print "=== Layer SOUNDG features ==="
field_count = layer_soundg.GetLayerDefn().GetFieldCount()
feat = layer_soundg.GetNextFeature()
while feat is not None:
multi_geom = feat.GetGeometryRef()
for iPnt in range(multi_geom.GetGeometryCount()):
pnt = multi_geom.GetGeometryRef(iPnt)
print " Lat, long: (%.3f, %.3f); depth: %.0f (units?)" % (pnt.GetX(), pnt.GetY(), pnt.GetZ())
for fld_index in range(field_count):
print " Field #%d: %s" % (fld_index, feat.GetField(fld_index))
#if pnt is not None:
# pnt.Destroy() # causes error: about to Destroy unowned geometry
#feat.Destroy() # causes error: about to Destroy unowned geometry
feat = layer_soundg.GetNextFeature()
ds.Destroy()
if __name__ == '__main__':
if len(sys.argv) != 2:
usage()
dumpS57(sys.argv[1])
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20080416/e69681e7/attachment.html
More information about the gdal-dev
mailing list