Posted

Python GIS tools with a long processing-time benefit from a testing mode, which quickly verifies the tool functionality. Usually this is achieved by using default parameter values and/or a small test-dataset.

The code below implements a test option into a Python tool, leveraging the argparse subparser functionality.

From Command Line, the tool can be run in either a test (running with default parameters) or full mode (running with user-provided parameters).

import argparse


def model_core(args): 
    """function with core functionality. Takes args Namespace as single argument"""
    print(args.a * args.b)


def f_test(f_args):
    """run model core with default arguments for testing"""
    print('testing with default values")
    model_core(f_args)


def f_full(f_args):
    """run model core with user defined arguments"""
    print('running with user provided values")
    model_core(f_args)

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()  

parser_test = subparsers.add_parser('test')  # Create testing sub-parser
parser_test.set_defaults(func=f_test, a=10, b=20)  # Tie sub-parser to a function

parser_full = subparsers.add_parser('full')  # Create full function sub-parser
parser_full.add_argument('a', type=int)  # Add positional arguments
parser_full.add_argument('b', type=int)  
parser_full.set_defaults(func=f_full)  # Tie sub-parser to a function

args=parser.parse_args()  # Parse arguments from command line
args.func(args)  # Exectute the function associated with the enabled sub-parser

> python my_model.py test
testing with default values
200
> python my_model.py full 2 6
running with user provided values
12

Function and sub-parser are coupled using the set_defaults method. The function is called, and args provided as argument, using the args.func(args) method. For the full sub-parser, all required attributes are provided by the user. The test sub-parser has default values specified, again with the set_defaults method. The model_core function accepts a single Namespace as argument and extracts attributes as parameters where needed.

Author
Categories python, GIS

Posted

Rasterio comes with a Command Line raster calculator called rio calc. Because nothing says look how smart I am as doing stuff in Command Line, it was the tool-of-choice when asked to subtract two geospatial rasters. The docs aren’t too generous with examples, but I got it working as:

rio calc "(- (read 1) (read 2))" input1 input2 output

Author
Categories rasters, gdal

Posted

Dit is een kaart waarop waarop zichtlijnen vanaf het uitkijkpunt bij Hotel de Wageningse Berg zijn getektend. Kijkend vanaf deze plek springen Nijmegen, de kerk van Druten en de voormalige kernreactor bij Dodewaard gelijk in het oog. Met iets meer moeite zijn de de Alticom Toren te Haren, de kerk van Hernen, de brug bij Echteld en industrie van Oss zichtbaar.

De zichtlijnen op deze kaart helpen om objecten in het landschap relatief van elkaar te identificeren. Kruisjes zijn kerktorens, verticale streepjes zijn grote gebouwen, halve rondjes zijn bruggen en een gekanteld kruisje is een molen.

Author
Categories webmaps, outdoors