Mais

Encontrando duplicata na distância do buffer?

Encontrando duplicata na distância do buffer?


Estou procurando desesperadamente por uma solução para um problema. Tenho um Shapefile de ponto, preciso verificar se há pontos duplicados nas proximidades (digamos 10 metros).

Não estou familiarizado com ArcObjects, existe alguma maneira de fazer isso em script Python.


Você precisaria usar arcpy.Geometry para obter os objetos de geometria dos polígonos (pontos em buffer - use a ferramenta Buffer GP para isso) e os próprios pontos; em seguida, descubra se os polígonos contêm quaisquer pontos que tenham a mesma identidade (você escolhe o campo para comparar).

Um rascunho rápido está abaixo; isso lhe dará uma ideia de como começar. Dependendo do tamanho do seu conjunto de dados, você pode precisar abandonar o arcpy em algum ponto e apenas fazer as contas (ponto no problema do polígono). Se você quiser ficar com arcpy com conjuntos de dados maiores, usar a ferramenta Spatial Join GP (opcionalmente com índices espaciais) e saída de pós-processamento para descobrir as duplicatas é outra opção.

import arcpy pnt_fc = r "C:  Default.gdb  _PointDistanceFc" buff_fc = r "C:  Default.gdb  _PointDistanceFc_Buffer" ident_field = "identidade" com arcpy.da.SearchCursor (buff_fc, ["SHAPE @", identifique_field, "PolyID"]) como buff_cur: para buff em buff_cur: com arcpy.da.SearchCursor (pnt_fc, ["SHAPE @", identifique_field, "PntID"]) como pnt_cur: para pnt em pnt_cur: if buff [0] .contains (pnt [0]) e buff [1] == pnt [1]: imprimir "polyID {0} contém duplicado" .format (buff [2]), "pntID {0}". formato (pnt [2])

Eu usaria integrar ferramenta (Data Management Tool-Feature Class).

  • Certifique-se de ter uma cópia de backup e os pontos têm uma identificação exclusiva
  • Execute a ferramenta com 1 camada e sua distância - 10 m. Os pontos dentro do buffer serão reduzidos a pontos sobrepostos.
  • Use Excluir idêntico para remover duplicatas espaciais, como alternativa, use a sugestão de Os rótulos para pontos sobrepostos podem ser combinados / mesclados em um rótulo? para selecioná-los.

Você pode juntar a 2ª mesa ao original para encontrar 'duplicatas' no original

Solução Qicker usando Spatial Join para si mesmo, um para um, intersecção, raio de pesquisa = 10. A saída terá Join_Count = 1 para pontos sem vizinhos, o resto são suas "duplicatas"


Olá, eu consegui atingir meu objetivo selecionando pontos próximos, colocando todos os valores de campo na matriz e contando a ocorrência da matriz e colando os valores em outro campo

fc = r "C:  Akhil_Office_1  Python  test  PATest1.shp" fields = ["FEATURE_ID", "ADDRESS"] com arcpy.da.SearchCursor (fc, campos) como cursor: para linha no cursor: valor = linha [0] #get value "FEATURE_ID" campo - valor único ??? field = "FEATURE_ID" exp = field + "= '" + value + "'" point_lyr = arcpy.SelectLayerByAttribute_management (fc, "NEW_SELECTION", exp) arcpy.SelectLayerByLocation_management (point_lyr, overlap_typeist = "WITHIN_eat_lyrance =" search_eat_lyrANCE, select_distrance = "COMIN_A_ponto_local, "25 Meters", selection_type = "NEW_SELECTION") occurTwice = [] cursor = arcpy.da.SearchCursor ("PAtest2", ['ADDRESS']) para linha no cursor: occurTwice.append (row [0]) del cursor cursor = arcpy.da.UpdateCursor ("PAtest2", ['ADDRESS', 'Dup']) para linha no cursor: linha [1] = ocorreTwice.count (linha [0]) cursor.updateRow (linha) del cursor del point_lyr del cursor

isso funciona bem, mas isso é muito lento, leva uma hora para 500 pontos às vezes ser enforcado, e estou tendo um arquivo de pontos enorme, não menos que 100.000 pontos em um, então não vale a pena.


Assista o vídeo: Co to jest i co nam daje bufor ciepła