Eu tenho dois shapefiles, Point e Polyline. Estou tentando preencher minha camada de polilinha com o ID de dados do ponto (systemID) onde as linhas começam onde terminam; por exemplo. crie duas colunas (de e para). As linhas já têm a direção do fluxo atribuída a elas. Estou usando as ferramentas ArcHydro, mas o Arcpy também é bom.
No ArcHydro, tentei usar as Ferramentas de atributo> Gerar nós de / para linhas, mas ele cria valores para Para e De que não são dos meus dados de ponto. Minha outra alternativa foi usar o Feature to Vertices e associar o resultado à minha tabela de dados do ponto para obter o systemID. Mas então eu teria que atualizar a camada de polilinha também. Estou certo de que existe uma maneira mais fácil de fazê-lo.
Nota: nem todas as linhas têm pontos nos vértices, valores em branco são adequados para eles.
fonte
Respostas:
Às vezes, é melhor não usar a solução pronta para uso. É por isso que sugiro
Vá para 2, mas use o último ponto para atribuir TO nodeID
fonte
Fiz a mesma coisa há alguns meses. Eu usei o arcpy, mas o script é muito longo para ser postado aqui, então vou dar uma descrição do que fiz.
Usei uma junção espacial para detectar quais pontos / nós estavam dentro de um recurso de linha específico.
Como a junção espacial não leva em consideração a direção do fluxo, usei o arcpy para determinar qual era o ponto inicial e qual era o ponto final. Consegui fazer isso usando a função de descrição arcpy para extrair informações de coordenadas dos vértices de início / fim do recurso de linha e compará-las com os valores de coordenadas dos pontos conectados.
Por fim, depois de descobrir quais dos pontos de / para os quais usei a função setValue para preencher os campos de / para no conjunto de dados da polilinha original.
Obviamente, há um pouco mais do que isso, mas eu descrevi os pontos principais.
fonte
Fui inspirado pelo @FelixIP, mas queria escrever uma solução sem junções ou criação de arquivos extras, pois minha rede é bastante grande com tubos de 400K + e nós de 500K +.
A construção da rede geométrica força o X, Y dos nós e as extremidades do tubo a serem coincidentes. Você pode acessar esses locais com os tokens de forma nos cursores do arco-íris e combiná-los. Os tokens de forma para linhas retornam uma matriz dos vértices na ordem em que foram desenhados. Na minha rede, a ordem de extração dos tubos é altamente controlada por controle de qualidade, porque usamos isso para definir as direções do fluxo. Portanto, o primeiro vértice é o início do tubo, e o último vértice é o fim do tubo.
Referência: ASSETID = identificação do tubo, UNITID = identificação do nó no início do tubo, UNITID2 = identificação do nó no final do tubo.
fonte