ArcGIS Desktop kullanarak Yükseltmelerden Sonra Tampon Çokgen Oluşturuluyor mu?


14

Yapmak istediğim bir poligonun üzerine 100 m'lik bir tampon koymak, ancak tamponun "karga uçtuğu gibi" sabit bir genişlikte olmak yerine "Lidar DEM'in eğimlerini takip etmesini istiyorum.

ArcMap (3D Analist ile) var. Ne yazık ki ArcMap ile Uzamsal veya Ağ Analisti Uzantısı yok.

İnternet tarafından Yakınlık Analizi, Yol Mesafesi Analizi ve Anizotropik Kümülatif Maliyet konularına baktım. Bir şekilde bir zaman maliyet ızgarası yapmam ve çokgenden 100 m'ye ulaşmanın ne kadar süreceğini öğrenmem gerekiyor gibi görünüyor, ancak bu oldukça geri görünüyor. Bu araçların büyük çoğunluğu, iki nokta arasındaki en kolay rotayı bulmak için yapılmış gibi görünüyor.

Bunu daha önce kimse yaptı mı?


1
"Eğimleri takip etmek" istediğinizi söylediğinizde, eğer bir DEM hücresi eğimi boyunca 1 m ise düz, tamponunuzda 1 m olarak sayılırsınız, ancak bir taraf diğerinden 1 m daha yüksekse, 1.41m (yüzey boyunca mesafe) olarak sayılır mı?
Dan C

Tam olarak, bu durumda sulak alandan 100 m uzakta göstermemiz gerekiyor ve hemen yanında bir sırt var. Raster hücre boyutuna göre eğim yüzdesini metreye dönüştürmek için QGIS'in Raster Hesaplayıcısını kullanabileceğimi düşünüyorum. Her pikseli manuel olarak kontrol etmeden 100 metreye kadar bunları nasıl ekleyeceğimi bilemezdim ama evet tam olarak bahsettiğim şey bu.
R. Laird

Yanıtlar:


7

Uzamsal analistin yokluğunda açıkladığınız şey için geçici çözüm:

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

Bunu yeni alanda çalıştırın (05/02/2018 tarihinde düzeltildi):

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 ve Y alanlarını lines_3D'ye ekleyin ve aşağıdakileri kullanarak doldurun:

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

2 alanın üstünden XY katmanı oluşturun, nokta özellik sınıfına kopyalayın ve orijinalin içinde arabellek satırı oluşturmak için noktadan satıra kullanın:

ÇIKTI:

resim açıklamasını buraya girin

Sonuç:

Araziniz son derece dik değilse, buffer aslında akış uzunluğu hakkında konuşuyorsanız, basit bir tampon işi yapacak. Kötü şans, çünkü bunun için mekansal analistten hidrolojik analiz araç kutusuna ihtiyacınız var

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.