/usr/lib/python3/dist-packages/rasterio/rio/info.py is in python3-rasterio 0.36.0-2build5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | """Fetch and edit raster dataset metadata from the command line."""
import json
import click
from . import options
import rasterio
@click.command(short_help="Print information about a data file.")
@options.file_in_arg
@click.option('--meta', 'aspect', flag_value='meta', default=True,
help="Show data file structure (default).")
@click.option('--tags', 'aspect', flag_value='tags',
help="Show data file tags.")
@click.option('--namespace', help="Select a tag namespace.")
@click.option('--indent', default=None, type=int,
help="Indentation level for pretty printed output")
# Options to pick out a single metadata item and print it as
# a string.
@click.option('--count', 'meta_member', flag_value='count',
help="Print the count of bands.")
@click.option('-t', '--dtype', 'meta_member', flag_value='dtype',
help="Print the dtype name.")
@click.option('--nodata', 'meta_member', flag_value='nodata',
help="Print the nodata value.")
@click.option('-f', '--format', '--driver', 'meta_member', flag_value='driver',
help="Print the format driver.")
@click.option('--shape', 'meta_member', flag_value='shape',
help="Print the (height, width) shape.")
@click.option('--height', 'meta_member', flag_value='height',
help="Print the height (number of rows).")
@click.option('--width', 'meta_member', flag_value='width',
help="Print the width (number of columns).")
@click.option('--crs', 'meta_member', flag_value='crs',
help="Print the CRS as a PROJ.4 string.")
@click.option('--bounds', 'meta_member', flag_value='bounds',
help="Print the boundary coordinates "
"(left, bottom, right, top).")
@click.option('-r', '--res', 'meta_member', flag_value='res',
help="Print pixel width and height.")
@click.option('--lnglat', 'meta_member', flag_value='lnglat',
help="Print longitude and latitude at center.")
@click.option('--stats', 'meta_member', flag_value='stats',
help="Print statistics (min, max, mean) of a single band "
"(use --bidx).")
@click.option('--checksum', 'meta_member', flag_value='checksum',
help="Print integer checksum of a single band "
"(use --bidx).")
@click.option('-v', '--tell-me-more', '--verbose', is_flag=True,
help="Output extra information.")
@options.bidx_opt
@options.masked_opt
@click.pass_context
def info(ctx, input, aspect, indent, namespace, meta_member, verbose, bidx,
masked):
"""Print metadata about the dataset as JSON.
Optionally print a single metadata item as a string.
"""
verbosity = ctx.obj.get('verbosity')
mode = 'r' if (verbose or meta_member == 'stats') else 'r-'
try:
with rasterio.Env(CPL_DEBUG=(verbosity > 2)):
with rasterio.open(input, mode) as src:
info = src.profile
info['transform'] = info['affine'][:6]
del info['affine']
info['shape'] = info['height'], info['width']
info['bounds'] = src.bounds
proj4 = src.crs.to_string()
if proj4.startswith('+init=epsg'):
proj4 = proj4.split('=')[1].upper()
info['crs'] = proj4
info['res'] = src.res
info['colorinterp'] = [src.colorinterp(i).name
for i in src.indexes]
if proj4 != '':
info['lnglat'] = src.lnglat()
if verbose:
stats = [{'min': float(b.min()),
'max': float(b.max()),
'mean': float(b.mean())
} for b in src.read(masked=masked)]
info['stats'] = stats
info['checksum'] = [src.checksum(i) for i in src.indexes]
if aspect == 'meta':
if meta_member == 'stats':
band = src.read(bidx, masked=masked)
click.echo('%f %f %f' % (
float(band.min()),
float(band.max()),
float(band.mean())))
elif meta_member == 'checksum':
click.echo(str(src.checksum(bidx)))
elif meta_member:
if isinstance(info[meta_member], (list, tuple)):
click.echo(" ".join(map(str, info[meta_member])))
else:
click.echo(info[meta_member])
else:
click.echo(json.dumps(info, indent=indent))
elif aspect == 'tags':
click.echo(
json.dumps(src.tags(ns=namespace), indent=indent))
except Exception:
raise click.Abort()
|