Tworzenie wielokąta buforowego po elewacjach za pomocą ArcGIS Desktop?

14

To, co chcę zrobić, to umieścić bufor o długości 100 m na wielokącie, ale zamiast bufora o stałej szerokości „w linii prostej”, chcę, aby podążał za zboczami mojego Lidar DEM.

Mam ArcMap (z 3D Analyst). Niestety brak rozszerzenia przestrzennego lub sieciowego dla analityków z ArcMap.

Internet mnie poniekąd odwrócił, analizując analizę bliskości, analizę odległości ścieżki i łączny koszt anizotropowy. Wygląda na to, że muszę w jakiś sposób stworzyć siatkę kosztów i dowiedzieć się, ile czasu zajmie dotarcie do wielokąta w odległości 100 m, ale wydaje się to raczej odwrotne. Zdecydowana większość tych narzędzi wydaje się stworzona w celu znalezienia najłatwiejszej trasy między dwoma punktami.

Czy ktoś już to zrobił?

R. Laird
źródło
1
Kiedy mówisz, że chcesz „podążać za zboczami”, czy masz na myśli, że jeśli komórka DEM ma 1 m na swoim nachyleniu, jest ona płaska, liczysz to jako 1 mw buforze, ale jeśli jedna strona jest o 1 m wyższa od drugiej, liczyłby to jako 1,41 m (odległość wzdłuż powierzchni)?
Dan C
Dokładnie, w tym przypadku musimy pokazać 100 m od mokradeł, a tuż obok znajduje się grzbiet. Podejrzewam, że mógłbym użyć kalkulatora rastrowego QGIS do konwersji procentu nachylenia na metry na podstawie wielkości komórki rastra. Nie wiedziałbym, jak dodać te do 100 m bez ręcznego sprawdzania każdego piksela, ale tak właśnie o tym mówię.
R. Laird

Odpowiedzi:

7

Obejście tego, co opisujesz przy braku analityka przestrzennego:

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

Uruchom to na nowym polu (ustalonym na 02.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!)

Dodaj pola X i Y do linii_3D i wypełnij je, używając:

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

Utwórz warstwę XY z powyższych 2 pól, skopiuj ją do klasy obiektów punktowych i użyj punkt do linii, aby utworzyć linię buforową wewnątrz oryginału:

WYNIK:

wprowadź opis zdjęcia tutaj

Wniosek:

O ile twój teren nie jest ekstremalnie stromy, prosty bufor wykona zadanie, chyba że wygląda na to, że mówisz o długości przepływu. Pech, ponieważ do tego potrzebny jest zestaw narzędzi do analizy hydrologicznej od analityka przestrzennego

FelixIP
źródło