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
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
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
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
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
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
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
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
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
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
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
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)
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()))