Daha çox

GDAL istifadə edərək Pythonda hamarlaşdırma / interpolasiya rasteri?


Pythonda inkişaf edirəm və rasters və shapefiles ilə manipulyasiya etmək və onlarla əlaqə qurmaq üçün OSGEO-dan GDAL istifadə edirəm.

Nöqtə xüsusiyyətləri olan bir shapefile götürüb səth rasterinə daxil etmək istəyirəm. Hal-hazırda nöqtə xüsusiyyətindən bir dəyəri rasterə (bütün nodata dəyərləri ilə təyin olunur) yandıran, lakin toxunulmamış pikselləri 'nodata' dəyəri olaraq qoyan 'RasterizeLayer' metodundan istifadə edirəm. Buna görə mənə bir dama taxtası tipli raster qaldı.

RasterizeLayer istifadə etdikdən sonra nələr var:

Son məhsul üçün nə istəyirəm:

İnanıram ki, axtardığım funksiya arxa hissə gətirmə idxalından 'Spline_sa ()' kimi tanınır.

GDAL-nin oxşar bir funksiyası varmı, yoxsa istədiyim nəticəni əldə etmək üçün fərqli bir metod varmı?


NumPy və Scipy-yə nəzər yetirərdim - SciPy Kılavuzunda scipy.interpolate.griddata funksiyasından istifadə edərək nöqtə məlumatlarını interpolasiya etmək üçün yaxşı bir nümunə var. Aydındır ki, bu, səssiz bir sıra içərisində məlumatların olmasını tələb edir;

  • GDAL python bağlamalarını istifadə edərək məlumatlarınızı Python-a oxuya bilərsinizgdal.Dataset.ReadAsArray ()raster üçün.
  • OGR ilə xüsusiyyət təbəqəsindən keçmək və shapefile-dən nöqtə məlumatlarını çıxarmaq (və ya daha yaxşı, istifadə edərək shapefile bir CSV-yə yazmaq olardı)GEOMETRY = AS_XYZ[OGR CSV fayl formatına baxın] və CSV-ni Python-a oxuyun).

Bir ızgara çıxışı əldə etdikdən sonra, nəticədə yaranan səssiz serialı rasterə yazmaq üçün GDAL istifadə edə bilərsiniz.

Nəhayət, Scipy interpolate kitabxanasında bir şansınız yoxdursa, həmişə scipy.ndimage-ı da sınaya bilərsiniz.


GDAL gridding API-yə baxın. Bunun Python bağlamalarına məruz qaldığını bilmirəm, əksinə, alt proses prosesi modulu vasitəsilə gdal_grid köməkçi proqramını axtarırsınız.

GDAL grid API'si yalnız tərs məsafədən ağırlıq çəkmə, hərəkət edən orta və yaxın qonşu istifadə edir, splines tətbiq etmir. Başqa bir seçim də Scipy istifadə etməkdir.


Bu mövzuda bir az köhnə, amma sklearn-dən skspatial adlı KNN alqoritmindən istifadə edən sadə bir modul yazdım.

https://github.com/rosskush/skspatial

Geopandaları istifadə edərək bir shapefile idxal edə və bir sütun seçə bilərsiniz və bir rasterə ixrac edilə bilən bir səthi interpolasiya edəcəkdir. Çox təməl və ehtimal ki bunu etmək üçün ən yaxşı yol deyil, amma hər şeyi ən azı təmiz piton saxlayır.


Videoya baxın: Spatial Interpolation with GDAL in Python #2: IDW and Linear Interpolation (Oktyabr 2021).