Transformação de distância baseada em Haversine

Sep 05 2020

Eu tenho uma imagem binária com resolução de pixels em unidades de graus (EPSG: 4326):

Nesse caso, todos os pixels azuis claros são água (valor = 1) e os pixels roxos não são água (valor = 0). Eu gostaria de calcular uma transformação de distância desta imagem, onde o resultado é a distância de cada pixel do pixel mais próximo "ligado" (água). Isso pode ser feito com o scipy :

No entanto, as distâncias retornadas são euclidianas em relação às coordenadas da linha e da coluna de cada pixel. Alguém conhece um pacote ou função que irá computar uma transformação de distância usando a fórmula de Haversine nas coordenadas lon, lat em vez das coordenadas row, col?

[Eu sei que posso reprojetar para um CRS de preservação de comprimento e multiplicar pela resolução.]

Respostas

1 KadirŞahbaz Sep 14 2020 at 22:27

Eu seguiria estas etapas:

  • Crie pontos a partir do centro de cada pixel, atribua cada valor de pixel e coordene seu centro ao ponto correspondente. Reveja esta postagem . ( rasterio, geopandas)
  • Colete todos os pontos de água em um objeto multiponto. ( geopandas)
  • Calcule a distância entre um ponto e o multiponto e atribua a distância ao ponto. Nesta etapa, o resultado é a distância de cada ponto do ponto mais próximo no multiponto (pontos de água). Reveja esta postagem . ( geopandas/ shapely)
  • Criar novo raster a partir do valor dos pontos (com base nas propriedades do raster de origem)

Como haverá milhões de pontos para varredura de alta resolução, esse método será demorado.