top of page

Conteúdo Exclusivo.

Necessário adquirir o plano (em desenvolvimento) para acessar este conteúdo.

BLOG

ArcMap 10.4 com Python: Numeração Sequencial por Seleção

Atualizado: há 6 dias

Automatizar processos no ArcMap 10.4 com Python pode poupar muito tempo, especialmente em tarefas repetitivas como atribuir IDs sequenciais a feições selecionadas.


O script abaixo faz exatamente isso: numera as feições selecionadas em uma camada, com base em um campo de ordenação, e grava os valores em um campo de destino.


O que o script faz?


  1. Localiza a camada desejada pelo nome (troque [LAYER] pelo nome da sua camada em Table of Contents).

  2. Verifica se há feições selecionadas – só funciona com seleção ativa.

  3. Cria automaticamente o campo de destino (ID) caso não exista.

  4. Ordena as feições pelo campo definido (troque [FIELD] pelo nome do atributo do shapefile alvo da ordenação).

  5. Atribui IDs sequenciais a partir do valor inicial (start_value = 1).

  6. Atualiza o mapa e a TOC para refletir as mudanças em tempo real.


import arcpy


layer_name = u"[LAYER]"

order_field = "[FIELD]"

target_field = "ID"

start_value = 1


mxd = arcpy.mapping.MapDocument("CURRENT")

df = mxd.activeDataFrame

lyr_list = arcpy.mapping.ListLayers(mxd, layer_name, df)


if not lyr_list:

arcpy.AddError(u"Camada '{}' não encontrada.".format(layer_name))

raise SystemExit


lyr = lyr_list[0]


sel = lyr.getSelectionSet()

if not sel:

arcpy.AddError(u"Selecione as feições antes de rodar.")

raise SystemExit


if target_field not in [f.name for f in arcpy.ListFields(lyr)]:

arcpy.AddField_management(lyr, target_field, "LONG")


oid_field = arcpy.Describe(lyr).OIDFieldName


# lê apenas feições selecionadas

rows = [(r[0], r[1]) for r in arcpy.da.SearchCursor(lyr, [oid_field, order_field]) if r[0] in sel]


rows_sorted = sorted(rows, key=lambda t: t[1])


seq_map = {}

seq = start_value

for oid, _ in rows_sorted:

seq_map[oid] = seq

seq += 1


with arcpy.da.UpdateCursor(lyr, [oid_field, target_field]) as cur:

for row in cur:

oid = row[0]

if oid in seq_map:

row[1] = seq_map[oid]

cur.updateRow(row)


arcpy.RefreshActiveView()

arcpy.RefreshTOC()

print("{} feições numeradas em '{}'.".format(len(seq_map), layer_name))


Gostou? Compartilhe!

Comentários


Vertiportos, por Igor Rafailov

Velocidade de Estol

Acervo Fundiário do Brasil

ArcMap 10.4: Gerando Números Aleatórios no Field Calculator

Satélite Starlink da SpaceX Surge em Imagem Orbital e Interfere no Pan-Sharpening

Cessna 182E Skylane

Piper Cub J3C-65

Pernambuco: Dados Cartográficos de Alta Resolução

Vento de Proa e Sustentação: Por Que Decolar Contra o Vento é Mais Seguro

Faça parte da nossa lista de emails

Obrigado!

ad33geo canal whatsapp.png
Entre em contato conosco!

Obrigado! Enviaremos um e-mail em breve informando que seu conteúdo foi publicado!

siga-nos!

  • Facebook
  • Instagram
  • YouTube

@2025 Ad33 Geo

bottom of page