You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.9 KiB
53 lines
1.9 KiB
""" |
|
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
|
|
|