Tạo Đa giác đệm theo Độ cao bằng ArcGIS Desktop?


14

Những gì tôi đang tìm kiếm là đặt một bộ đệm 100 m trên một đa giác, chứ không phải là bộ đệm có chiều rộng cố định "như con quạ bay" Tôi muốn nó đi theo sườn dốc của DEM của tôi.

Tôi có ArcMap (với Nhà phân tích 3D). Đáng buồn là không có phần mở rộng phân tích không gian hoặc mạng với ArcMap.

Tôi đã bị internet quay vòng khi tìm kiếm Phân tích tiệm cận, Phân tích khoảng cách đường dẫn và Chi phí tích lũy bất đẳng hướng. Có vẻ như tôi cần phải tạo ra một mạng lưới chi phí thời gian bằng cách nào đó và tìm hiểu mất bao lâu để đạt được 100 m từ đa giác, nhưng điều đó có vẻ khá lạc hậu. Phần lớn các công cụ này dường như được thực hiện để tìm ra con đường dễ nhất giữa hai điểm.

Có ai làm điều này trước khi?


1
Khi bạn nói rằng bạn muốn "đi theo sườn dốc", bạn có nghĩa là nếu một ô DEM dài 1m ngang với độ dốc của nó, bạn sẽ tính là 1m trong bộ đệm của mình, nhưng nếu một bên cao hơn một bên so với bên kia, thì bạn sẽ tính là 1,41m (khoảng cách dọc theo bề mặt)?
Dan C

Chính xác, trong trường hợp này, chúng ta cần hiển thị cách vùng đất ngập nước 100 m và có một sườn núi ngay bên cạnh nó. Tôi cho rằng tôi có thể sử dụng Máy tính Raster của QGIS để chuyển đổi phần trăm độ dốc thành mét dựa trên kích thước ô của raster. Tôi sẽ không biết cách thêm chúng tới 100 m mà không cần kiểm tra thủ công từng pixel nhưng vâng đó chính xác là những gì tôi đang nói.
R. Laird

Câu trả lời:


7

Giải pháp cho những gì bạn mô tả khi không có nhà phân tích không gian:

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")

Chạy này trên lĩnh vực mới (cố định vào ngày 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!)

Thêm các trường X và Y vào lines_3D và điền chúng bằng cách sử dụng:

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

Tạo lớp XY từ 2 trường trên, sao chép nó vào lớp tính năng điểm và sử dụng điểm tới dòng để tạo dòng đệm bên trong bản gốc:

ĐẦU RA:

nhập mô tả hình ảnh ở đây

Phần kết luận:

Trừ khi địa hình của bạn rất dốc, bộ đệm đơn giản sẽ thực hiện công việc, trừ khi có vẻ như rất có thể bạn đang thực sự nói về chiều dài dòng chảy. Thật không may, vì điều đó bạn cần hộp công cụ phân tích thủy văn từ nhà phân tích không gian

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.