Instrução

Dividir um polígono por porcentagem via ArcPy no ArcGIS Pro

Last Published: August 26, 2024

Descrição

O ArcGIS Pro permite dividir uma feição de polígono em vários segmentos usando ferramentas como a ferramenta Dividir (Análise) e a ferramenta Dividir do painel Modificar Feições. No entanto, as ferramentas fornecidas não conseguem dividir o polígono por porcentagem. Siga as etapas fornecidas neste artigo para dividir um polígono por porcentagem na janela do Python.

Solução ou Solução Provisória

Note: 
Ensure the data added to the map and the map share the same projected coordinate system to avoid errors.
  1. Importe o módulo ArcPy e configure o ambiente do script.
Import arcpy
p = arcpy.mp.ArcGISProject("CURRENT")
m = p.listMaps("<Map_Name>")[0]
lyr = m.listLayers(0)
  1. Especifique a porcentagem de divisão do polígono usando um parâmetro de vetor. Neste exemplo, o polígono é dividido em 20%, 30% e 50%.
splits = [20, 30, 50]
  1. Recupere o polígono e as propriedades de extensão do polígono usando a função SearchCursor.
with arcpy.da.SearchCursor("<Layer_Name>", ["SHAPE@"]) as pcursor:
   for prow in pcursor:
      polygon = prow[0]    # polygon to cut
      e = polygon.extent   # bounding extent of polygon
      print(e.XMin,e.YMin,e.XMax,e.YMax)
del pcursor
  1. Crie uma variável para armazenar o valor de precisão da iteração geométrica.
stepsize = 0.001
  1. Especifique os parâmetros para definir a direção da divisão do polígono.
leftXstart = e.XMin
leftX = e.XMin + stepsize
ymax = e.YMax
ymin = e.YMin
  1. Repita o processo de recorte do polígono usando a função cut() de acordo com as porcentagens de divisão definidas na Etapa 2.
cutpoly = polygon
icursor = arcpy.da.InsertCursor("<Layer_Name>", ["SHAPE@"])
for i in splits[:2]:
   print(i)
   tol = 0
   while tol < i:
      # construct NS line
      pntarray = arcpy.Array()
      pntarray.add(arcpy.Point(leftX, ymax))
      pntarray.add(arcpy.Point(leftX, ymin))
      pline = arcpy.Polyline(pntarray,arcpy.SpatialReference(<WKID>))
      # cut polygon and get split-parts
      cutlist = cutpoly.cut(pline)
      tol = 100 * cutlist[1].area / polygon.area
      leftX += stepsize
      #print str(leftX) + ":" + str(tol)
   cutpoly = cutlist[0]
   icursor.insertRow([cutlist[1]])
# part 0 is on the right and part 1 is on the left of the split
  1. Insira o último restante da divisão.
icursor.insertRow([cutlist[0]])
del icursor

O código abaixo mostra o script de trabalho completo.

Import arcpy
p = arcpy.mp.ArcGISProject("CURRENT")
m = p.listMaps("Map")[0]
lyr = m.listLayers(0)
splits = [20, 30, 50]
with arcpy.da.SearchCursor("testpolygon", ["SHAPE@"]) as pcursor:
   for prow in pcursor:
      polygon = prow[0]
      e = polygon.extent
      print(e.XMin,e.YMin,e.XMax,e.YMax)
del pcursor
stepsize = 0.001
leftXstart = e.XMin
leftX = e.XMin + stepsize
ymax = e.YMax
ymin = e.YMin
cutpoly = polygon
icursor = arcpy.da.InsertCursor("testpolygon", ["SHAPE@"])
for i in splits[:2]:
   print(i)
   tol = 0
   while tol < i:
      pntarray = arcpy.Array()
      pntarray.add(arcpy.Point(leftX, ymax))
      pntarray.add(arcpy.Point(leftX, ymin))
      pline = arcpy.Polyline(pntarray,arcpy.SpatialReference(3857))
      cutlist = cutpoly.cut(pline)
      tol = 100 * cutlist[1].area / polygon.area
      leftX += stepsize
   cutpoly = cutlist[0]
   icursor.insertRow([cutlist[1]])
icursor.insertRow([cutlist[0]])
del icursor

A imagem abaixo demonstra a divisão do polígono em 20%, 30% e 50% após a execução do script de Python no ArcGIS Pro.

Um polígono dividido por porcentagens usando ArcPy.

ID do Artigo: 000027999

Obtenha suporte com IA

Resolva seu problema rapidamente com o chatbot de IA de suporte da Esri.

Comece a conversar agora

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Comece a conversar agora

Ir para as opções de download