예제 #1
0
def shp2xyz(fshp, fxyz):
    shp = saga_api.SG_Get_Data_Manager().Add_Shapes(unicode(fshp))
    if shp == None or shp.is_Valid() == 0:
        print 'ERROR: loading shapes [' + fshp + ']'
        return 0

    # ------------------------------------
    if os.name == 'nt':  # Windows
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            os.environ['SAGA_32'] + '/tools/io_shapes.dll')
    else:  # Linux
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            os.environ['SAGA_MLB'] + '/libio_shapes.so')

    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('io_shapes'), 2)  # 'Export Shapes to XYZ'
    p = m.Get_Parameters()
    p(saga_api.CSG_String('POINTS')).Set_Value(shp)
    p(saga_api.CSG_String('FILENAME')).Set_Value(saga_api.CSG_String(fxyz))

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    # ------------------------------------
    print 'success'
    return 1
예제 #2
0
def run_grid_create_dummy(File):

    # -----------------------------------
    # Create a dummy grid

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('grid_calculus', 6)

    Tool.Set_Parameter('RADIUS', 25)
    Tool.Set_Parameter('ITERATIONS', 250)
    Tool.Set_Parameter('TARGET_USER_SIZE', 10)
    Tool.Set_Parameter('TARGET_USER_XMAX', 2000)
    Tool.Set_Parameter('TARGET_USER_YMAX', 2000)

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    Grid = Tool.Get_Parameter('TARGET_OUT_GRID').asGrid()

    # -----------------------------------
    # Save dummy to esri ascii grid file

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('io_grid', 0)

    Tool.Set_Parameter('GRID', Grid)
    Tool.Set_Parameter('FILE', File)
    Tool.Set_Parameter('PREC', 2)

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    # -----------------------------------
    print('Success')
    return True
예제 #3
0
def grid_contour(fGrid, fLines):
    Grid = saga_api.SG_Get_Data_Manager().Add_Grid(unicode(fGrid))
    if Grid == None or Grid.is_Valid() == 0:
        print 'ERROR: loading grid [' + fGrid + ']'
        return 0

    # ------------------------------------
    if os.name == 'nt':  # Windows
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            os.environ['SAGA_32'] + '/tools/shapes_grid.dll')
    else:  # Linux
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            os.environ['SAGA_MLB'] + '/libshapes_grid.so')

    zStep = Grid.Get_Range() / 10

    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('shapes_grid'), 5)  # 'Contour Lines from Grid'
    p = m.Get_Parameters()
    p(saga_api.CSG_String('GRID')).Set_Value(Grid)
    p(saga_api.CSG_String('ZSTEP')).Set_Value(zStep)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    # ------------------------------------
    Lines = p(saga_api.CSG_String('CONTOUR')).asShapes()
    Lines.Save(saga_api.CSG_String(fLines))

    print 'success'
    return 1
예제 #4
0
def xyz2shp(fTable):
    table = saga_api.SG_Get_Data_Manager().Add_Table()
    if table.Create(saga_api.CSG_String(fTable)) == 0:
        table.Add_Field(saga_api.CSG_String('X'), saga_api.SG_DATATYPE_Double)
        table.Add_Field(saga_api.CSG_String('Y'), saga_api.SG_DATATYPE_Double)
        table.Add_Field(saga_api.CSG_String('Z'), saga_api.SG_DATATYPE_Double)
        rec = table.Add_Record()
        rec.Set_Value(0, 0)
        rec.Set_Value(1, 0)
        rec.Set_Value(2, 2)
        rec = table.Add_Record()
        rec.Set_Value(0, 0)
        rec.Set_Value(1, 1)
        rec.Set_Value(2, 2)
        rec = table.Add_Record()
        rec.Set_Value(0, 1)
        rec.Set_Value(1, 1)
        rec.Set_Value(2, 1)
        rec = table.Add_Record()
        rec.Set_Value(0, 1)
        rec.Set_Value(1, 0)
        rec.Set_Value(2, 1)

    points = saga_api.SG_Get_Data_Manager().Add_Shapes(
        saga_api.SHAPE_TYPE_Point)

    # ------------------------------------
    if os.name == 'nt':  # Windows
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            os.environ['SAGA_32'] + '/tools/shapes_points.dll')
    else:  # Linux
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            os.environ['SAGA_MLB'] + '/libshapes_points.so')

    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('shapes_points'), 0)  # 'Convert Table to Points'
    p = m.Get_Parameters()
    p(saga_api.CSG_String('TABLE')).Set_Value(table)
    p(saga_api.CSG_String('POINTS')).Set_Value(points)
    p(saga_api.CSG_String('X')).Set_Value(0)
    p(saga_api.CSG_String('Y')).Set_Value(1)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    # ------------------------------------
    points.Save(saga_api.CSG_String(fTable))

    print 'success'
    return 1
def grid_asc2sgrd(fASC):

### load all tool libraries from a directory at once:
#    if os.name == 'nt':    # Windows
#        saga_api.SG_Get_Tool_Library_Manager().Add_Directory(os.environ['SAGA_32' ], 0)
#    else:                  # Linux
#        saga_api.SG_Get_Tool_Library_Manager().Add_Directory(os.environ['SAGA_MLB'], 0)
#    print '__________________'
#    print 'number of loaded libraries: ' + str(saga_api.SG_Get_Tool_Library_Manager().Get_Count())
#    print saga_api.SG_Get_Tool_Library_Manager().Get_Summary(saga_api.SG_SUMMARY_FMT_FLAT_NO_INTERACTIVE).c_str()
#    print '__________________'

    sASC = saga_api.CSG_String(fASC)
    m    = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(saga_api.CSG_String('io_gdal'), 0)

    p    = m.Get_Parameters()
    p(saga_api.CSG_String('FILES')).Set_Value(sASC)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    saga_api.SG_File_Set_Extension(sASC, saga_api.CSG_String('sgrd'))
    if p(saga_api.CSG_String('GRIDS')).asGridList().Get_Grid(0).Save(sASC) == 0:
        print 'ERROR: saving grid [' + sASC + ']'
        return 0

    print 'success'
    return 1
예제 #6
0
def grid_contour(File):

    # ------------------------------------
    Grid = saga_api.SG_Get_Data_Manager().Add_Grid(File)
    if Grid == None or Grid.is_Valid() == False:
        print('Error: loading grid [' + File + ']')
        return False

    # ------------------------------------
    # 'Contour Lines from Grid'

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('shapes_grid', 5)

    Tool.Set_Parameter('GRID', Grid)
    Tool.Set_Parameter('ZSTEP', Grid.Get_Range() / 10.)

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    File = saga_api.CSG_String(File)
    saga_api.SG_File_Set_Extension(File, saga_api.CSG_String('geojson'))
    Tool.Get_Parameter('CONTOUR').asShapes().Save(File)

    # ------------------------------------
    print('Success')
    return True
def run_morphometry(File):
    Grid = saga_api.SG_Get_Data_Manager().Add(File)
    if Grid == None or Grid.is_Valid() == False:
        print('Error: loading grid [' + File + ']')
        return False

    Path = os.path.split(File)[0]

    # -----------------------------------
    # 'Slope, Aspect, Curvature'

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('ta_morphometry', 0)
    Tool.Get_Parameters().Reset_Grid_System()
    Tool.Set_Parameter('ELEVATION', Grid)
    Tool.Set_Parameter(
        'C_CROS', saga_api.SG_Get_Create_Pointer())  # optional grid output
    Tool.Set_Parameter(
        'C_LONG', saga_api.SG_Get_Create_Pointer())  # optional grid output

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    Tool.Get_Parameter('SLOPE').asGrid().Save(Path + '/slope' + '.sg-grd-z')
    Tool.Get_Parameter('ASPECT').asGrid().Save(Path + '/aspect' + '.sg-grd-z')
    Tool.Get_Parameter('C_CROS').asGrid().Save(Path + '/hcurv' + '.sg-grd-z')
    Tool.Get_Parameter('C_LONG').asGrid().Save(Path + '/vcurv' + '.sg-grd-z')

    # -----------------------------------
    # 'Curvature Classification'

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('ta_morphometry', 4)
    Tool.Get_Parameters().Reset_Grid_System()
    Tool.Set_Parameter('DEM', Grid)

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    Tool.Get_Parameter('CLASSES').asGrid().Save(Path + '/ccurv' + '.sg-grd-z')

    # -----------------------------------
    print('Success')
    return True
예제 #8
0
def grid_create_dummy(fASC):

    print '__________________'
    print 'number of loaded libraries: ' + str(
        saga_api.SG_Get_Tool_Library_Manager().Get_Count())
    #print saga_api.SG_Get_Tool_Library_Manager().Get_Summary(saga_api.SG_SUMMARY_FMT_FLAT_NO_INTERACTIVE).c_str()
    print '__________________'

    ### create a dummy DEM:
    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('grid_calculus'), 6)
    print m.Get_Name().c_str()

    p = m.Get_Parameters()
    p(saga_api.CSG_String('RADIUS')).Set_Value(25)
    p(saga_api.CSG_String('ITERATIONS')).Set_Value(250)
    p(saga_api.CSG_String('TARGET_USER_SIZE')).Set_Value(10)
    p(saga_api.CSG_String('TARGET_USER_XMAX')).Set_Value(2000)
    p(saga_api.CSG_String('TARGET_USER_YMAX')).Set_Value(2000)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    dem = p(saga_api.CSG_String('TARGET_OUT_GRID')).asGrid()

    ### save dummy to esri ascii grid file:
    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('io_grid'), 0)
    print m.Get_Name().c_str()

    p = m.Get_Parameters()
    p(saga_api.CSG_String('GRID')).Set_Value(dem)
    p(saga_api.CSG_String('FILE')).Set_Value(saga_api.CSG_String(fASC))
    p(saga_api.CSG_String('PREC')).Set_Value(2)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    print 'success'
    return 1
예제 #9
0
def Initialize(Verbose):
    global bInitialized
    if not bInitialized:
        bInitialized = True
        if os.name == 'nt':  # Windows
            saga_api.SG_Initialize_Environment(True, True,
                                               os.environ['SAGA_PATH'])
        else:  # Linux
            saga_api.SG_Initialize_Environment(True, True)

    if Verbose == True:
        print('_______')
        print('Python-' + sys.version)
        print('SAGA-{:s} (loaded {:d} libraries, {:d} tools)'.format(
            saga_api.SAGA_VERSION,
            saga_api.SG_Get_Tool_Library_Manager().Get_Count(),
            saga_api.SG_Get_Tool_Library_Manager().Get_Tool_Count()))
        print('_______')

    return True
def run_xyz2shp(File):

    # -----------------------------------
    Table = saga_api.SG_Get_Data_Manager().Add_Table(File)

    if Table != None and Table.is_Valid() == True and Table.Get_Count() > 0:
        print('Table loaded: ' + File)

    else:
        Table = saga_api.SG_Get_Data_Manager().Add_Table()

        Table.Add_Field(saga_api.CSG_String('X'), saga_api.SG_DATATYPE_Double)
        Table.Add_Field(saga_api.CSG_String('Y'), saga_api.SG_DATATYPE_Double)
        Table.Add_Field(saga_api.CSG_String('Z'), saga_api.SG_DATATYPE_Double)

        Random = saga_api.CSG_Random()

        for i in range(0, 100):
            Record = Table.Add_Record()
            Record.Set_Value(0, Random.Get_Gaussian(0, 100))
            Record.Set_Value(1, Random.Get_Gaussian(0, 100))
            Record.Set_Value(2, Random.Get_Gaussian(0, 100))

    print('Number of records: ' + str(Table.Get_Count()))

    # -----------------------------------
    # 'Convert Table to Points'

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('shapes_points', 0)

    Tool.Set_Parameter('TABLE', Table)
    Tool.Set_Parameter(    'X',     0)
    Tool.Set_Parameter(    'Y',     1)
    Tool.Set_Parameter(    'Z',     2)
    
    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    if Tool.Get_Parameter('POINTS').asShapes().Save(os.path.split(File)[0] + '/points.geojson') == False:
        print('Error: saving points')
        return False

    # ------------------------------------
    print('Success')
    return True
예제 #11
0
def Initialize(Verbose):
	if os.name == 'nt': # Windows
		Load_Tool_Libraries(os.environ['SAGA_PATH'] + os.sep + 'tools')
	else:               # Linux
		Load_Tool_Libraries('/usr/local/lib/saga')

	if os.getenv('SAGA_TLB') is not None:
		Load_Tool_Libraries(os.environ['SAGA_TLB'])

	if os.getenv('SAGA_MLB') is not None:
		Load_Tool_Libraries(os.environ['SAGA_MLB'])

	if Verbose == True:
		print('_______')
		print('Python - Version ' + sys.version)
		print(saga_api.SAGA_API_Get_Version())
		print('number of loaded libraries: ' + str(saga_api.SG_Get_Tool_Library_Manager().Get_Count()))
		print('_______')

	return True
예제 #12
0
def grid_tpi(fDEM):
    # ------------------------------------
    # initializations

    dem = saga_api.SG_Get_Data_Manager().Add_Grid(unicode(fDEM))
    if dem == None or dem.is_Valid() == 0:
        print 'ERROR: loading grid [' + fDEM + ']'
        return 0
    print 'grid file [' + fDEM + '] has been loaded'

    path = os.path.split(fDEM)[0]
    #    if path == '':
    #        path = './'

    landforms = saga_api.SG_Get_Data_Manager().Add_Grid(dem.Get_System())

    # ------------------------------------
    # 'TPI Based Landform Classification'

    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('ta_morphometry'), 19)
    p = m.Get_Parameters()
    p.Get_Grid_System().Assign(
        dem.Get_System())  # grid tool needs to use conformant grid system!
    p(saga_api.CSG_String('DEM')).Set_Value(dem)
    p(saga_api.CSG_String('LANDFORMS')).Set_Value(landforms)
    p(saga_api.CSG_String('RADIUS_A')).asRange().Set_Range(0, 100)
    p(saga_api.CSG_String('RADIUS_B')).asRange().Set_Range(0, 1000)
    p(saga_api.CSG_String('DW_WEIGHTING')).Set_Value(0)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    landforms.Save(saga_api.CSG_String(path + '/landforms' + '.sg-grd-z'), 0)

    # ------------------------------------
    print 'success'

    return 1
def run_grid_asc2sgrd(File):

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool('io_gdal', 0)

    Tool.Set_Parameter('FILES', File)

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    Grid = Tool.Get_Parameter('GRIDS').asGridList().Get_Grid(0)

    File = saga_api.CSG_String(File)
    saga_api.SG_File_Set_Extension(File, saga_api.CSG_String('sg-grd-z'))

    if Grid.Save(File) == False:
        print('Error: saving grid [' + File.c_str() + ']')
        return False

    # -----------------------------------
    print('Success')
    return True
def grid_tpi(File):

    # ------------------------------------
    Grid = saga_api.SG_Get_Data_Manager().Add_Grid(File)
    if Grid == None or Grid.is_Valid() == False:
        print('Error: loading grid [' + File + ']')
        return False

    # ------------------------------------
    # 'TPI Based Landform Classification'

    Tool = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('ta_morphometry'), 19)

    Tool.Get_Parameters().Reset_Grid_System(
    )  # grid tool needs to use conformant grid system!

    Tool.Set_Parameter('DEM', Grid)
    Tool.Set_Parameter('DW_WEIGHTING', 0)
    Tool.Get_Parameter('RADIUS_A').asRange().Set_Range(
        0., 2. * Grid.Get_Cellsize())
    Tool.Get_Parameter('RADIUS_B').asRange().Set_Range(
        0., 10. * Grid.Get_Cellsize())

    if Tool.Execute() == False:
        print('Error: executing tool [' + Tool.Get_Name().c_str() + ']')
        return False

    Grid = Tool.Get_Parameter('LANDFORMS').asGrid()
    File = os.path.split(File)[0] + '/landforms.sg-grd-z'
    if Grid.Save(File) == False:
        print('Error: saving grid [' + File + ']')
        return False

    # ------------------------------------
    print('Success')
    return True
예제 #15
0
def Load_Tool_Libraries(Directory):
    saga_api.SG_UI_Msg_Lock(True)
    saga_api.SG_Get_Tool_Library_Manager().Add_Directory(Directory, False)
    saga_api.SG_UI_Msg_Lock(False)

    return True
예제 #16
0
def morphometry(fDEM):
    # ------------------------------------
    # initializations

    dem = saga_api.SG_Get_Data_Manager().Add_Grid(unicode(fDEM))
    if dem == None or dem.is_Valid() == 0:
        print 'ERROR: loading grid [' + fDEM + ']'
        return 0
    print 'grid file [' + fDEM + '] ahs been loaded'

    path = os.path.split(fDEM)[0]
    if path == '':
        path = './'

    slope = saga_api.SG_Get_Data_Manager().Add_Grid(dem.Get_System())
    aspect = saga_api.SG_Get_Data_Manager().Add_Grid(dem.Get_System())
    hcurv = saga_api.SG_Get_Data_Manager().Add_Grid(dem.Get_System())
    vcurv = saga_api.SG_Get_Data_Manager().Add_Grid(dem.Get_System())
    ccurv = saga_api.SG_Get_Data_Manager().Add_Grid(dem.Get_System())

    # ------------------------------------
    # 'Slope, Aspect, Curvature'

    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('ta_morphometry'), 0)
    p = m.Get_Parameters()
    p.Get_Grid_System().Assign(
        dem.Get_System())  # grid tool needs to use conformant grid system!
    p(saga_api.CSG_String('ELEVATION')).Set_Value(dem)
    p(saga_api.CSG_String('SLOPE')).Set_Value(slope)
    p(saga_api.CSG_String('ASPECT')).Set_Value(aspect)
    p(saga_api.CSG_String('C_CROS')).Set_Value(hcurv)
    p(saga_api.CSG_String('C_LONG')).Set_Value(vcurv)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    slope.Save(saga_api.CSG_String(path + '/slope' + '.sgrd'))
    aspect.Save(saga_api.CSG_String(path + '/aspect' + '.sgrd'))
    hcurv.Save(saga_api.CSG_String(path + '/hcurv' + '.sgrd'))
    vcurv.Save(saga_api.CSG_String(path + '/vcurv' + '.sgrd'))

    # ------------------------------------
    # 'Curvature Classification'

    m = saga_api.SG_Get_Tool_Library_Manager().Get_Tool(
        saga_api.CSG_String('ta_morphometry'), 4)
    p = m.Get_Parameters()
    p.Get_Grid_System().Assign(
        dem.Get_System())  # grid tool needs to use conformant grid system!
    p(saga_api.CSG_String('DEM')).Set_Value(dem)
    p(saga_api.CSG_String('CLASS')).Set_Value(ccurv)

    if m.Execute() == 0:
        print 'ERROR: executing tool [' + m.Get_Name().c_str() + ']'
        return 0

    ccurv.Save(saga_api.CSG_String(path + '/ccurv' + '.sgrd'))

    # ------------------------------------
    print 'success'

    return 1
예제 #17
0
    return 1


##########################################
if __name__ == '__main__':
    print 'Python - Version ' + sys.version
    print saga_api.SAGA_API_Get_Version()
    print

    if len(sys.argv) != 2:
        print 'Usage: morphometry.py <in: elevation>'
        print '... trying to run with test_data'
        fDEM = './test.sgrd'
    else:
        fDEM = sys.argv[1]
        if os.path.split(fDEM)[0] == '':
            fDEM = './' + fDEM

    saga_api.SG_UI_Msg_Lock(True)
    if os.name == 'nt':  # Windows
        os.environ[
            'PATH'] = os.environ['PATH'] + ';' + os.environ['SAGA_32'] + '/dll'
        saga_api.SG_Get_Tool_Library_Manager().Add_Directory(
            os.environ['SAGA_32'] + '/tools', False)
    else:  # Linux
        saga_api.SG_Get_Tool_Library_Manager().Add_Directory(
            os.environ['SAGA_MLB'], False)
    saga_api.SG_UI_Msg_Lock(False)

    morphometry(fDEM)
예제 #18
0
    if os.name == 'nt':
        if fname[-4:] != '.dll':
            continue
    else:
        if fname[-3:] != '.so':
            continue

    print('parsing {}/{} ...'.format(args.libpath, fname))

    # load library
    if args.skip and util.lib_name_from_so(fname) in args.skip.split(','):
        print('SKIPPING library {} as requested ...'.format(
            util.lib_name_from_so(fname)))
        continue
    else:
        saga_api.SG_Get_Tool_Library_Manager().Add_Library(
            '%s/%s' % (args.libpath, fname))

    # define shortcut to library object
    lib_obj = saga_api.SG_Get_Tool_Library_Manager().Get_Library(0)

    # define unique name for library
    lib_name = ''
    if os.name == 'nt':
        lib_name = util.lib_name_from_so('%s' % fname)
    else:
        lib_name = util.lib_name_from_so('%s/%s' % (args.libpath, fname))

    # define library title as we will use it more than once
    lib_title = '%s - %s' % (util.cstr_2_str(
        lib_obj.Get_Category()), util.cstr_2_str(lib_obj.Get_Name()))