Membuat Buffer Polygon setelah Peningkatan menggunakan ArcGIS Desktop?

14

Apa yang ingin saya lakukan adalah meletakkan buffer 100 m pada poligon, tetapi alih-alih buffer berada pada lebar tetap "seperti burung gagak terbang" saya ingin itu mengikuti lereng DEM Lidar saya.

Saya memiliki ArcMap (dengan Analis 3D). Sayangnya tidak ada Spasial atau Ekstensi Analis Jaringan dengan ArcMap.

Saya telah semacam berbalik oleh internet melihat ke dalam Analisis Proximity, Analisis Jarak Path, dan Biaya Kumulatif Anisotropik. Sepertinya saya perlu membuat grid biaya-waktu dan mencari tahu berapa lama waktu yang dibutuhkan untuk mencapai 100 m dari poligon, tetapi itu agak terbelakang. Sebagian besar alat ini tampaknya dibuat untuk menemukan rute termudah antara dua titik.

Adakah yang pernah melakukan ini sebelumnya?

R. Laird
sumber
1
Ketika Anda mengatakan Anda ingin "mengikuti lereng", maksud Anda bahwa jika sel DEM adalah 1m di lerengnya datar, Anda akan menghitungnya sebagai 1m di buffer Anda, tetapi jika satu sisi 1m lebih tinggi dari yang lain, Anda akan menghitung bahwa sebagai 1,41 m (jarak sepanjang permukaan)?
Dan C
Tepat, dalam hal ini kita perlu menunjukkan 100 m dari lahan basah, dan ada punggungan tepat di sampingnya. Saya kira saya bisa menggunakan Raster Calculator QGIS untuk mengubah persen kelerengan menjadi meter berdasarkan ukuran sel raster. Saya tidak akan tahu cara menambahkannya hingga 100 m tanpa secara manual memeriksa setiap piksel tapi ya itulah yang saya bicarakan.
R. Laird

Jawaban:

7

Solusi untuk apa yang Anda gambarkan dengan tidak adanya analis spasial:

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

Jalankan ini di bidang baru (ditetapkan pada 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!)

Tambahkan bidang X dan Y ke lines_3D dan isi dengan menggunakan:

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

Buat layer XY dari 2 bidang di atas, salin ke kelas fitur poin dan gunakan point to line untuk membuat garis buffer di dalam aslinya:

KELUARAN:

masukkan deskripsi gambar di sini

Kesimpulan:

Kecuali jika medan Anda sangat curam, penyangga sederhana akan melakukan pekerjaan, kecuali yang terlihat sangat mungkin Anda benar-benar berbicara tentang panjang aliran. Nasib buruk, karena untuk itu Anda memerlukan kotak alat analisis hidrologi dari analis spasial

FelixIP
sumber