Более

Разделение всех полигональных объектов в шейп-файле на меньшие полигоны одинаковой ширины


У меня есть шейп-файл с тысячами полигональных объектов, которые я хотел бы разбить на более мелкие части (т.е. разбить квадрат на 8 равных частей). Я прочитал все эти платы в поисках правильного решения и, к сожалению, еще не нашел его. Я пробовал редактор участков, но он позволяет вам вручную редактировать только одну функцию за раз, и я пробовал рыболовную сеть, но это не проходит через каждую отдельную функцию, которую он просто обрабатывает по всему экстенту шейп-файла. У меня есть полная лицензия на ArcGIS, так что все варианты игровые. В конечном итоге я хотел бы иметь возможность разделить этот исходный шейп-файл функций на определенное количество слотов равной ширины, каждый из которых будет отдельной функцией в результирующем шейп-файле.

Какие-нибудь мысли?


Прикрепить скрипт

импортировать arcpy, traceback, os, sys, math из math импортировать радианы, sin, cos из arcpy import env env.overwriteOutput = True inFC = arcpy.GetParameterAsText (0) outFolder = arcpy.GetParameterAsText (1) rectangle = r'in_memory  rectangle 'tempf = r'd:  scratch  many.shp' def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + message) def ShapeMake (pGon, angle): ar = arcpy. Array () a = радианы (угол) part = pGon.getPart (0) для p частично: x, y = pX, pY xN = cos (a) * x + sin (a) * y yN = -sin (a ) * x + cos (a) * y pN = arcpy.Point (xN, yN) ar.add (pN) pgonRotated = arcpy.Polygon (ar) return pgonRotated try: arcpy.MinimumBoundingGeometry_management (inFC, rectangle, «RECTANGLE_BY_WIDTH», "NONE", "", "MBG_FIELDS") m, n = 0,0 с arcpy.da.SearchCursor (rectangle, ("SHAPE @", "MBG_Orientation")) в виде строк: для строки в строках: shp, angle = row onside = ShapeMake (shp, -angle) sizes = onside.extent origPoint = "% s% s"% (extension.XMin, extension.YMin) yPoint = "% s% s"% (extension.XMin, sizes.YMax ) endPoint = "% s% s"% (extension.XMax, extension.YMax), если extension.width> extension.heigh t: nRows, nCols = 1,8 else: nRows, nCols = 8,1 arcpy.CreateFishnet_management (tempf, origPoint, yPoint, "0", "0", nRows, nCols, endPoint, "NO_LABELS", "", " POLYGON ") arcpy.AddField_management (tempf," Rotation "," DOUBLE ") arcpy.AddField_management (tempf," Label "," Text ", 25) m + = 1 с arcpy.da.UpdateCursor (tempf, [" SHAPE @ " , "Rotation", "Label"]) в виде строк: для строки в строках: shp = row [0] rollBack = ShapeMake (shp, angle) row [0] = rollBack row [1] = angle m + = 1 row [2 ] = str (m) .zfill (8) rows.updateRow (row) n + = 1 arcpy.CopyFeatures_management (tempf, '% s% sfnet_% s'% (outFolder, os.sep, str (n) .zfill (4) ))) за исключением: message = " n *** PYTHON ERRORS ***"; showPyMessage () message = "Информация о трассировке Python:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Информация об ошибке Python:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

к инструменту:

Входной векторный слой:

Объедините все шейп-файлы из выходной папки в один класс пространственных объектов, показанный ниже:


Смотреть видео: разделение 3D модели на отдельные части (October 2021).