Removendo recursos duplicados com a mesma geometria no ArcMap?

15

É possível identificar exclusivamente cada geometria em uma camada de feição?

Essencialmente, eu tenho uma camada de recurso de polígono com muitas linhas de dados representadas pela mesma geometria. Gostaria de 1 linha para cada geometria única. Então, estou procurando uma metodologia pronta para combinar atributos com base na forma da geometria.

Eu venho de um mundo do Postgres e posso resolver esse problema lá, mas não sei como fazê-lo (ou se é possível) fazê-lo de forma não programática com as ferramentas ESRI.

Dylan Hettinger
fonte
Então você está dizendo que existem vários registros de geometria idêntica e deseja combinar aqueles que são idênticos? Se for esse o caso ... você poderia simplesmente se dissolver com base na área ou algo assim? Talvez eu esteja perdendo sua pergunta aqui.
Clickinaway
Correto, são geometrias idênticas, onde o único atributo natural compartilhado é a própria geometria. A área pode funcionar, mas não há garantia de que duas geometrias diferentes não tenham a mesma área.
Dylan Hettinger
Veja meu post. Você pode executar a dissolução em vários campos.
Paul
@Paul .... Vejo que você editou sua resposta para refletir minha opinião. Espero que tenha ajudado.
Clickinaway

Respostas:

22

Se você possui uma licença avançada, pode usar Localizar idêntico ou Excluir idêntico .

Ambos podem ser usados ​​para localizar / excluir recursos que tenham atributos idênticos ou, se o campo Forma for especificado, geometrias idênticas.

Se você não possui uma licença avançada, esta postagem será útil.

Em resumo, você adiciona dois campos para X, Y na sua tabela de atributos e executa uma Dissolução nos referidos campos.

Se você tiver polígonos que compartilham o mesmo centróide, mas não são geometricamente idênticos, poderá adicionar dois outros campos (Perímetro e Área). Isso deve ser suficiente para identificar geometrias idênticas para quase todos os casos normais. Veja os comentários do @ whuber abaixo.

Paulo
fonte
Presumindo que os dados dos pontos estejam corretos? Eu tinha pensado em sugerir a criação de centróides primeiro. Ele ainda está dizendo que há muitas linhas da mesma geometria ... Parece quase uma classificação com base em uma classe / faixa de área cultivada? Mas também diz a forma da geometria ... e é por isso que eu estava me inclinando para a dissolução com base na área ou no perímetro (ou uma combinação dos dois para atingir uma proporção).
Clickinaway
1
Na verdade, esse post que eu vinculei foi para polígonos. Você pode dissolver na área e no centróide, com a chance de ter dois polígonos não idênticos com o mesmo centróide.
Paul
+1 Esta é exatamente a resposta certa. Em princípio, o centróide, o perímetro e a área ainda podem não identificar exclusivamente um polígono, mas os contra-exemplos são um pouco artificial. Para fazer o hash de objetos irregulares ou naturais ou digitalizados manualmente em IDs exclusivos, esses quatro valores devem ser confiáveis. Se você deseja obter valores mais facilmente obtidos, use coordenadas da caixa delimitadora do recurso e sua contagem de vértices.
whuber
@whuber A comparação das coordenadas de todos os vértices seria a única maneira infalível de determinar geometria idêntica? Minha formação em geometria é bastante fraca, então acho tudo isso muito fascinante.
Paul
A resposta para sua pergunta depende do que você quer dizer com "idêntico": por exemplo, se você inserir um novo vértice ao longo da borda de um polígono, é um polígono "idêntico" ou não? Indiscutivelmente, é no sentido de representar a mesma característica no mundo, mesmo que os vértices sejam diferentes. Desse ponto de vista, o único teste seguro é se a diferença (teórica definida) dos dois polígonos está vazia ou não. Mas se você adota uma visão mais rigorosa de que identidade significa uma correspondência de vértice a vértice, ainda é complicado, porque um polígono pode iniciar sua lista de vértices em um ponto diferente.
whuber
1

Eu tenho um conjunto de dados com base nos dados da pesquisa. Meu problema é que os recursos antigos nem sempre são removidos antes da importação das novas capturas de pesquisa. Portanto, temos 'duplicatas' com geometria diferente: ou seja, as fotos da pesquisa podem estar separadas por 1/4 de pé. Em um conjunto de dados de recurso 12000, é difícil ampliar cada um e identificá-los. Usando o ArcMap Basic 10.2: aqui está um modelo hacky que eu criei.

  1. Buffer (com raio de entrada) cada recurso na camada original (Selecionado ou Não)
  2. Iterar sobre cada recurso na camada de buffer
  3. Selecionar na camada original com base no relacionamento (recurso Centroid com recurso)
  4. Recursos selecionados "Contagem de linhas"
  5. Campo Calcular o valor da contagem de linhas para a camada do buffer = Quantos recursos estão dentro do raio dos recursos originais

Eu reinventei a roda. Além disso, fiquei frustrado com o construtor de modelos e basicamente instalei a coisa toda. Tem que haver uma solução mais elegante. Terei prazer em aceitar críticas e sugestões.

Além disso, isso parece funcionar corretamente apenas no Model Builder, eu corro a partir de uma caixa de ferramentas e não salva a camada do buffer.

Encontre Participantes Duplicados

Barrett
fonte
1

Há algum tempo, estou procurando uma resposta para a mesma pergunta para superar o achatamento do problema de polígonos de buffer sobrepostos e acho que encontrei uma solução robusta para isso. De fato, o comentário de @ Whuber,

Em princípio, o centróide, o perímetro e a área ainda podem não identificar exclusivamente um polígono, mas os contra-exemplos são um pouco artificial.

A resposta de @ Paul foi a principal motivação para eu continuar tentando. Ele usa o operador ARE_IDENTICAL_TO da ferramenta Spatial Join, pois é o mais eficiente dentre outros detectores idênticos. Aqui estão os passos:

  • Auto-União sua entrada para manter todas as formas diferentes umas das outras;
  • Crie um campo fictício para manter / copiar OBJECTIDs originais (ou seja, tipo de campo OID) das linhas, por exemplo, EX_OID ;
    • Execute Junção Espacial na classe de recurso que deseja que seja processada como parâmetros de recurso de destino e junção. Verifique se os mapeamentos de campo dos campos fictícios (exibidos duas vezes) anteriormente criados têm a regra de mesclagem de FIRST (que é o padrão ou selecione LAST, os outros podem não fornecer a saída desejada, pois usam um resumo de sobreposições). Este passo seleciona a forma comum OBJETO localizado em cima de todas as sobreposições (isto é, PRIMEIRO);

As etapas a seguir podem ser executadas de duas maneiras: WITH Python ou WITHOUT:

WITH PYTHON

  • Use o código abaixo para extrair IDs únicos que queremos encontrar:

print tuple(set([row.getValue("EX_OID_1") for row in arcpy.SearchCursor("Output_of_the_Spatial_Join_Operation")])).

Esteja ciente de que estou usando a segunda cópia do campo OID fictício, que é EX_OID_1 no meu caso;

  • Copie a saída desse código e cole-a na Consulta de Definição da classe de recurso original processada como OBJECTID IN (<PASTE_COPIED_VALUES_HERE>). O resultado mostrará os recursos unificados das partes sobrepostas. Há uma limitação de tamanho aqui, porém, 30.000 caracteres. Para superar esse problema, você precisa seguir as etapas "sem python".

SEM PYTHON

  • Use a ferramenta Frequency para listar valores exclusivos na segunda cópia do campo OID fictício, que é EX_OID_1 no meu caso;

  • Por fim, ingresse no campo OBJECTID da classe de recurso original com a saída do EX_OID_1 da ferramenta Frequency selecionando as opções "Manter apenas registros correspondentes".

fatih_dur
fonte