Source code for generalization.n100.building.finalizing_buildings

# Importing modules
import arcpy

# Importing custom files
from custom_tools.general_tools import custom_arcpy
from env_setup import environment_setup
from file_manager.n100.file_manager_buildings import Building_N100


# Importing timing decorator
from custom_tools.decorators.timing_decorator import timing_decorator


[docs] def main(): """ What: Separates building points and polygons into their respective features they are going to be delivered as. How: removing_points_in_and_close_to_urban_areas: Makes sure there are no building points near urban areas, except for hospital, churches and tourist huts. selecting_all_tourist_cabins: Selects tourist cabins from building points to be delivered as a separate feature. building_polygons_to_line: Converts building polygons to lines, to creat omrisslinje feature. selecting_hospital_and_churches_for_pictogram_featureclass: Selects building points categorized as hospitals or churches for inclusion in a pictogram feature. assigning_final_file_names: Copies final feature classes to their respective output file locations in the "final_outputs.gdb" """ environment_setup.main() removing_points_in_and_close_to_urban_areas() selecting_all_tourist_cabins() building_polygons_to_line() selecting_hospital_and_churches_for_pictogram_featureclass() assigning_final_file_names()
[docs] @timing_decorator def removing_points_in_and_close_to_urban_areas(): """ Makes sure there are no building points near urban areas, except for hospital, churches and tourist huts. """ # Defining sql expression to select urban areas urban_areas_sql_expr = "objtype = 'Tettbebyggelse' Or objtype = 'Industriområde' Or objtype = 'BymessigBebyggelse'" # Selecting urban areas from n100 using sql expression custom_arcpy.select_attribute_and_make_feature_layer( input_layer=Building_N100.data_selection___land_cover_n100_input_data___n100_building.value, expression=urban_areas_sql_expr, output_name=Building_N100.finalizing_buildings___urban_areas___n100_building.value, ) # Selecting building points that are further away than 50 Meters from urban areas custom_arcpy.select_location_and_make_permanent_feature( input_layer=Building_N100.removing_overlapping_polygons_and_points___merging_final_points___n100_building.value, overlap_type=custom_arcpy.OverlapType.WITHIN_A_DISTANCE, select_features=Building_N100.finalizing_buildings___urban_areas___n100_building.value, search_distance="50 Meters", inverted=True, output_name=Building_N100.finalizing_buildings___points_not_close_to_urban_areas___n100_building.value, ) # Selecting building points that are CLOSE to urban areas custom_arcpy.select_location_and_make_permanent_feature( input_layer=Building_N100.removing_overlapping_polygons_and_points___merging_final_points___n100_building.value, overlap_type=custom_arcpy.OverlapType.WITHIN_A_DISTANCE, select_features=Building_N100.finalizing_buildings___urban_areas___n100_building.value, search_distance="50 Meters", output_name=Building_N100.finalizing_buildings___points_too_close_to_urban_areas___n100_building.value, ) # Selecting hospital and churches and tourist huts - to merge back in with the points further than 50 Merers away from urban areas custom_arcpy.select_attribute_and_make_permanent_feature( input_layer=Building_N100.finalizing_buildings___points_too_close_to_urban_areas___n100_building.value, expression="byggtyp_nbr IN (970, 719, 671, 956)", output_name=Building_N100.finalizing_buildings___selecting_hospital_and_churches_in_urban_areas___n100_building.value, ) # Merging hospital and churches in urban areas with points that are further away from urban areas than 50 Meters arcpy.management.Merge( inputs=[ Building_N100.finalizing_buildings___selecting_hospital_and_churches_in_urban_areas___n100_building.value, Building_N100.finalizing_buildings___points_not_close_to_urban_areas___n100_building.value, ], output=Building_N100.finalizing_buildings___all_points_not_in_urban_areas___n100_building.value, )
[docs] @timing_decorator def selecting_all_tourist_cabins(): """ Selects tourist cabins from building points to be delivered as a separate feature. """ selecting_tourist_cabins = "byggtyp_nbr = 956" # Selecting all building points categorized as tourist cabins custom_arcpy.select_attribute_and_make_permanent_feature( input_layer=Building_N100.finalizing_buildings___all_points_not_in_urban_areas___n100_building.value, expression=selecting_tourist_cabins, output_name=Building_N100.finalizing_buildings___tourist_cabins___n100_building.value, ) # Selecting all other building points (not tourist cabins) custom_arcpy.select_attribute_and_make_permanent_feature( input_layer=Building_N100.finalizing_buildings___all_points_not_in_urban_areas___n100_building.value, expression=selecting_tourist_cabins, output_name=Building_N100.finalizing_buildings___all_points_except_tourist_cabins___n100_building.value, inverted=True, )
[docs] def building_polygons_to_line(): """ Converts building polygons to lines, to creat omrisslinje feature. """ arcpy.management.PolygonToLine( in_features=Building_N100.removing_overlapping_polygons_and_points___polygons_NOT_intersecting_road_buffers___n100_building.value, out_feature_class=Building_N100.finalizing_buildings___polygon_to_line___n100_building.value, neighbor_option="IDENTIFY_NEIGHBORS", ) arcpy.analysis.SpatialJoin( target_features=Building_N100.finalizing_buildings___polygon_to_line___n100_building.value, join_features=Building_N100.removing_overlapping_polygons_and_points___polygons_NOT_intersecting_road_buffers___n100_building.value, out_feature_class=Building_N100.finalizing_buildings___polygon_to_line_joined_fields___n100_building.value, match_option="SHARE_A_LINE_SEGMENT_WITH", ) arcpy.CalculateField_management( in_table=Building_N100.finalizing_buildings___polygon_to_line_joined_fields___n100_building.value, field="objtype", expression='"Takkant"', expression_type="PYTHON3", )
[docs] def selecting_hospital_and_churches_for_pictogram_featureclass(): """ Selects building points categorized as hospitals or churches for inclusion in a pictogram feature. """ custom_arcpy.select_attribute_and_make_permanent_feature( input_layer=Building_N100.finalizing_buildings___all_points_except_tourist_cabins___n100_building.value, expression="byggtyp_nbr IN (970, 719, 671)", output_name=Building_N100.finalizing_buildings___hospitals_and_churches_pictogram___n100_building.value, )
[docs] @timing_decorator def assigning_final_file_names(): """ Copies final feature classes to their respective output file locations in the "final_outputs.gdb". """ arcpy.management.CopyFeatures( Building_N100.finalizing_buildings___tourist_cabins___n100_building.value, Building_N100.TuristHytte.value, ) arcpy.management.CopyFeatures( Building_N100.finalizing_buildings___all_points_except_tourist_cabins___n100_building.value, Building_N100.BygningsPunkt.value, ) arcpy.management.CopyFeatures( Building_N100.removing_overlapping_polygons_and_points___polygons_NOT_intersecting_road_buffers___n100_building.value, Building_N100.Grunnriss.value, ) arcpy.management.CopyFeatures( Building_N100.finalizing_buildings___polygon_to_line_joined_fields___n100_building.value, Building_N100.OmrissLinje.value, ) arcpy.management.CopyFeatures( Building_N100.finalizing_buildings___hospitals_and_churches_pictogram___n100_building.value, Building_N100.Piktogram.value, )
if __name__ == "__main__": main()