Skip to content

Commit 17f4fad

Browse files
Add files via upload
1 parent 4d6b46d commit 17f4fad

File tree

6 files changed

+214
-140
lines changed

6 files changed

+214
-140
lines changed

ArcGISProWrapperBegrensSkade_Excavation.py

Lines changed: 65 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -123,49 +123,76 @@
123123
structure_field = None
124124
status_field = None
125125

126-
############## SET PROJECTION ###########################
127-
working_proj = Utils_arcpy.getProjCodeFromFC(building_polys_fl)
126+
############## GET INPUT PROJECTIONS ####################
127+
building_proj = Utils_arcpy.getProjCodeFromFC(building_polys_fl)
128128
excavation_proj = Utils_arcpy.getProjCodeFromFC(excavation_polys_fl)
129129

130-
######## PROJECT EXCAVATION POLY IF NECESSARY ###########
131-
excavation_polys_projected = False
132-
if excavation_proj != working_proj:
133-
arcpy.AddMessage("Projecting excavation polygon..")
134-
excavation_polys_projected = output_folder + os.sep + "exc_proj.shp"
135-
arcpy.Project_management(excavation_polys_fl, excavation_polys_projected, working_proj)
136-
excavation_polys_fl = excavation_polys_projected
130+
### GET EXCAVATION ANS BUILDINGS ON SAME PROJECTION #####
131+
excavation_polys_matched = False
132+
if excavation_proj != building_proj:
133+
arcpy.AddMessage("Matching input projections before clip..")
134+
excavation_polys_matched = output_folder + os.sep + "exc_match.shp"
135+
arcpy.Project_management(excavation_polys_fl, excavation_polys_matched, building_proj)
136+
excavation_polys_fl = excavation_polys_matched
137137

138138
################ GET EXCAVATION INFO #####################
139139
excavation_outline_as_json = Utils_arcpy.getConstructionAsJson(excavation_polys_fl)
140-
buildingsClipExtent = Utils_arcpy.getBuildingsClipExtentFromConstruction(excavation_outline_as_json, CALCULATION_RANGE, working_proj, logger)
140+
buildingsClipExtent = Utils_arcpy.getBuildingsClipExtentFromConstruction(excavation_outline_as_json, CALCULATION_RANGE, building_proj, logger)
141141

142142
################ EXTRACTING BUILDINGS ##################
143143
buildings_clip = output_folder + os.sep + "buildings_clip.shp"
144144
logger.debug("TIME - Starting extraction of buildings")
145145
Utils_arcpy.extractBuildingsFromFL(building_polys_fl, buildingsClipExtent, buildings_clip, logger)
146146
logger.info("TIME - Done extraction of buildings.")
147147

148+
#arcpy.SelectLayerByAttribute_management(building_polys_fl, "CLEAR_SELECTION")
149+
150+
###### PROJECT BUILDING AND EXCAVATION TO OUTPUT ########
151+
building_polys_projected = False
152+
excavation_polys_projected = False
153+
buildings_clip_projected = False
154+
155+
if building_proj != output_proj:
156+
157+
arcpy.AddMessage("Projecting bulidings polygon..")
158+
buildings_clip_projected = output_folder + os.sep + "buil_proj.shp"
159+
arcpy.Project_management(buildings_clip, buildings_clip_projected, output_proj)
160+
building_polys_fl = buildings_clip_projected
161+
162+
arcpy.AddMessage("Projecting excavation polygon..")
163+
excavation_polys_projected = output_folder + os.sep + "exc_proj.shp"
164+
arcpy.Project_management(excavation_polys_fl, excavation_polys_projected, output_proj)
165+
excavation_polys_fl = excavation_polys_projected
166+
167+
excavation_outline_as_json = Utils_arcpy.getConstructionAsJson(excavation_polys_fl)
168+
169+
else:
170+
building_polys_fl = buildings_clip
171+
172+
173+
148174
############### HANDELING OF INPUT RASTER ################
149175

176+
dtb_proj_raster = False
150177
if bLongterm:
151178
# If necessary, projects raster to the working projection
152179
raster_desc = arcpy.Describe(dtb_raster)
153180
dtb_raster_proj = raster_desc.SpatialReference.PCSCode
154-
if (str(dtb_raster_proj) != str(working_proj)):
181+
if (str(dtb_raster_proj) != str(output_proj)):
155182
logger.info("START raster projection")
156-
arcpy.AddMessage("Projecting raster...")
183+
arcpy.AddMessage("Projecting bedrock raster...")
157184
dtb_proj_raster = "temp_raster"
158185
if os.path.exists(dtb_proj_raster):
159186
os.remove(dtb_proj_raster)
160-
arcpy.ProjectRaster_management(dtb_raster, dtb_proj_raster, working_proj)
187+
arcpy.ProjectRaster_management(dtb_raster, dtb_proj_raster, output_proj)
161188
dtb_raster = dtb_proj_raster
162189
logger.info("DONE raster projection")
163190

164191
# Create a tif file from the raster. Necessary for input to GDAL.
165192
raster_desc = arcpy.Describe(dtb_raster)
166193
if raster_desc.extension != ".tif":
167194
logger.info("START raster to TIFF conversion")
168-
arcpy.AddMessage("Converting raster...")
195+
arcpy.AddMessage("Converting bedrock raster...")
169196
dtb_raster_tiff = output_folder + os.sep + raster_desc.name + ".tif"
170197
#Delete existing rasters with the same name
171198
if os.path.exists(dtb_raster_tiff):
@@ -181,11 +208,10 @@
181208
try:
182209
outputFiles = BegrensSkade.mainBegrensSkade_Excavation(
183210
logger,
184-
buildings_clip,
211+
building_polys_fl,
185212
excavation_outline_as_json,
186213
output_folder,
187214
feature_name,
188-
working_proj,
189215
output_proj,
190216
bShortterm,
191217
excavation_depth=excavation_depth,
@@ -213,6 +239,19 @@
213239
arcpy.AddError(sys.exc_info()[1])
214240
sys.exit()
215241

242+
if dtb_proj_raster:
243+
try:
244+
arcpy.Delete_management(output_folder + os.sep + dtb_proj_raster + ".tif")
245+
except:
246+
arcpy.AddWarning("Failed to delete temporary bedrock raster!")
247+
248+
arcpy.Delete_management(buildings_clip)
249+
if excavation_polys_matched:
250+
arcpy.Delete_management(excavation_polys_matched)
251+
if building_polys_projected:
252+
arcpy.Delete_management(building_polys_projected)
253+
if buildings_clip_projected:
254+
arcpy.Delete_management(buildings_clip_projected)
216255
if excavation_polys_projected:
217256
arcpy.Delete_management(excavation_polys_projected)
218257

@@ -221,8 +260,6 @@
221260
walls_Shapefile_result = outputFiles[1]
222261
corners_Shapefile_result = outputFiles[2]
223262

224-
arcpy.SelectLayerByAttribute_management(building_polys_fl, "CLEAR_SELECTION")
225-
226263
arcpy.AddMessage("Adding symbology layer to map...")
227264
p = arcpy.mp.ArcGISProject("CURRENT")
228265
pMap = p.activeMap
@@ -235,7 +272,7 @@
235272
addWalls = Utils.setBooleanParameter(arcpy.GetParameter(28))
236273
addCorners = Utils.setBooleanParameter(arcpy.GetParameter(29))
237274

238-
lyr_corners = lyr_path + os.sep + "CORNER_SV_mm.lyrx"
275+
lyr_corners = lyr_path + os.sep + "CORNER_SV.lyrx"
239276
lyr_walls = lyr_path + os.sep + "WALL_ANGLE.lyrx"
240277
lyr_building_sv_max = lyr_path + os.sep + "BUILDING_TOTAL_SV_MAX_mm.lyrx"
241278
lyr_building_a_max = lyr_path + os.sep + "BUILDING_TOTAL_ANGLE_MAX.lyrx"
@@ -250,15 +287,18 @@
250287
Utils_arcpy.addLayerToGroup(pMap, corners_Shapefile_result, lyr_corners, lyr_group)
251288
if addWalls:
252289
Utils_arcpy.addLayerToGroup(pMap, walls_Shapefile_result, lyr_walls, lyr_group)
253-
if addImpactSettl:
254-
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_sv_max, lyr_group)
255-
if addImpactAngle:
256-
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_a_max, lyr_group)
257290
if bVulnerability:
258-
if addRiskSettl:
259-
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_risk_sv, lyr_group)
260291
if addRiskAngle:
261292
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_risk_a,lyr_group)
293+
if addRiskSettl:
294+
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_risk_sv, lyr_group)
295+
if addImpactAngle:
296+
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_a_max, lyr_group)
297+
if addImpactSettl:
298+
Utils_arcpy.addLayerToGroup(pMap, buildings_Shapefile_result, lyr_building_sv_max, lyr_group)
299+
300+
#arcpy.SelectLayerByAttribute_management(buildings_Shapefile_result, "CLEAR_SELECTION")
301+
262302

263303
logger.info("------------------------------DONE-------------------------------")
264304

ArcGISProWrapperBegrensSkade_ImpactMap.py

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,35 @@
7272
# contour_interval = arcpy.GetParameter(20)
7373

7474
############## SET PROJECTION ###########################
75-
working_proj = Utils_arcpy.getProjCodeFromFC(excavation_polys_fl)
75+
exc_proj = Utils_arcpy.getProjCodeFromFC(excavation_polys_fl)
76+
77+
###### PROJECT BUILDING AND EXCAVATION TO OUTPUT ########
78+
excavation_polys_projected = False
79+
if exc_proj != output_proj:
80+
arcpy.AddMessage("Projecting excavation polygon..")
81+
excavation_polys_projected = output_folder + os.sep + "exc_proj.shp"
82+
arcpy.Project_management(excavation_polys_fl, excavation_polys_projected, output_proj)
83+
excavation_polys_fl = excavation_polys_projected
7684

7785
################ GET EXCAVATION INFO #####################
7886
excavation_outline_as_json = Utils_arcpy.getConstructionAsJson(excavation_polys_fl)
7987
excavation_desc = arcpy.Describe(excavation_polys_fl)
8088

8189
############### HANDELING OF INPUT RASTER ################
90+
# If necessary, projects raster to the working projection
91+
raster_desc = arcpy.Describe(dtb_raster)
92+
dtb_raster_proj = raster_desc.SpatialReference.PCSCode
93+
dtb_proj_raster = False
94+
if (str(dtb_raster_proj) != str(output_proj)):
95+
logger.info("START raster projection")
96+
arcpy.AddMessage("Projecting raster...")
97+
dtb_proj_raster = "proj_raster"
98+
if os.path.exists(dtb_proj_raster):
99+
os.remove(dtb_proj_raster)
100+
arcpy.ProjectRaster_management(dtb_raster, dtb_proj_raster, output_proj)
101+
dtb_raster = dtb_proj_raster
102+
logger.info("DONE raster projection")
103+
82104
#Checks if raster area and requested resolution is too demanding and if clipping is necessary
83105
logger.debug("START raster clipping")
84106
for row in arcpy.da.SearchCursor(excavation_polys_fl, ['SHAPE@']):
@@ -89,15 +111,16 @@
89111
ymax = extent.YMax + CALCULATION_RANGE
90112
extent_str = str(xmin)+ " " + str(ymin) + " " + str(xmax) + " " + str(ymax)
91113
area = abs(ymax-ymin)*abs(xmax-xmin)
114+
dtb_clip_raster = False
92115
if float(output_resolution)/area < 10/820000:
93116
arcpy.AddWarning("High output resolution and/or large raster - clipping raster!")
94-
clip_raster = "clip_raster"
95-
arcpy.management.Clip(dtb_raster, extent_str, clip_raster)
96-
dtb_raster = clip_raster
117+
dtb_clip_raster = "clip_raster"
118+
arcpy.management.Clip(dtb_raster, extent_str, dtb_clip_raster)
119+
dtb_raster = dtb_clip_raster
97120
logger.debug("DONE raster clipping")
98121

99122
#Resampels raster to the specified resolution
100-
dtb_raster_resample = "dtb_raster_resample"
123+
dtb_raster_resample = "resampl_raster"
101124
res = str(output_resolution) + " " + str(output_resolution)
102125
logger.debug("START raster resampling")
103126
arcpy.Resample_management(dtb_raster, dtb_raster_resample, res, "NEAREST")
@@ -107,19 +130,6 @@
107130
n_rows = arcpy.management.GetRasterProperties(dtb_raster, "ROWCOUNT")
108131
logger.info("Dtb raster cols and rows after resampling: " + str(n_cols) + ", " + str(n_rows) + "\n")
109132

110-
# If necessary, projects raster to the working projection
111-
raster_desc = arcpy.Describe(dtb_raster)
112-
dtb_raster_proj = raster_desc.SpatialReference.PCSCode
113-
if (str(dtb_raster_proj) != str(working_proj)):
114-
logger.info("START raster projection")
115-
arcpy.AddMessage("Projecting raster...")
116-
dtb_proj_raster = "temp_raster"
117-
if os.path.exists(dtb_proj_raster):
118-
os.remove(dtb_proj_raster)
119-
arcpy.ProjectRaster_management(dtb_raster, dtb_proj_raster, working_proj)
120-
dtb_raster = dtb_proj_raster
121-
logger.info("DONE raster projection")
122-
123133
#Create a tif file from the raster. Necessary for input to GDAL.
124134
raster_desc = arcpy.Describe(dtb_raster)
125135
if raster_desc.extension != ".tif":
@@ -131,7 +141,9 @@
131141
os.remove(dtb_raster_tiff)
132142
arcpy.RasterToOtherFormat_conversion(raster_desc.name, output_folder,"TIFF")
133143
dtb_raster_str = dtb_raster_tiff
134-
logger.info("DONE raster to TIFF conversion")
144+
logger.info("DONE raster to TIFF conversion")
145+
else:
146+
dtb_raster_str = output_folder + os.sep + raster_desc.name + ".tif"
135147

136148
############ RUN BEGRENS SKADE CORE FUNCTIONS ##############
137149
arcpy.AddMessage("Running mainBegrensSkade_ImpactMap...")
@@ -142,7 +154,6 @@
142154
output_folder,
143155
output_name,
144156
CALCULATION_RANGE,
145-
working_proj,
146157
output_proj,
147158
dtb_raster_str,
148159
pw_reduction_curve,
@@ -167,6 +178,25 @@
167178
#################### HANDLE THE RESULT #######################
168179
result_raster = output_folder + os.sep + output_name + ".tif"
169180

181+
if excavation_polys_projected:
182+
arcpy.Delete_management(excavation_polys_projected)
183+
184+
if dtb_proj_raster:
185+
try:
186+
arcpy.Delete_management(output_folder + os.sep + dtb_proj_raster + ".tif")
187+
except:
188+
arcpy.AddWarning("Failed to delete temporary raster (projected) ")
189+
if dtb_clip_raster:
190+
try:
191+
arcpy.Delete_management(output_folder + os.sep + dtb_clip_raster + ".tif")
192+
except:
193+
arcpy.AddWarning("Failed to delete temporary raster (clip) ")
194+
if dtb_raster_resample:
195+
try:
196+
arcpy.Delete_management(output_folder + os.sep + dtb_raster_resample + ".tif")
197+
except:
198+
arcpy.AddWarning("Failed to delete temporary raster (resample) ")
199+
170200
#Parameter 19: Beregn kotelinjer - bContours
171201
#Parameter 20: Ekvidistanse - contour_interval
172202
#if bContours:

0 commit comments

Comments
 (0)