Transformasi jarak berbasis Haversine

Sep 05 2020

Saya memiliki gambar biner dengan resolusi piksel dalam satuan derajat (EPSG: 4326):

Dalam hal ini, semua piksel biru muda adalah air (nilai = 1) dan piksel ungu bukan air (nilai = 0). Saya ingin menghitung transformasi jarak dari gambar ini, di mana hasilnya adalah jarak setiap piksel dari piksel "on" (air) terdekat. Ini bisa dilakukan dengan scipy :

Namun, jarak yang dikembalikan adalah Euclidean sehubungan dengan baris, koordinat kolom dari setiap piksel. Adakah yang tahu tentang paket atau fungsi yang akan menghitung transformasi jarak menggunakan rumus Haversine pada koordinat lon, lintang daripada baris, koordinat col?

[Saya tahu saya dapat memproyeksikan ulang ke CRS yang mempertahankan panjang dan mengalikannya dengan resolusinya.]

Jawaban

1 KadirŞahbaz Sep 14 2020 at 22:27

Saya akan mengikuti langkah-langkah ini:

  • Buat titik dari pusat piksel individu, tetapkan setiap nilai piksel dan koordinat pusatnya ke titik yang sesuai. Tinjau posting ini . ( rasterio, geopandas)
  • Kumpulkan semua titik air ke satu objek multipoint. ( geopandas)
  • Hitung jarak haversine antara satu titik dan multipoint dan tetapkan jarak ke titik tersebut. Dalam langkah ini, hasilnya adalah jarak setiap titik dari titik terdekat di multipoint (titik air). Tinjau posting ini . ( geopandas/ shapely)
  • Buat raster baru dari nilai poin (berdasarkan properti raster sumber)

Karena akan ada jutaan poin untuk raster resolusi tinggi, metode ini akan memakan waktu.