Daha çox

R və ya Python istifadə edərək böyük rasteri polinelə çevirməyin ən sürətli yolu?


Qlobal su obyektləri ilə (1 bit dəyərləri 0 və 1) böyük bir raster sənədim var (129600 x 64800 piksel) və okean və daxili su sahillərini çıxarmağa çalışıram.

ArcGIS və QGIS ilə rasterdən polilinə keçmək üçün çalışdım, lakin bu, yaş tələb edir.

Kimsə bu tapşırıq üçün daha yaxşı / daha sürətli bir yol (Python və ya R) və ya daha yaxşı bir vasitə bilirmi?

Yeniləyin

  • R: rasterToContour sürətli və dəqiq ola bilər, amma mənim kimi (8.398.080.000 piksel) çox böyük bir verilənlər bazanız varsa ya çox böyük bir RAM (16GB-dan çox) ehtiyacınız var, ya da R-ni sabit diskdə daha çox işləməli olmağa məcbur edin yaş da alacaq.
  • Python / GDAL: gdal_poligonize polylines əvəzinə çoxbucaqlar yaradır

Yeniləmə 2

  • R rasterToContour: rasterToContour istənilən nəticəni vermir. ArcGIS-lə müqayisədə (rasterdən poliqona, sonra da xüsusiyyətdən sətirə) aşağıdakı nümunələrdə göstərildiyi kimi dəqiq piksel konturunu çıxarmır.

rasterToContour nəticəsi

ArcGIS nəticəsi

YENİLƏNİB 3

Python / GDAL: Bir test verilənlər bazasında gdal_polygonize əmr sətrindən ArcGIS-ə qarşı çalıştırdım və nəticələr son dərəcə aydın idi:

  • gdal: 49 saniyə
  • ArcGIS: 1.84 saniyə

Düzenle: .ın son versiyasındasf(v0.9.1) vəulduzlar(v0.4.1), qeyd etməlisinizbirləşmə = DOĞRUçağırışında mübahisəsf :: st_as_stars ()funksiya.

Nəsillər üçün mən uğur qazandımulduzlar ::paketRbu tip əməliyyatı tez bir zamanda aparmaq üçün.

kitabxana (raster) kitabxana (ulduzlar) kitabxana (sf) kitabxana (magrittr) f <- system.file ("external / test.grd", pack = "raster") r <- raster (f) r [r [] < 750] <- 0 r [r []> = 750] <- 1 x <- st_as_stars (r)%>% st_as_sf (merge = TRUE)%>% # bu st_cast çoxbucaqlı hissəsinin rasteridir ("MULTILINESTRING") # çoxbucaqlıları çox xəttlər sahəsinə atın (x)

süjet (r) süjet (x, əlavə et = DOĞRU)


R ilə işləyirəm və istifadə edirəmrasterToPolygonsetibarənrasterKeçmişdə paket, amma indi seçim edirəmgdal_polygonizeRJohn Baumgartner tərəfindən. Bu əsas götürürgdal_polygonize.pyvə daha sürətli. John Baumgartner kodu yayımladı və blogunda istifadə üçün bir nümunə verdi.

Python ilə tanışsınızsa, istifadə edə bilərsinizgdal_polygonize.pybirbaşa əlbətdə.


Cəhd edinrasterToContouretibarən raster paket.

f <- system.file ("external / test.grd", pack = "raster") r <- raster (f) r [r [] <750] <- 0 r [r []> = 750] <- 1 x <- rasterToContour (r) class (x)> [1] "SpatialLinesDataFrame"> attr (, "pack")> [1] "sp" plot (r) plot (x, add = TRUE)

Daha sonra sənədləri yerli bir qovluğa asanlıqla yaza bilərsiniz, məsələn. Aşağıdakı kodu istifadə edərək 'ESRI Shapefile' (.shp) olaraq. Bir baxınogrDriversdan rgdal sisteminizin hansı sürücülərlə uyğun olduğunu tapmaq.

kitabxana (rgdal) writeOGR (x, dsn = getwd (), layer = "coastlines", driver = "ESRI Shapefile")

GDAL-ın böyük bir pərəstişkarı olduğum halda, çoxbucaqlı vasitə mənim tətbiqetmələrim üçün də çox yavaş idi.

Sürətli bir alternativgdal_trace_outlinedan GDAL skriptlərini tərtib edir dözümlülük, çörək və s. ilə əlaqəli daha çox seçim var.

Kimigdal_polygonizebu da sonra çevirməli olduğunuz poliqonları istehsal edirogr2ogr -nlt ÇOX ÇOX ÇOXLUQ.

Bunun mənfi tərəfi Linux və ya Mac OsX sistemində olmadığınız müddətdə özünüz tərtib etməlisiniz.