Uma das minhas tarefas para o trabalho é dividir as parcelas em grupos. Esses grupos serão usados pelos agentes para conversar com os proprietários. O objetivo é facilitar o trabalho do agente agrupando as parcelas próximas umas das outras e dividir as parcelas em números iguais para que o trabalho seja distribuído uniformemente. O número de agentes pode variar de um par para 10 ou mais.
Atualmente, eu executo essa tarefa manualmente, mas gostaria de automatizar o processo, se possível. Eu explorei várias ferramentas do ArcGIS, mas nenhuma parece atender à minha necessidade. Eu tentei um script (em python) que faz uso near_analysis
e seleção de polígonos, mas é bastante aleatório e leva uma eternidade para obter um resultado semi-correto que leva mais tempo para ser corrigido do que se eu tivesse feito tudo manualmente desde o início.
Existe um método confiável para automatizar esta tarefa?
Exemplo de resultados (espero que sem a divisão que vemos em amarelo):
fonte
Respostas:
Conjunto original:
Crie uma pseudo-cópia (arraste CNTRL no sumário) e faça a junção espacial de uma para muitas com o clone. Neste caso, usei a distância 500m. Tabela de saída:
Remova os registros desta tabela onde PAR_ID = PAR_ID_1 - fácil.
Itere a tabela e remova os registros em que (PAR_ID, PAR_ID_1) = (PAR_ID_1, PAR_ID) de qualquer registro acima dela. Não é tão fácil, use acrpy.
Calcular centróides de captação (UniqID = PAR_ID). Eles são nós ou rede. Conecte-os por linhas usando a tabela de junção espacial. Este é um tópico separado, certamente coberto em algum lugar deste fórum.
O script abaixo assume que a tabela de nós se parece com isso:
de onde o MUID veio das parcelas, o P2013 é um campo para resumir. Neste caso = 1 apenas para contagem. [rcvnode] - saída de script para armazenar o ID do grupo igual a NODEREC do primeiro nó no grupo / cluster definido.
Liga a estrutura da tabela com os campos importantes destacados
O Times armazena o peso do link / borda, ou seja, o custo da viagem de um nó para outro. Igual a 1 neste caso, para que o custo da viagem para todos os vizinhos seja o mesmo. [fi] e [ti] são um número seqüencial de nós conectados. Para preencher esta tabela, pesquise neste fórum sobre como atribuir de e para nós ao link.
Script personalizado para meu próprio ambiente de trabalho mxd. Tem que ser modificado, codificado permanentemente com a nomeação dos campos e fontes:
ENCONTRE A CAMADA DE NODES
GET LINKS LAYER
Exemplo de saída para 6 grupos:
Você precisará do pacote do site NETWORKX http://networkx.github.io/documentation/development/install.html
O script usa o número necessário de clusters como parâmetro (6 no exemplo acima). Ele está usando tabelas de nós e links para criar um gráfico com peso / distância iguais das arestas de deslocamento (Times = 1). Ele considera a combinação de todos os nós por 2 e calcula o total de [P2013] em dois grupos de vizinhos. Quando a taxa necessária alcançada, por exemplo, (6-1) / 1 na primeira iteração, continua com a meta de taxa reduzida, ou seja, 4, etc. até 1. Os pontos de partida são de grande importância, portanto, verifique se os nós 'finais' estão no topo da tabela de nós (classificando?) Veja os 3 primeiros grupos na saída de exemplo. Isso ajuda a evitar o 'corte de ramificação' a cada próxima iteração.
Customização de script para trabalhar no mxd:
fonte
Você deve usar a ferramenta "Análise de grupo" para atingir seu objetivo. Esta ferramenta é uma ótima ferramenta da caixa de ferramentas "estatísticas espaciais", como o @phloem apontou. No entanto, você deve ajustar a ferramenta para se adaptar aos seus dados e problemas. Criei um cenário semelhante ao postado e obtive a resposta próxima ao seu objetivo.
Dica: Usando o ArcGIS 10.2, quando executei a ferramenta, ela se queixou do pacote python ausente, "six". Portanto, certifique-se de tê-lo instalado pela primeira vez Fazer a ligação
Passos:
você calcula a calculadora para atribuir 1 a este campo para todas as linhas. basta alterar uma linha para 2.
Defina os parâmetros da ferramenta "Análise de grupo" como este:
tente alterar o parâmetro "Número de vizinhos" para atender às suas necessidades.
Instantâneos do resultado:
fonte
basicamente, você deseja um método de agrupamento de tamanho igual para poder pesquisar com essas palavras-chave na web. Para mim, há uma boa resposta no stats.SE com uma implementação Python em uma das respostas. Se você conhece o arcpy, deve poder usá-lo com seus dados.
Você primeiro precisa calcular o X e o Y dos centróides dos polígonos, depois pode inserir essas coordenadas no script e atualizar a tabela de atributos usando um cursor .da.
fonte
Olá, eu tive um problema semelhante a este antes, então eu já dei um pouco, mas nunca comecei outro, mas apenas no lado thoery eu estava pensando
FORMA DE ENTRADA
eu estava pensando que você poderia criar uma rede de pesca na forma de entrada
arrastão com uma interseção de você forma de entrada seria então
Você pode calcular a área dessas parcelas dentro do polígono recém-processado
No início do seu script, a área insere o polígono / enésima quantidade de tamanhos iguais
Você precisaria, então, de uma maneira de relacionar as parcelas para que elas fiquem cientes daquelas que fazem fronteira.
Então você pode passar por um cursor de linha para resumir as parcelas
Regras sendo
* Ele compartilha uma fronteira com o último verão * Não foi somado * Uma vez que ultrapassa o valor calculado como a área igual, ele recuaria e seria um grupo * O processo começaria novamente * o último grupo poderia ser a soma das parcelas restantes
Eu acho que estabelecer o relacionamento entre as parcelas pode ser a coisa mais complicada, mas uma vez feito isso, acho que será possível automatizá-lo
fonte
Acredito que a extensão que você está procurando é Distrito. Geralmente é usado para eleições, mas também para territórios de franquias de tamanho igual. (O tamanho não significa necessariamente para a área, pode haver dados demográficos)
http://www.esri.com/software/arcgis/extensions/districting
http://help.arcgis.com/en/redistricting/pdf/Districting_for_ArcGIS_Help.pdf
fonte
Esta é a minha solução para eventos pontuais. Não há garantias de que sempre funcionará ...
fonte
Você precisará criar um conjunto de dados de rede primeiro usando suas ruas. Eu tentei esse método proposto e, até agora, tive mais sorte em fazer o mesmo com o Agrupamento (etapa 3), usando as coordenadas X, Y e meios k para campos de entrada (não é perfeito, mas é mais rápido e mais próximo do que eu sou). precisando). Estou aberto a outros comentários e feedback.
fonte