การสร้างบัฟเฟอร์รูปหลายเหลี่ยมตามระดับความสูงโดยใช้ ArcGIS Desktop?


14

สิ่งที่ฉันต้องการทำคือวางบัฟเฟอร์ขนาด 100 ม. ลงบนรูปหลายเหลี่ยม แต่แทนที่จะเป็นบัฟเฟอร์ที่มีความกว้างคงที่ "เมื่ออีกาบิน" ฉันต้องการให้มันไปตามลาดของ Lidar DEM ของฉัน

ฉันมี ArcMap (พร้อมนักวิเคราะห์ 3 มิติ) น่าเศร้าที่ไม่มีส่วนขยายเชิงพื้นที่หรือนักวิเคราะห์เครือข่ายด้วย ArcMap

ฉันหันไปใช้อินเทอร์เน็ตโดยดูจากการวิเคราะห์ความใกล้เคียงการวิเคราะห์ระยะทางและต้นทุนสะสม Anisotropic ดูเหมือนว่าฉันจะต้องทำตารางเวลาและหาว่าจะใช้เวลานานแค่ไหนในการเข้าถึง 100 เมตรจากรูปหลายเหลี่ยม แต่ดูเหมือนว่าจะค่อนข้างย้อนกลับ เครื่องมือเหล่านี้ส่วนใหญ่ดูเหมือนจะถูกสร้างขึ้นเพื่อค้นหาเส้นทางที่ง่ายที่สุดระหว่างสองจุด

มีใครทำแบบนี้มาก่อนหรือไม่


1
เมื่อคุณบอกว่าคุณต้องการที่จะ "ตามเนินเขา" คุณหมายถึงว่าถ้าเซลล์ DEM มีความยาว 1 เมตรในแนวลาดชันคุณจะนับว่าเป็น 1 เมตรในบัฟเฟอร์ แต่ถ้าด้านใดด้านหนึ่งสูงกว่าอีก 1 เมตร จะนับว่าเป็น 1.41m (ระยะทางตามพื้นผิว) หรือไม่
Dan C

ในกรณีนี้เราต้องแสดงให้เห็น 100 เมตรจากพื้นที่ชุ่มน้ำและมีสันด้านข้าง ฉันคิดว่าฉันสามารถใช้ Raster Calculator ของ QGIS ในการแปลงเปอร์เซ็นต์ความชันเป็นเมตรตามขนาดเซลล์ของแรสเตอร์ ฉันไม่รู้ว่าจะเพิ่มสิ่งเหล่านั้นได้สูงถึง 100 เมตรโดยไม่ตรวจสอบแต่ละพิกเซลด้วยตนเอง แต่ใช่นั่นคือสิ่งที่ฉันกำลังพูดถึง
R. Laird

คำตอบ:


7

วิธีแก้ปัญหาสำหรับสิ่งที่คุณอธิบายเมื่อไม่มีนักวิเคราะห์เชิงพื้นที่:

arcpy.Buffer_analysis("target","../buffer.shp", "100 Meters")
arcpy.FeatureVerticesToPoints_management("buffer","../points.shp","ALL")
arcpy.AddField_management("points", "PID", "LONG")
arcpy.CalculateField_management("points", "PID", "[FID]")
arcpy.Near_analysis("points", "target","LOCATION")
arcpy.MakeXYEventLayer_management("points","NEAR_X","NEAR_Y","points_Layer")
arcpy.CopyFeatures_management("points_Layer","../from_points.shp")
arcpy.Merge_management("from_points;points","../pairs.shp")
arcpy.PointsToLine_management("pairs","../lines_2D.shp", "PID")
arcpy.InterpolateShape_3d("DEM","lines_2D","../lines_3D.shp")
arcpy.AddField_management("lines_3D", "XY", "TEXT")

เปิดใช้งานบนฟิลด์ใหม่ (แก้ไขเมื่อวันที่ 05/02/2018):

def getPoint(shp):
 part=shp.getPart(0)
 n=len(part);L=0
 for i in xrange(n):
  p=part.getObject(i)
  x=p.X;y=p.Y;z=p.Z
  if i >0:
    dX=X-x;dY=Y-y;dZ=Z-z;dL=pow((dX*dX+dY*dY+dZ*dZ),0.5);L+=dL
  if L>=100: break
  X,Y,Z=x,y,z 
 xNew=x+dX/dL*(L-100);yNew=y+dY/dL*(L-100)
 return '%s %s' %(xNew,yNew)
#-----------------
getPoint( !Shape!)

เพิ่มเขตข้อมูล X และ Y ลงใน lines_3D และเติมโดยใช้:

!XY!.split(" ")[0] and !XY!.split(" ")[1]

สร้างเลเยอร์ XY จากฟิลด์ด้านบน 2 คัดลอกไปยังจุดคุณลักษณะคลาสและใช้ชี้ไปที่บรรทัดเพื่อสร้างบรรทัดบัฟเฟอร์ภายในต้นฉบับ:

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่

สรุป:

เว้นเสียแต่ว่าภูมิประเทศของคุณจะเป็นบัฟเฟอร์แบบง่าย ๆ ที่ชันมากจะทำงานได้เว้นแต่ว่าคุณจะพูดถึงความยาวของการไหล โชคไม่ดีเพราะการที่คุณต้องการกล่องเครื่องมือการวิเคราะห์ทางอุทกวิทยาจากนักวิเคราะห์เชิงพื้นที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.