<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: PLease Help - Viewshed - Why do my results seem incorrect??? in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/please-help-viewshed-why-do-my-results-seem/m-p/679257#M52634</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;same here. I calculate viewsheds for Wind power plants. I got several points with OFFSETA (180m : the hight of the rotor) and OFFSETB (2m : the hight of an Observer) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Also mys results are not very realistic. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I notice this: the results differ according to the position oft the point in the raster cell. LL corner vs. UR corner of the raster cell makes a huge difference.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My thoughts: a "lee effect" by rhe raster cell itself with the OFFSETA&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;According to your experience that the 2nd floor sees lesser than the 1st floor I presume that the viewshed tool didn't work propperly with the OFFSETA - with points as an Input! &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I changed the input: a polyline between the points togehter with the same parameters (OFFSET ...).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The result was more the way I expected it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Another way is to skip the OFFSETA Parameter. At your obs. point add the floor height to the bare earth elevation raster.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Friedemann Wagner , Geograph, M.A.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Regionalverband Südlicher Oberrhein,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Reichsgrafenstra�?e 19, 79102 Freiburg&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Tel.: +49(0)761/ 70327-24&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; ------------------------------------------------------- &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;BLOCKQUOTE&gt;rralbritton;340310 wrote:&lt;BR /&gt;I've written a script that calculates the oceanfront viewshed of a parcel for both the first and second floor. The script runs fine, however, the results seem incorrect - mainly that a second floor viewshed is significantly less then the first floor which seems really off. Am I doing something incorrectly in my script?&lt;/BLOCKQUOTE&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note - there a two rasters being used in this script, a lidar raster that contains elevations of the buildings, and a lidar bare earth elevation raster that is being used to calculate the bare earth elevation height of each parcel. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also - my script is to long to post the entire thing, so i've attached it to this post as well. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The general methodology:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Loop through the observation point layer and select each point one by one&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2. Select the observation points building footprint that it intersects with and convert to a temporary raster. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3. Set the elevation of the parcel building footprint to zero and merge with a lidar raster (integer, grid).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4. Using a bare earth lidar elevation raster (interger, GRID format) use the summary statistics tool to calculate the average elevation of the building foot print.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5. Update the SPOT value in the observation point file with the average bare earth elevation of the building footprint.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;6. Set the OFFSETA value to correct height (10 ft. for first floor - 20 ft. for second floor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;7. Calculate a temporary viewshed using a lidar elevation raster (integer, grid) that contains the merged temporary parcel raster. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;8. Convert results to polygon and clip to 1 mile buffer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;9. Calculate viewshed in degrees.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 12 Dec 2013 06:10:36 GMT</pubDate>
    <dc:creator>MartinSchoner</dc:creator>
    <dc:date>2013-12-12T06:10:36Z</dc:date>
    <item>
      <title>PLease Help - Viewshed - Why do my results seem incorrect???</title>
      <link>https://community.esri.com/t5/python-questions/please-help-viewshed-why-do-my-results-seem/m-p/679256#M52633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I've written a script that calculates the oceanfront viewshed of a parcel for both the first and second floor. The script runs fine, however, the results seem incorrect - mainly that a second floor viewshed is significantly less then the first floor which seems really off. Am I doing something incorrectly in my script?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note - there a two rasters being used in this script, a lidar raster that contains elevations of the buildings, and a lidar bare earth elevation raster that is being used to calculate the bare earth elevation height of each parcel. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also - my script is to long to post the entire thing, so i've attached it to this post as well. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The general methodology:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Loop through the observation point layer and select each point one by one&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2. Select the observation points building footprint that it intersects with and convert to a temporary raster. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3. Set the elevation of the parcel building footprint to zero and merge with a lidar raster (integer, grid).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4. Using a bare earth lidar elevation raster (interger, GRID format) use the summary statistics tool to calculate the average elevation of the building foot print.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5. Update the SPOT value in the observation point file with the average bare earth elevation of the building footprint.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;6. Set the OFFSETA value to correct height (10 ft. for first floor - 20 ft. for second floor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;7. Calculate a temporary viewshed using a lidar elevation raster (integer, grid) that contains the merged temporary parcel raster. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;8. Convert results to polygon and clip to 1 mile buffer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;9. Calculate viewshed in degrees. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
import arcpy, os, shutil, datetime
from arcpy import env
from arcpy.sa import*

#set workspaces
arcpy.env.workspace = arcpy.GetParameterAsText(0) 
outputWorkspace = arcpy.GetParameterAsText(1) 
arcpy.env.overwriteOutput = True

#Variables
ObsPts = arcpy.GetParameterAsText(2)
footprint =&amp;nbsp; arcpy.GetParameterAsText(3) 
Elevation = arcpy.GetParameterAsText(4)
BareElevation = arcpy.GetParameterAsText(5)
Ocean = arcpy.GetParameterAsText(6)
FloorField = arcpy.GetParameterAsText(7) 
Year = arcpy.GetParameterAsText(8)

def Viewshed (LAYER, FC, HEIGHT, FLOOR, FOLDER):
&amp;nbsp;&amp;nbsp;&amp;nbsp; """Returns the viewshed, in degrees for each input observation point,
&amp;nbsp;&amp;nbsp;&amp;nbsp; for first (10ft) and second (20ft) floors."""
&amp;nbsp;&amp;nbsp;&amp;nbsp; #FOLDER = Intermediate files that can be deleted
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; before = getTime()#Gets the time each viewshed analysis starts
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Select observation points one by one
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Starting viewshed analysis...")
&amp;nbsp;&amp;nbsp;&amp;nbsp; RangeCount = int(arcpy.GetCount_management(LAYER).getOutput(0))
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CalculateField_management(LAYER,"OFFSETA",HEIGHT,"PYTHON_9.3")
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("Observation point heights have been set to "+str(HEIGHT)+" ft.")
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for points in range (0,RangeCount):

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("Calculating viewshed for "+str(RangeCount)+" points, for floor number "+str(FLOOR))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FID = "FID=%s" % (points)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Get bare earth elevation of parcel
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByAttribute_management(LAYER,"NEW_SELECTION",FID)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByLocation_management(footprintFL,"INTERSECT",LAYER)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outExtractByMask = ExtractByMask(BareElevation,footprintFL)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outExtractByMask.save(FOLDER+"\\tempfp_"+str(FID)[4:])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ElevAvg = ElevAvgTables+"\\avgelev_"+str(FID)[4:]+".dbf"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(outExtractByMask,ElevAvg,[["VALUE","MEAN"]])#gets mean bare earth elevation value of parcel
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(ElevAvg,"Pt_FID","SHORT")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CalculateField_management(ElevAvg,"Pt_FID",FID[4:])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddJoin_management(LAYER,"FID",ElevAvg,"Pt_FID","KEEP_COMMON")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Field1 = os.path.basename(FC).split(".")[0]+".SPOT"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Field2 = "!"+os.path.basename(ElevAvg).split(".")[0]+".MEAN_VALUE!"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CalculateField_management(LAYER,Field1,Field2,"PYTHON_9.3")#adds teh mean earth bare elevation value to SPOT field in point layer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.RemoveJoin_management(LAYER)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace=arcpy.GetParameterAsText(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Set parcel elevation to 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByAttribute_management(LAYER,"NEW_SELECTION",FID)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByLocation_management(footprintFL,"INTERSECT",LAYER)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RastFootprint = FOLDER+"\\fp_"+str(FID)[4:].split(".")[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.PolygonToRaster_conversion(footprintFL,"FID",RastFootprint,"MAXIMUM_AREA","",6)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outIsNull = IsNull(RastFootprint) #Identify NoData Areas
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outIsNull.save(FOLDER+"\\"+str(FID)[4:]+"_null")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outCon = Con(outIsNull,Elevation,0) #Use Con tool to change building footprint to elevation of 0 while leaving all other building footprints as is
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outCon.save(FOLDER+"\\"+str(FID)[4:]+"_con")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #perform viewshed analysis
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Changing elevation footprint to bare earth elevation for point "+str(FID))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Performing Viewshed Analysis for point "+str(FID))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outViewshed = FOLDER+"/"+"view_"+str(FID)[4:].split(".")[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Viewshed_3d(outCon,LAYER,outViewshed,1)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #convert viewshed to polygon
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Converting viewshed"+str(FID)+" to polygon")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutPoly = FOLDER+"/"+os.path.basename(outViewshed).split(".")[0]+"_poly.shp"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.RasterToPolygon_conversion(outViewshed,OutPoly)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #buffer selected viewpoint
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Buffering point "+str(FID))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outBuffer = FOLDER+"/buffer_"+str(FID)[4:].split(".")[0]+".shp"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(LAYER,outBuffer,"1 mile")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Clip buffer to Ocean
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Clipping point "+str(FID)+" buffer to ocean")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferClip = FOLDER+"/buffer_clipped"+str(FID)[4:].split(".")[0]+".shp"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_analysis(outBuffer, Ocean, BufferClip)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Intersect viewshed Poly to Clipped Observation Point Buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Intersecting polygon viewshed" +str(FID)+ "with clipped buffer")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewshedClip = Final_Floor_Viewsheds+"/FinalView_Flr"+str(FLOOR)+"_"+str(FID)[4:].split(".")[0]+".shp"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Intersect_analysis([BufferClip,OutPoly],ViewshedClip)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(ViewshedClip,"LENGTH","DOUBLE")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CalculateField_management(ViewshedClip,"LENGTH","!SHAPE.length@miles!","PYTHON_9.3")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Run Summary Statistics for each viewshed
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SetProgressorLabel("Running summary statistics and calculating viewshed in degrees for "+str(FID))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SumTab = SummaryTables+"/summary_"+str(FLOOR)+"_"+str(FID)[4:].split(".")[0]+".dbf"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatsField = [["LENGTH","MEAN"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CaseField = ["GRIDCODE","ID","SPOT","OFFSETA",FloorField] #will need to make the id field user input
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(ViewshedClip,SumTab,StatsField,CaseField)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Add Field and Caluclate Viewshed in degrees
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(SumTab,"FLR_RAN","SHORT")#will hold the floor number currently being analyzed - 1 or 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(SumTab,"VIEW_"+Year,"DOUBLE")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CalculateField_management(SumTab,"VIEW_"+Year,"((!MEAN_LENGT!/6.28)*180)","PYTHON_9.3")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CalculateField_management(SumTab,"FLR_RAN",FLOOR)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uc = arcpy.UpdateCursor(SumTab)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; View = "VIEW_"+Year
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for line in uc:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if line.GRIDCODE ==0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line.setValue(View,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uc.updateRow(line)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del line
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del uc

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = int(arcpy.GetCount_management(SumTab).getOutput(0))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if count == 2:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uc=arcpy.UpdateCursor (SumTab)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for line in uc:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if line.GRIDCODE ==0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uc.deleteRow(line)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del line
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del uc

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByAttribute_management(LAYER,"CLEAR_SELECTION")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByAttribute_management(footprintFL,"CLEAR_SELECTION")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("The viewshed for point "+str(FID)[4:]+" of "+str(RangeCount)+" on floor number "+str(FLOOR)+" is complete")

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; after = getTime()#get time viewshed completed for individual point
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; diffTime(before,after)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("***An error occured while processing observation point "+str(FID)+"\nPlease refer to the error log located in "+outputWorkspace+" for details.***\n")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByAttribute_management(LAYER,"CLEAR_SELECTION")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 

TotalBefore = getTime()
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#Create Featue Layers
arcpy.SetProgressorLabel("Creating feature layers")
PointsFL = outName(ObsPts,"_Lyr")
footprintFL = outName(footprint,"_Lyr")
arcpy.MakeFeatureLayer_management(ObsPts, PointsFL)
arcpy.MakeFeatureLayer_management(footprint,footprintFL)
&amp;nbsp;&amp;nbsp; 
Viewshed (PointsFL, ObsPts, 10, 1, IntermediateFiles)

&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Oct 2013 18:18:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/please-help-viewshed-why-do-my-results-seem/m-p/679256#M52633</guid>
      <dc:creator>RachelAlbritton</dc:creator>
      <dc:date>2013-10-29T18:18:36Z</dc:date>
    </item>
    <item>
      <title>Re: PLease Help - Viewshed - Why do my results seem incorrect???</title>
      <link>https://community.esri.com/t5/python-questions/please-help-viewshed-why-do-my-results-seem/m-p/679257#M52634</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;same here. I calculate viewsheds for Wind power plants. I got several points with OFFSETA (180m : the hight of the rotor) and OFFSETB (2m : the hight of an Observer) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Also mys results are not very realistic. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I notice this: the results differ according to the position oft the point in the raster cell. LL corner vs. UR corner of the raster cell makes a huge difference.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My thoughts: a "lee effect" by rhe raster cell itself with the OFFSETA&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;According to your experience that the 2nd floor sees lesser than the 1st floor I presume that the viewshed tool didn't work propperly with the OFFSETA - with points as an Input! &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I changed the input: a polyline between the points togehter with the same parameters (OFFSET ...).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The result was more the way I expected it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Another way is to skip the OFFSETA Parameter. At your obs. point add the floor height to the bare earth elevation raster.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Friedemann Wagner , Geograph, M.A.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Regionalverband Südlicher Oberrhein,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Reichsgrafenstra�?e 19, 79102 Freiburg&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Tel.: +49(0)761/ 70327-24&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; ------------------------------------------------------- &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;BLOCKQUOTE&gt;rralbritton;340310 wrote:&lt;BR /&gt;I've written a script that calculates the oceanfront viewshed of a parcel for both the first and second floor. The script runs fine, however, the results seem incorrect - mainly that a second floor viewshed is significantly less then the first floor which seems really off. Am I doing something incorrectly in my script?&lt;/BLOCKQUOTE&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note - there a two rasters being used in this script, a lidar raster that contains elevations of the buildings, and a lidar bare earth elevation raster that is being used to calculate the bare earth elevation height of each parcel. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also - my script is to long to post the entire thing, so i've attached it to this post as well. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The general methodology:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Loop through the observation point layer and select each point one by one&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2. Select the observation points building footprint that it intersects with and convert to a temporary raster. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3. Set the elevation of the parcel building footprint to zero and merge with a lidar raster (integer, grid).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4. Using a bare earth lidar elevation raster (interger, GRID format) use the summary statistics tool to calculate the average elevation of the building foot print.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5. Update the SPOT value in the observation point file with the average bare earth elevation of the building footprint.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;6. Set the OFFSETA value to correct height (10 ft. for first floor - 20 ft. for second floor)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;7. Calculate a temporary viewshed using a lidar elevation raster (integer, grid) that contains the merged temporary parcel raster. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;8. Convert results to polygon and clip to 1 mile buffer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;9. Calculate viewshed in degrees.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Dec 2013 06:10:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/please-help-viewshed-why-do-my-results-seem/m-p/679257#M52634</guid>
      <dc:creator>MartinSchoner</dc:creator>
      <dc:date>2013-12-12T06:10:36Z</dc:date>
    </item>
  </channel>
</rss>

