-
Notifications
You must be signed in to change notification settings - Fork 2
/
floodplainAnalysis.py
88 lines (84 loc) · 4.98 KB
/
floodplainAnalysis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#--------------------------------------------------------------------------------------------------------------------------------------------------------------#
# Name: Floodplain Analysis
#
#
# Purpose: Module selects any building footprint features that contain the SARA facility. If any building footprint features are selected,
# a test is performed to check if they intersect the Floodplain layer. In any event, messages are logged to tool and to a text file.
#
# Author: Patrick McKinney
#
# Created: 02/28/2019
#
# Updated: 05/9/2019
#
# Copyright: (c) Cumberland County GIS 2019
#
# Disclaimer: CUMBERLAND COUNTY ASSUMES NO LIABILITY ARISING FROM USE OF THESE MAPS OR DATA. THE MAPS AND DATA ARE PROVIDED WITHOUT
# WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE.
# Furthermore, Cumberland County assumes no liability for any errors, omissions, or inaccuracies in the information provided regardless
# of the cause of such, or for any decision made, action taken, or action not taken by the user in reliance upon any maps or data provided
# herein. The user assumes the risk that the information may not be accurate.
#-----------------------------------------------------------------------------------------------------------------------------------------------------------#
# import modules
import arcpy, os, errorLogger
def intersectFloodplainTest(projected_point,lon,lat,results_text_file):
"""Tests whether the building footprint for the SARA site intersects a floodplain"""
try:
# file geodatabase containing data:
geodata_gdb = r'C:\GIS\Geodata.gdb'
# building footprints layer
blgd_footprints = os.path.join(geodata_gdb, 'Building_Footprints_2008')
# floodplains
floodplain_districts = os.path.join(geodata_gdb, 'FEMA_Floodplains_2009')
# placeholder for contents of text file storing estimate population
text_file_contents = ''
# message to write to text file and arcPy info window
message = ''
# create feature layers
arcpy.MakeFeatureLayer_management(blgd_footprints,'Building_Footprints')
arcpy.MakeFeatureLayer_management(floodplain_districts,'Floodplains')
arcpy.MakeFeatureLayer_management(projected_point,'SARA_Site')
# select building footprint that contains SARA Site
arcpy.SelectLayerByLocation_management('Building_Footprints', 'CONTAINS', 'SARA_Site')
# get count of selected features
features_count = int(arcpy.GetCount_management('Building_Footprints')[0])
# if no features selected, add warning message
if features_count == 0:
# add warning message
message = 'No Building Footprints contain the SARA Site located at latitude: {}; longitude: {}'.format(lat,lon)
arcpy.AddWarning('\n{}'.format(message))
text_file_contents += '\n{}\n'.format(message)
# if a building footprint is selected, test if it intersects a floodplain
else:
arcpy.SelectLayerByLocation_management('Building_Footprints', 'INTERSECT', 'Floodplains', selection_type='SUBSET_SELECTION')
# get count of selected features
features_count = int(arcpy.GetCount_management('Building_Footprints')[0])
# if no features selected, add warning message
if features_count == 0:
# add message
message = 'The building footprint for the SARA Site located at latitude: {}; longitude: {}, does not intersect a floodplain'.format(lat,lon)
arcpy.AddMessage('\n{}'.format(message))
text_file_contents += '\n{}\n'.format(message)
else:
message = 'The building footprint for the SARA Site located at latitude: {}; longitude: {}, intersects a floodplain'.format(lat,lon)
arcpy.AddWarning('\n{}'.format(message))
text_file_contents += '\n{}\n'.format(message)
# If an error occurs running geoprocessing tool(s) capture error and write message
# handle error outside of Python system
except EnvironmentError as e:
arcpy.AddError('\nAn error occured running this tool. Please provide the GIS Department the following error messages:')
# call error logger method
errorLogger.PrintException(e)
# handle exception error
except Exception as e:
arcpy.AddError('\nAn error occured running this tool. Please provide the GIS Department the following error messages:')
# call error logger method
errorLogger.PrintException(e)
finally:
# write message to log file
try:
with open(results_text_file, 'a') as f:
f.write(str(text_file_contents))
except:
arcpy.AddError('\nThere was an error writing the floodplain analysis results message to the project text file')