def main(): try: # Get Attributes from User if debugging == 0: # User input input_features = arcpy.GetParameterAsText(0) input_surface = arcpy.GetParameter(1) output_features = arcpy.GetParameterAsText(2) # script variables aprx = arcpy.mp.ArcGISProject("CURRENT") home_directory = aprx.homeFolder project_ws = aprx.defaultGeodatabase tin_directory = home_directory + "\TINs" else: input_features = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact\Testing.gdb\bridges_test_surfaces' input_surface = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact\ArcHydro\TSDepth\wse_28' output_features = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact\Testing.gdb\bridges_HAS' home_directory = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact' project_ws = home_directory + "\\3DFloodImpact.gdb" tin_directory = home_directory + "\TINs" if os.path.exists(home_directory + "\\p20"): # it is a package home_directory = home_directory + "\\p20" if not os.path.exists(tin_directory): os.makedirs(tin_directory) arcpy.AddMessage("Project Home Directory is: " + home_directory) # set directories layer_directory = home_directory + "\\layer_files" log_directory = home_directory + "\\Logs" if not os.path.exists(log_directory): os.makedirs(log_directory) # rename layer files (for packaging) if os.path.exists(layer_directory): common_lib.rename_file_extension(layer_directory, ".txt", ".lyrx") # Create folders and intermediate gdb, if needed scratch_ws = common_lib.create_gdb(home_directory, "Intermediate.gdb") arcpy.env.workspace = scratch_ws arcpy.env.overwriteOutput = True start_time = time.clock() # check if input exists if arcpy.Exists(input_features): if arcpy.Exists(input_surface): z_values = arcpy.Describe(input_features).hasZ if z_values: # extract the elevation layers bridges, bridge_points = calculate_height_above_water_surface.calculate_height( lc_input_features=input_features, lc_ws=scratch_ws, lc_tin_dir=tin_directory, lc_input_surface=input_surface, lc_output_features=output_features, lc_log_dir=log_directory, lc_debug=verbose, lc_memory_switch=in_memory_switch) if bridges and bridge_points: # add symbology to points and add layer output_layer1 = common_lib.get_name_from_feature_class( bridges) arcpy.MakeFeatureLayer_management( bridges, output_layer1) output_layer2 = common_lib.get_name_from_feature_class( bridge_points) arcpy.MakeFeatureLayer_management( bridge_points, output_layer2) symbology_layer = layer_directory + "\\has_labels.lyrx" if arcpy.Exists(symbology_layer): arcpy.ApplySymbologyFromLayer_management( output_layer2, symbology_layer) else: msg_body = create_msg_body( "Can't find" + symbology_layer + " in " + layer_directory, 0, 0) msg(msg_body, WARNING) arcpy.SetParameter(3, output_layer1) arcpy.SetParameter(4, output_layer2) end_time = time.clock() msg_body = create_msg_body( "calculate_height_above_water_surface completed successfully.", start_time, end_time) msg(msg_body) else: end_time = time.clock() msg_body = create_msg_body( "No bridge surfaces and points created. Exiting...", start_time, end_time) msg(msg_body, WARNING) arcpy.ClearWorkspaceCache_management() if DeleteIntermediateData: fcs = common_lib.listFcsInGDB(scratch_ws) rs = common_lib.list_rasters_in_gdb( scratch_ws, verbose) msg_prefix = "Deleting intermediate data..." msg_body = common_lib.create_msg_body(msg_prefix, 0, 0) common_lib.msg(msg_body) for fc in fcs: arcpy.Delete_management(fc) for r in rs: arcpy.Delete_management(r) else: raise NoRaster else: raise No3DFeatures # end main code except No3DFeatures: # The input has no 3D features # print( '2D features are not supported. Make sure the input layer is a PolygonZ feature class.' ) arcpy.AddError( '2D features are not supported. Make sure the input layer is a PolygonZ feature class.' ) except NoRaster: # Can't find input raster # print("Can't find input raster.") arcpy.AddError("Can't find input raster.") except LicenseError3D: print("3D Analyst license is unavailable") arcpy.AddError("3D Analyst license is unavailable") except NoPointLayer: print("Can't find attachment points layer. Exiting...") arcpy.AddError("Can't find attachment points layer. Exiting...") except MoreThan1Selected: print( "More than 1 line selected. Please select 1 guide line only. Exiting..." ) arcpy.AddError( "More than 1 line selected. Please select 1 guide line only. Exiting..." ) except arcpy.ExecuteError: line, filename, synerror = trace() msg("Error on %s" % line, ERROR) msg("Error in file name: %s" % filename, ERROR) msg("With error message: %s" % synerror, ERROR) msg("ArcPy Error Message: %s" % arcpy.GetMessages(2), ERROR) except FunctionError as f_e: messages = f_e.args[0] msg("Error in function: %s" % messages["function"], ERROR) msg("Error on %s" % messages["line"], ERROR) msg("Error in file name: %s" % messages["filename"], ERROR) msg("With error message: %s" % messages["synerror"], ERROR) msg("ArcPy Error Message: %s" % messages["arc"], ERROR) except: line, filename, synerror = trace() msg("Error on %s" % line, ERROR) msg("Error in file name: %s" % filename, ERROR) msg("with error message: %s" % synerror, ERROR) finally: arcpy.CheckInExtension("3D")
def main(): try: # Get Attributes from User if debugging == 0: # User input input_las_dataset = arcpy.GetParameterAsText(0) class_code = arcpy.GetParameter(1) cell_size = arcpy.GetParameterAsText(2) minimum_bridge_area = arcpy.GetParameterAsText(3) extrapolate_surface = arcpy.GetParameter(4) output_features = arcpy.GetParameterAsText(5) # script variables aprx = arcpy.mp.ArcGISProject("CURRENT") home_directory = aprx.homeFolder project_ws = aprx.defaultGeodatabase else: input_las_dataset = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact\testing.lasd' class_code = 13 cell_size = str(0.5) minimum_bridge_area = str(20) extrapolate_surface = False output_features = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact\Testing.gdb\bridges' home_directory = r'D:\Gert\Work\Esri\Solutions\3DFloodImpact\work2.3\3DFloodImpact' project_ws = home_directory + "\\3DFloodImpact.gdb" if os.path.exists(home_directory + "\\p20"): # it is a package home_directory = home_directory + "\\p20" arcpy.AddMessage("Project Home Directory is: " + home_directory) # set directories layer_directory = home_directory + "\\layer_files" log_directory = home_directory + "\\Logs" if not os.path.exists(log_directory): os.makedirs(log_directory) # ensure numerical input is correct # fail safe for Europe's comma's cell_size = float(re.sub("[,.]", ".", cell_size)) minimum_bridge_area = float(re.sub("[,.]", ".", minimum_bridge_area)) # rename layer files (for packaging) if os.path.exists(layer_directory): common_lib.rename_file_extension(layer_directory, ".txt", ".lyrx") # Create folders and intermediate gdb, if needed scratch_ws = common_lib.create_gdb(home_directory, "Intermediate.gdb") arcpy.env.workspace = scratch_ws arcpy.env.overwriteOutput = True start_time = time.clock() # check if input exists if arcpy.Exists(input_las_dataset): # extract the elevation layers bridges = extract_bridges_from_las.extract( lc_lasd=input_las_dataset, lc_ws=scratch_ws, lc_class_code=class_code, lc_cell_size=float(cell_size), lc_min_bridge_area=float(minimum_bridge_area), lc_extrapolate=extrapolate_surface, lc_output_features=output_features, lc_log_dir=log_directory, lc_debug=verbose, lc_memory_switch=in_memory_switch) if bridges: if arcpy.Exists(bridges): arcpy.AddMessage("Adding Bridges") output_layer1 = common_lib.get_name_from_feature_class( bridges) arcpy.MakeFeatureLayer_management(bridges, output_layer1) arcpy.SetParameter(6, output_layer1) end_time = time.clock() msg_body = create_msg_body( "extract_bridges_from_las completed successfully.", start_time, end_time) msg(msg_body) else: end_time = time.clock() msg_body = create_msg_body( "No bridge surfaces created. Exiting...", start_time, end_time) msg(msg_body, WARNING) else: end_time = time.clock() msg_body = create_msg_body( "No bridge surfaces created. Exiting...", start_time, end_time) msg(msg_body, WARNING) arcpy.ClearWorkspaceCache_management() if DeleteIntermediateData: fcs = common_lib.listFcsInGDB(scratch_ws) rs = common_lib.list_rasters_in_gdb(scratch_ws, verbose) msg_prefix = "Deleting intermediate data..." msg_body = common_lib.create_msg_body(msg_prefix, 0, 0) common_lib.msg(msg_body) for fc in fcs: arcpy.Delete_management(fc) for r in rs: arcpy.Delete_management(r) # end main code except LicenseError3D: print("3D Analyst license is unavailable") arcpy.AddError("3D Analyst license is unavailable") except NoPointLayer: print("Can't find attachment points layer. Exiting...") arcpy.AddError("Can't find attachment points layer. Exiting...") except NoCatenaryLayer: print("Can't find Catenary layer. Exiting...") arcpy.AddError("Can't find Catenary layer. Exiting...") except NoCatenaryOutput: print("Can't create Catenary output. Exiting...") arcpy.AddError("Can't create Catenary output. Exiting...") except NoSwaySurfaceOutput: print("Can't find SwaySurface output. Exiting...") arcpy.AddError("Can't find SwaySurface. Exiting...") except NoGuideLinesLayer: print("Can't find GuideLines output. Exiting...") arcpy.AddError("Can't find GuideLines. Exiting...") except MoreThan1Selected: print( "More than 1 line selected. Please select 1 guide line only. Exiting..." ) arcpy.AddError( "More than 1 line selected. Please select 1 guide line only. Exiting..." ) except NoGuideLinesOutput: print("Can't create GuideLines output. Exiting...") arcpy.AddError("Can't create GuideLines. Exiting...") except arcpy.ExecuteError: line, filename, synerror = trace() msg("Error on %s" % line, ERROR) msg("Error in file name: %s" % filename, ERROR) msg("With error message: %s" % synerror, ERROR) msg("ArcPy Error Message: %s" % arcpy.GetMessages(2), ERROR) except FunctionError as f_e: messages = f_e.args[0] msg("Error in function: %s" % messages["function"], ERROR) msg("Error on %s" % messages["line"], ERROR) msg("Error in file name: %s" % messages["filename"], ERROR) msg("With error message: %s" % messages["synerror"], ERROR) msg("ArcPy Error Message: %s" % messages["arc"], ERROR) except: line, filename, synerror = trace() msg("Error on %s" % line, ERROR) msg("Error in file name: %s" % filename, ERROR) msg("with error message: %s" % synerror, ERROR) finally: arcpy.CheckInExtension("3D")
homeFolder = aprx.homeFolder if os.path.exists(homeFolder + "\\p20"): # it is a package homeFolder = homeFolder + "\\p20" arcpy.AddMessage("Project Home Directory is: " + homeFolder) schemeDirectory = homeFolder+"\\tiling_schemes" # else: # homeFolder = r'D:\Gert\Work\Esri\Solutions\LocalGovernment\3DBaseScenes\work1.3\LocalGovernmentScenes' # schemeDirectory = r'D:\Gert\Work\Esri\Solutions\LocalGovernment\3DBaseScenes\work1.3\LocalGovernmentScenes\tiling_schemes' layerDirectory = homeFolder + "\\layer_files" if os.path.exists(layerDirectory): common_lib.rename_file_extension(layerDirectory, ".txt", ".lyrx") # fail safe for Europese's comma's lercError = float(re.sub("[,.]", ".", userLERC)) scaleLevel = re.sub("[,.]", ".", scaleLevel) outputTilingScheme = GenerateLERCTilingScheme(inputDataSource, cacheDirectory, lercError) arcpy.AddMessage("Created LERC Tiling Scheme with LERC error: "+str(lercError)) tileCache = ManageTileCache(inputDataSource, cacheDirectory, outputTilingScheme, int(scaleLevel)) arcpy.AddMessage("Created Tile Cache...") arcpy.AddMessage("Exporting to Tile Package...") tilePackage = ExportTileCache(inputDataSource, cacheDirectory, tileCache)