Transformation de distance basée sur Haversine

Sep 05 2020

J'ai une image binaire avec une résolution de pixels en unités de degrés (EPSG: 4326):

Dans ce cas, tous les pixels bleu clair sont de l'eau (valeur = 1) et les pixels violets ne sont pas de l'eau (valeur = 0). Je voudrais calculer une transformée de distance de cette image, où le résultat est la distance de chaque pixel du pixel "on" (eau) le plus proche. C'est faisable avec scipy :

Cependant, les distances renvoyées sont euclidiennes par rapport à la ligne, aux coordonnées de colonne de chaque pixel. Est-ce que quelqu'un connaît un package ou une fonction qui va calculer une transformation de distance en utilisant la formule Haversine sur les coordonnées lon, lat plutôt que sur les coordonnées row, col?

[Je sais que je peux reprojeter à un CRS préservant la longueur et multiplier par la résolution.]

Réponses

1 KadirŞahbaz Sep 14 2020 at 22:27

Je suivrais ces étapes:

  • Créez des points à partir du centre de chaque pixel, attribuez chaque valeur de pixel et coordonnée de son centre au point correspondant. Examinez ce message . ( rasterio, geopandas)
  • Rassemblez tous les points d'eau sur un objet multipoint. ( geopandas)
  • Calculez la distance haversine entre un point et le multipoint et attribuez la distance au point. Dans cette étape, le résultat est la distance de chaque point par rapport au point le plus proche du multipoint (points d'eau). Examinez ce message . ( geopandas/ shapely)
  • Créer un nouveau raster à partir de la valeur des points (en fonction des propriétés du raster source)

Puisqu'il y aura des millions de points pour le raster haute résolution, cette méthode prendra du temps.