Mais

Selecione o (s) ponto (s) da coordenada dada e mova para a nova coordenada usando arcpy


Objetivo: mover os pontos de endereço para seus locais corretos.

Plano: eu tenho uma camada de AddressPoints da qual alguns precisam ser movidos para um novo local. Quero pegar uma camada de linha (chamada AddressPoints_AdjustLocation, mostrada como uma linha tracejada roxa abaixo) e desenhar uma linha da localização atual dos pontos de endereço (que geralmente é perto da estrada) até o local desejado (que é a porta da frente do prédio)

Código que tenho até agora:

arcpy.MakeFeatureLayer_management ("… / pathToAddressPoints", "lyr_AddressPoints") arcpy.MakeFeatureLayer_management ("… / pathToAddressPoints_AdjustLocation", "lyr_AddressPoints_AdjustPointsLocation") # Crie um cursor que contém todos os recursos de rows_AdjustPoints_AdjustAdjustLocation ") linhas: para linha em linhas: feat = row.getValue ("SHAPE") vertex_list = [] para vértice em feat.getPart (0): se vértice: vertex_list.append ([vertex.X, vertex.Y]) vertexStart = vertex_list [0] # TODO: Selecione todos os pontos de endereço em "lyr_AddressPoints" que cruzam a localização vertexStart vertexEnd = vertex_list [-1] # TODO: Para cada ponto de endereço selecionado acima, mova-o para a localização vertexEnd

Os dois itens com os quais preciso de ajuda são como selecionar pontos de endereço que cruzam a posição vertexStart e, em seguida, mover esses pontos de endereço para a localização vertexEnd (usando UpdateCursor, presumo).


Então, acabei resolvendo meu problema usando um método um pouco diferente ... Então o que eu faço é desenhar uma linha de onde o ponto de endereço é que eu quero mover e terminar a linha onde eu quero que o ponto de endereço termine em. Quando executo meu código, ele segue e seleciona cada linha, uma de cada vez, em seguida, seleciona todos os pontos de endereço que cruzam essa linha (em qualquer lugar ao longo dessa linha, não apenas no início, o que eu estava tentando fazer antes ...), e move todos os pontos de endereço (geralmente apenas um) para o último vértice da linha. Fazer isso dessa forma me permitiria selecionar vários pontos de endereço com a mesma linha, se necessário, e movê-los todos para o mesmo local.

A razão de eu ter isso em um script é porque eu faço o download dos pontos de endereço originais de um site de condado (repetidamente a cada duas semanas) e, em seguida, os combino com minhas adições / correções / exclusões e, em seguida, mesclo-os com outros condados para fazer um grande conjunto de dados. Assim, posso mover os pontos de endereço para onde quero, sem incomodar os donos de dados originais.

arcpy.MakeFeatureLayer_management ("… / pathToAddressPoints", "lyr_AddressPoints") arcpy.MakeFeatureLayer_management ("… / pathToAddressPoints_AdjustLocation", "lyr_AddressPoints_AdjustPointsLocation") # Crie um cursor que contém todos os recursos de rows_AdjustPoints_AdjustAdjustLocation ") rows: for row in rows: arcpy.SelectLayerByAttribute_management ("lyr_AddressPoints_AdjustLocation", "NEW_SELECTION", "" OBJECTID  "=" + str (row.getValue ("OBJECTID")) "arcpy.SelectLayerByLocation_man "," lyr_AddressPoints_AdjustLocation ") print (" AVISO !!!: LOCATION ADJUST OBJECTID "+ str (row.getValue (" OBJECTID ")) +" NÃO SELECCIONEI NENHUM PONTO DE ENDEREÇO ​​!!! "if arcpy.GetCount_management (" lyr_AddressPoints " ) .getOutput (0) == '0' else "OBJECTID" + str (row.getValue ("OBJECTID")) + "selected" + arcpy.GetCount_management ("lyr_AddressPoints"). getOutput (0) + "feature (s) ) para localização adj ") if arcpy.GetCount_management (" lyr_AddressPoints ") .getOutput (0) <> '0': # Obtenha o x, y dos vértices do recurso AdjustLocation atual feat = row.getValue (" SHAPE ") vertex_list = [] para o vértice em feat.getPart (0) : if vertex: vertex_list.append ([vertex.X, vertex.Y]) pntLastVertex = arcpy.Point (vertex_list [-1] [0], vertex_list [-1] [1]) # Converta o último vértice em um ponto aprows = arcpy.UpdateCursor ("lyr_AddressPoints") para aprow em aprows: aprow.setValue ("SHAPE", pntLastVertex) aprows.updateRow (aprow)

Desde que os pontos de endereço sempre se refiram ao edifício mais próximo (o que nem sempre é o caso, eu acho), você pode usar a ferramenta Near GP para descobrir o recurso mais próximo na camada de edifícios (ou você pode criar pontos centróides de edifícios primeiro).

Você pode então usar o arcpy.da.UpdateCursor para atualizar a geometria dos pontos de endereço de origem com base em qual recurso eles têm mais próximo. As coordenadas XY do centroide de construção mais próximo serão calculadas em dois campos adicionados - NEAR_X e NEAR_Y.

Se você quiser mover seus pontos de endereço para o local da porta da frente, você precisa ter portas armazenadas como pontos (que é usado com a ferramenta Near) ou você pode ficar feliz em ter o centroide do edifício (se isso for suficiente para o seu finalidades e você não deseja digitalizar a localização da porta manualmente).


Assista o vídeo: SINGER LEGACY C440. Selecionando um ponto e costurando (Outubro 2021).