Saturday, July 8, 2017

Python - Wetland Mitigation & Evaluation process

This script is created for Wetland Mitigation & Evaluation process. NJ transit assets/property were intersected with wetlands from different organisation.

# Import arcpy module
import arcpy
from arcpy import env
from arcpy.sa import *
import numpy as np

arcpy.env.overwriteOutput = True

arcpy.env.workspace = arcpy.GetParameterAsText(0)
##ws = arcpy.env.workspace = r"W:\Projects\NJ_Transit\WetlandsEvaluation\PhaseI\IdentifiedParcels\Rail\NJCL\NJCL.gdb"

#Local variable
WMA = "WMA"
HUC8 = "HUC8"
HUC14 = "HUC14"

for fc in arcpy.ListFeatureClasses("*Parcels"):
    print fc
    # Process: Intersect
    inFeatures = [fc, "WMA", "HUC8", "HUC14"]
    intersectOutput = "WHH_" + str(fc)
    arcpy.Intersect_analysis(inFeatures, intersectOutput, "ALL", "", "INPUT")

    # Process: Delete Field
    arcpy.DeleteField_management(intersectOutput, "FID_NWI_Wetlands_ClippedToParcels;ACRES;SHAPE_Leng;FID_HUC8;FID_WMA;DEPWMAS_;DEPWMAS_ID")

    # Process: Add Geometry Attributes
    arcpy.AddGeometryAttributes_management(intersectOutput, "AREA;PERIMETER_LENGTH", "FEET_US", "SQUARE_FEET_US", "PROJCS['NAD_1983_UTM_Zone_18N',GEOGCS['GCS_North_American_1983',DATUM['D_North_American_1983',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',1640416.666666667],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',-75.0],PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Foot_US',0.3048006096012192]]")

VB - Field calculator

Field calculator

xxxxxxxxxxxxxxxxxxxx

** This script generates "1" for the whole number contours and rest 0 to symbolize the contours in a better way.

def myCalc(val):
  if (val % 1 == 0):
    return 1
  else:
    return 0
__esri_field_calculator_splitter__
myCalc( !CONTOUR!)


xxxxxxxxxxxxxxxxxxxx

** Merge rows as per the column criteria

def myCalc(fld,mg):
  mer = mg
  global merge
  if (fld <=12):
    merge = mer
    return mer
  else:
    return merge
__esri_field_calculator_splitter__
myCalc( !FloodDepth!, !MergeItem! )

xxxxxxxxxxxxxxxxxxxx

**Changing Labels

def myCalc(num):
  if (num == 1 ):
    return "0-1"
  elif num == 2:
    return "1-2"
  elif num == 3:
    return "2-3"
  elif num == 4:
    return "3-4"
  elif num == 5:
    return "4-5"
  elif num == 6:
    return "5+"
__esri_field_calculator_splitter__
myCalc( !FloodDepth! )

Python - Video Creation by automation of images

This script is created to create a video by automation of images generated from the facility processing.


import arcpy
import datetime
import os

mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "New Data Frame")[0]
timeLayer = arcpy.mapping.Layer(r"C:\Project\Data\Accidents.lyr")
arcpy.mapping.AddLayer(df, timeLayer, "AUTO_ARRANGE")
df.time.resetTimeExtent()
df.time.timeWindowUnits = "DAYS"
df.time.timeWindow = 7
df.time.currentTime = datetime.datetime(2008, 10, 1)
endTime = datetime.datetime(2008, 10, 31)
interval = arcpy.time.EsriTimeDelta(1, 'weeks')

while df.time.currentTime <= endTime:
    # An example str(newTime) would be: "2008-01-29 02:19:59"
    # The following line splits the string at the space and takes the first
    # item in the resulting string.
    fileName = str(df.time.currentTime).split(" ")[0] + ".png"
    arcpy.mapping.ExportToPNG(mxd, os.path.join(r"C:\Project\Output", fileName))
    df.time.currentTime = df.time.currentTime + interval
del mxd, timeLayer


# Local variables:
v41 = "G:\\BEMIS\\CSSEWS\\Animation\\41"
Animation3_avi = "G:\\BEMIS\\CSSEWS\\Animation\\41\\Animation3.avi"

# Process: Raster To Video
arcpy.RasterToVideo_conversion(v41, Animation3_avi, "JPG", "Microsoft Video 1", "TIME", "168", "50")

SQL - Data Deletion process

This script is used to delete the column data from the files generated from the facility processing python script.


ORIGINAL SQL SCRIPT:
DECLARE @MyDate varchar(30);
SELECT @MyDate = '2016-08-03 00:12:00'

use CSSEWS_MMC_20160623;
delete from FORECASTSTAGE         WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from FORECASTTIME          WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from FORECASTSTAGEOD       WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from FORECASTTIMEOD        WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from assetsforecast        WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from forecastfloodext      WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from eventtrackline        WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from eventtrackpoint       WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
delete from eventwindpoly         WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
END

REVISED SQL SCRIPT:
DECLARE @MyDate varchar(30);
SELECT @MyDate = '2016-08-03 00:12:00'
DECLARE @Deleted_Rows INT;
DECLARE @Total_Rows INT;
SET @Total_Rows = 0;
SET @Deleted_Rows = 1;

use CSSEWS_MMC_20160623;
WHILE (@Deleted_Rows > 0)
  BEGIN
  delete top(3000) from FORECASTSTAGE         WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from FORECASTTIME          WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from FORECASTSTAGEOD       WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from FORECASTTIMEOD        WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from assetsforecast        WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from forecastfloodext      WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from eventtrackline        WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from eventtrackpoint       WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
  SET @Total_Rows = @Deleted_Rows
  delete top(3000) from eventwindpoly         WHERE  (ForecastTime < CONVERT(DATETIME, @MyDate, 102));
  SET @Deleted_Rows = @Total_Rows + @@ROWCOUNT;
END

Python - Frequency interval for columns

This script is useful to determine the frequency of interval for several columns.In my case, I have created this script to determine the water surface elevation difference for various scenarios for particular intervals.

import arcpy
import re
#Modify the below paths.
InputTable=r"W:\Projects\NJ_Transit\FloodAnalysis\RBDAnalysis\XLS\Deltas.gdb\STVpts"
fields = ['F1Diff100y','F2Diff100y','F3Diff100y','F4Diff50yr','F5Diff50yr','F6Diff50yr','F7Diff10yr','F8Diff10yr','F9Diff10yr']
OutputCSV = r"W:\Projects\NJ_Transit\FloodAnalysis\RBDAnalysis\XLS\WDD.txt"

f = open(OutputCSV,'w')
f.write("Fields\Range (includes the lower limit and exclutes the upper limit),")
f.write("Less than -3.0,")
f.write("-3.0 to -2.5,")
f.write("-2.5 than -2.0,")
f.write("-2.0 than -1.5,")
f.write("-1.5 to -1.0,")
f.write("-1.0 to -0.83,")
f.write("-0.83 to -0.67,")
f.write("-0.67 to -0.5,")
f.write("-0.5 to 0,")
f.write("Equals to 0,")
f.write("0 to 0.5,")
f.write("0.5 to 0.67,")
f.write("0.67 to 0.83,")
f.write("0.83 to 1.0,")
f.write("1.0 to 1.5,")
f.write("1.5 to 2.0,")
f.write("2.0 to 2.5,")
f.write("2.5 to 3.0,")
f.write("Greater Than or Equal to 3.0")
#range value depends upon the number of fields.
for i in range(9):
  count1 = 0
  count2 = 0
  count3 = 0
  count4 = 0
  count5 = 0
  count6 = 0
  count7 = 0
  count8 = 0
  count9 = 0
  count10 = 0
  count11 = 0
  count12 = 0
  count13 = 0
  count14 = 0
  count15 = 0
  count16 = 0
  count17 = 0
  count18 = 0
  count19 = 0
  with arcpy.da.SearchCursor(InputTable,fields) as cursor:
    for row in cursor:
      if row[i] < -3.0:
        count1 += 1
      elif row[i] >= -3.0 and row[i] < -2.5:
        count2 += 1
      elif row[i] >= -2.5 and row[i] < -2.0:
        count3 += 1
      elif row[i] >= -2.0 and row[i] < -1.5:
        count4 += 1
      elif row[i] >= -1.5 and row[i] < -1.0:
        count5 += 1
      elif row[i] >= -1.0 and row[i] < -0.83:
        count6 += 1
      elif row[i] >= -0.83 and row[i] < -0.67:
        count7 += 1
      elif row[i] >= -0.67 and row[i] < -0.5:
        count8 += 1
      elif row[i] >= -0.5 and row[i] < 0:
        count9 += 1
      elif row[i] == 0:
        count10 += 1
      elif row[i] > 0 and row[i] <= 0.5:
        count11 += 1
      elif row[i] > 0.5 and row[i] <= 0.67:
        count12 += 1
      elif row[i] > 0.67 and row[i] <= 0.83:
        count13 += 1
      elif row[i] > 0.83 and row[i] <= 1.0:
        count14 += 1
      elif row[i] > 1.0 and row[i] <= 1.5:
        count15 += 1
      elif row[i] > 1.5 and row[i] <= 2.0:
        count16 += 1
      elif row[i] > 2.0 and row[i] <= 2.5:
        count17 += 1
      elif row[i] > 2.5 and row[i] <= 3.0:
        count18 += 1
      elif row[i] > 3.0:
        count19 += 1
    f.write("\n" + str(fields[i])+ ",")
    f.write(str(count1)+ ",")
    f.write(str(count2)+ ",")
    f.write(str(count3)+ ",")
    f.write(str(count4)+ ",")
    f.write(str(count5)+ ",")
    f.write(str(count6)+ ",")
    f.write(str(count7)+ ",")
    f.write(str(count8)+ ",")
    f.write(str(count9)+ ",")
    f.write(str(count10)+ ",")
    f.write(str(count11)+ ",")
    f.write(str(count12)+ ",")
    f.write(str(count13)+ ",")
    f.write(str(count14)+ ",")
    f.write(str(count15)+ ",")
    f.write(str(count16)+ ",")
    f.write(str(count17)+ ",")
    f.write(str(count18)+ ",")
    f.write(str(count19))
f.close()
print "CSV Created"