diff -r 000000000000 -r 0d40e90630ef web/lib/django/contrib/gis/utils/ogrinfo.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/django/contrib/gis/utils/ogrinfo.py Wed Jan 20 00:34:04 2010 +0100 @@ -0,0 +1,53 @@ +""" +This module includes some utility functions for inspecting the layout +of a GDAL data source -- the functionality is analogous to the output +produced by the `ogrinfo` utility. +""" + +from django.contrib.gis.gdal import DataSource +from django.contrib.gis.gdal.geometries import GEO_CLASSES + +def ogrinfo(data_source, num_features=10): + """ + Walks the available layers in the supplied `data_source`, displaying + the fields for the first `num_features` features. + """ + + # Checking the parameters. + if isinstance(data_source, str): + data_source = DataSource(data_source) + elif isinstance(data_source, DataSource): + pass + else: + raise Exception, 'Data source parameter must be a string or a DataSource object.' + + for i, layer in enumerate(data_source): + print "data source : %s" % data_source.name + print "==== layer %s" % i + print " shape type: %s" % GEO_CLASSES[layer.geom_type.num].__name__ + print " # features: %s" % len(layer) + print " srs: %s" % layer.srs + extent_tup = layer.extent.tuple + print " extent: %s - %s" % (extent_tup[0:2], extent_tup[2:4]) + print "Displaying the first %s features ====" % num_features + + width = max(*map(len,layer.fields)) + fmt = " %%%ss: %%s" % width + for j, feature in enumerate(layer[:num_features]): + print "=== Feature %s" % j + for fld_name in layer.fields: + type_name = feature[fld_name].type_name + output = fmt % (fld_name, type_name) + val = feature.get(fld_name) + if val: + if isinstance(val, str): + val_fmt = ' ("%s")' + else: + val_fmt = ' (%s)' + output += val_fmt % val + else: + output += ' (None)' + print output + +# For backwards compatibility. +sample = ogrinfo