Створення буферного полігону за висотами за допомогою ArcGIS Desktop?


14

Що я хочу зробити, це поставити буфер на 100 м на багатокутник, але замість того, щоб буфер був на фіксованій ширині, «як ворона летить», я хочу, щоб він слідував за схилами моєї Lidar DEM.

У мене є ArcMap (з 3D Analyst). На жаль, немає розширення просторового або мережевого аналітика з ArcMap.

Мене начебто все обернуло Інтернет, вивчаючи аналіз близькості, аналіз відстані шляху та анізотропну накопичувальну вартість. Схоже, мені потрібно якось скласти сітку за часом та дізнатися, скільки часу знадобиться, щоб досягти 100 м від полігону, але це здається досить відсталим. Переважна більшість цих інструментів, здається, зроблені для пошуку найпростішого маршруту між двома точками.

Хтось робив це раніше?


1
Коли ви говорите, що хочете "слідувати за схилами", ви маєте на увазі, що якщо комірка DEM на відстані 1 м по її схилу є плоскою, ви вважаєте, що це 1м у вашому буфері, але якщо одна сторона на 1 м вище, ніж інша, ви вважав би це 1,41м (відстань уздовж поверхні)?
Dan C

Точно в цьому випадку нам потрібно показати 100 м від заболоченої зони, а біля неї є хребет. Я гадаю, що я міг би використовувати QGIS Raster Calculator, щоб перетворити відсоток нахилу в метри на основі розміру комірки растру. Я б не знав, як додати їх до 100 м, не перевіряючи кожен піксель вручну, але так, саме про це я говорю.
Р. Лаїрд

Відповіді:


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

Виконайте це в новому полі (зафіксовано 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!)

Додайте поля X і Y до рядків_3D і заповніть їх, використовуючи:

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

Створіть шар XY з вище двох полів, скопіюйте його у клас особливості точок та використовуйте пункт-рядок для створення лінії буфера всередині оригіналу:

ВИХІД:

введіть тут опис зображення

Висновок:

Якщо ваша місцевість є надзвичайно крутою, простий буфер виконає цю роботу, якщо тільки це не дуже схоже, ви насправді говорите про довжину потоку. Невдача, адже для цього вам потрібен набір інструментів гідрологічного аналізу від просторового аналітика

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.