Estou tentando usar o ArcGIS 10.2 para criar um buffer de pontos com base em uma área predefinida (por exemplo, 400 km quadrados). Além disso, os amortecedores de alguns dos pontos estão próximos ao litoral, o que exige que os amortecedores sejam cortados no litoral e ainda tenham a mesma área que os do interior (400 km2).
Alguém sabe como isso pode ser feito com o Model Builder ou o Arcpy?
Eu tenho habilidades limitadas com Arcpy e R, mas ficaria feliz em trabalhar com alguns scripts para obter uma solução para isso.
Por favor, veja a imagem abaixo mostrando uma representação gráfica do que estou tentando alcançar
arcpy
arcgis-10.2
r
buffer
Funkeh-Monkeh
fonte
fonte
Respostas:
A área de um buffer circular é uma função monotonicamente crescente do raio do buffer (em um sistema de coordenadas planas de qualquer maneira). Portanto, uma estratégia de pesquisa simples pode encontrar um raio
R
tal que a área do buffer do raioR
cortado na região poligonalA
seja (até alguma tolerância)s
.O algoritmo de pesquisa mais simples seria apenas uma pesquisa binária. Comece com dois raios, um muito pequeno e um muito grande, de modo que a área desejada esteja em algum lugar entre a área dos buffers cortados desses raios. Depois, pegue o ponto médio desses pontos e calcule as áreas de buffer e descubra se o raio desejado está acima ou abaixo do ponto médio. Atualize seus limites de raio e repita até obter alguma tolerância na área desejada.
Escrever uma pesquisa binária em Python e usar a API do ArcGIS Python parece uma boa maneira de aprender! Tenho certeza de que fiz isso em R, anos atrás ...
Aqui está um código R:
Uso:
Primeiro, configure uma região poligonal simples do Reino Unido:
Agora defina um ponto:
Então você apenas:
Esta é uma lista com dois componentes,
b
é o buffer:e tem a área correta:
e
r
é a saída deuniroot
, que inclui o valor do raio do buffer.Portanto, neste caso, a largura do buffer era um pouco abaixo dos 64 km.
As únicas coisas a se mexer aqui são os valores iniciais inferior e superior - acho que você pode intuir um raio mais baixo
sqrt(A/pi)
e o superior não é tão importante quanto o algoritmo de busca aumentará até capturar o intervalo.O algoritmo de pesquisa pode falhar se o raio máximo inicial for realmente muito grande, pois você pode estar protegendo toda a região com um raio enorme; nesse caso, alterar o raio não mudará a área ... Mas limites sensíveis devem impedir que isso aconteça.
fonte
rgeos
pacote e suagBuffer
função, provavelmente ...R
código são: (a) separa os cálculos de GIS da lógica de pesquisa e (b) capitaliza os algoritmos de pesquisa (inuniroot
) que foram otimizados e testados - você não precisa escrever um você mesmo (e provavelmente não será o mais eficiente).É quase impossível, devido à posição dos pontos. Você pode criar buffers de 400 km 2 , mas os pontos mais próximos da costa sempre terão uma área menor em comparação com os mais distantes (> 400 km 2 ).
A única coisa que você pode fazer é realizar uma análise de buffer nos pontos e recortar os buffers criados com o recurso de costa posteriormente.
fonte