top of page
  • Foto do escritorJoão Ataide

Operações de densidade e distância com Arcpy

Atualizado: 15 de fev. de 2023


 

Nesse artigo aqui vou mostrar-te algumas funções interessantes do spatial analyst, tais funções que trabalham com densidade (proximidade de pontos e linhas) e distância entre elementos, entendo que aparentemente essas funções fogem um pouco do trabalho de PDI mais convencional, mas irei mostrar que muitas dessas podem ser facilitadoras para nós criarmos algumas mascas ou até mesmo ajustar imagens. Para começar irei importar as mesmas bibliotecas que usei no artigo anterior. Assim como configurar o ambiente de execução, ou seja, o diretório de trabalho e o diretório de dados.


# Importar bibliotecas
 import arcpy 
 from arcpy.sa import *
# Configurar ambiente
workspace = r'D:\\Projeto\\Spatial Analyst.gdb' 
basepath = r'D:\\Projeto\\dados'
imagespath = f'{basepath}\\imagens'

coords = "467321.538879395 7933874.64569092 481460.825317383 7949490.0112915"

Para o trabalho a vamos usar são esses abaixo referente aos tipos ponto, linha e polígono. Os dados de polígono são os talhões de fazendas vizinhas ao rio, os pontos são dados processados referente ao centroide desses, o arquivo de linha são os aceiros dessas mesmas fazendas.


points = f"{workspace}\\points"
lines = f"{basepath}\\dados\\Lines.shp"
poligonos = f"{basepath}\\dados\\area.shp"



Operações de densidade


As primeiras funções que vamos usar são as de densidade, esta basicamente analisam proximidade e quantidade de elementos próximos.


Primeira função é a de Kernel Density essa é uma função não-paramétrica para estimar a densidade de probabilidade de uma variável aleatório. Para isso precisamos só passar qual o tamanho das celular e o raio de análise e então ele vai criar um raster com a densidade.




cellSize = 5
searchRadius = 900

kernelD = KernelDensity(points, "", cellSize, searchRadius,                       "SQUARE_KILOMETERS","DENSITIES", "PLANAR")

kernelD

Já a ferramenta de Line Density calcula a densidade de feições lineares na vizinhança de cada célula raster de saída. A densidade é calculada em unidades de comprimento por unidade de área, cada célula do gerado raster é um buffer circular usada para determinar o comprimento da densidade da linha.




cellSize = 5
searchRadius = 900

lines_dense = LineDensity(lines, "", cellSize, searchRadius,"SQUARE_MILES") 

lines_dense




Outra função Point Density calcula a densidade dos pontos ao redor de cada célula raster de saída. Conceitualmente, uma vizinhança é definida ao redor de cada centro de célula raster, e o número de pontos que caem na vizinhança é totalizado e dividido pela área da vizinhança.





cellSize = 5
searchRadius = 900

myNbrCirc = NbrCircle(searchRadius, "MAP")

pointD = PointDensity(points, None, cellSize, myNbrCirc, "SQUARE_KILOMETERS")
pointD


E qual aplicação no PDI? Você pode perguntar essas funções podem, por exemplo, criar uma seleção das nossas áreas de interesse. Usando a imagem RGB e a densidade de pontos, conseguimos pegar somente as áreas dos talhões.



pick = Pick(pointD, [rgb_clipped], "MULTI_BAND")

pick


Operações de distância


A primeira função de distância é a Distance Accumulation que calcula e acumulada de cada célula às fontes de entrada, aplicações simples são: calcular a distância da cidade mais próxima, a custa referente a distância a estrada mais próxima ou como nesse exemplo qual a distância ao redor do curso d'água.



outDistAcc = DistanceAccumulation(lines)

outDistAcc


O resultado aqui calcula que algo lógico, mas que fica ilustrado em formato de imagem, ilustrando que quanto mais longe do curso do rio, mais longe fica. Mas podemos usar esse resultado para dentro de um limite e selecionar somente área no rio, assim selecionando o valor dos píxeis dentro dessa.



Por último a função Distance Allocation aloca uma área para cada distância desde a origem, exemplos práticos é identificar as áreas as quais vamos fazer um levantamento em terra para confirmar a verdade terrestre de uma classificação, ou identificar a área alocadas no habitat de uma espécie de animal.


outDistAlloc = DistanceAllocation(lines)

outDistAlloc 
bottom of page