app/django/contrib/gis/utils/ogrinfo.py
changeset 323 ff1a9aa48cfd
equal deleted inserted replaced
322:6641e941ef1e 323:ff1a9aa48cfd
       
     1 """
       
     2 This module includes some utility functions for inspecting the layout
       
     3 of a GDAL data source -- the functionality is analogous to the output
       
     4 produced by the `ogrinfo` utility.
       
     5 """
       
     6 
       
     7 from django.contrib.gis.gdal import DataSource
       
     8 from django.contrib.gis.gdal.geometries import GEO_CLASSES
       
     9 
       
    10 def ogrinfo(data_source, num_features=10):
       
    11     """
       
    12     Walks the available layers in the supplied `data_source`, displaying
       
    13     the fields for the first `num_features` features.
       
    14     """
       
    15 
       
    16     # Checking the parameters.
       
    17     if isinstance(data_source, str):
       
    18         data_source = DataSource(data_source)
       
    19     elif isinstance(data_source, DataSource):
       
    20         pass
       
    21     else:
       
    22         raise Exception, 'Data source parameter must be a string or a DataSource object.'
       
    23 
       
    24     for i, layer in enumerate(data_source):
       
    25         print "data source : %s" % data_source.name
       
    26         print "==== layer %s" % i
       
    27         print "  shape type: %s" % GEO_CLASSES[layer.geom_type.num].__name__
       
    28         print "  # features: %s" % len(layer)
       
    29         print "         srs: %s" % layer.srs
       
    30         extent_tup = layer.extent.tuple
       
    31         print "      extent: %s - %s" % (extent_tup[0:2], extent_tup[2:4])
       
    32         print "Displaying the first %s features ====" % num_features
       
    33 
       
    34         width = max(*map(len,layer.fields))
       
    35         fmt = " %%%ss: %%s" % width
       
    36         for j, feature in enumerate(layer[:num_features]):
       
    37             print "=== Feature %s" % j
       
    38             for fld_name in layer.fields:
       
    39                 type_name = feature[fld_name].type_name
       
    40                 output = fmt % (fld_name, type_name)
       
    41                 val = feature.get(fld_name)
       
    42                 if val:
       
    43                     if isinstance(val, str):
       
    44                         val_fmt = ' ("%s")'
       
    45                     else:
       
    46                         val_fmt = ' (%s)'
       
    47                     output += val_fmt % val
       
    48                 else:
       
    49                     output += ' (None)'
       
    50                 print output
       
    51 
       
    52 # For backwards compatibility.
       
    53 sample = ogrinfo