Viac

Najrýchlejší spôsob prevodu veľkého rastra na krivku pomocou jazyka R alebo Python?


Mám veľký rastrový súbor (129600 x 64800 pixelov) s globálnymi vodnými útvarmi (1 bitové hodnoty 0 a 1) a pokúšam sa extrahovať pobrežia oceánov a vnútrozemských vôd.

Skúšal som s ArcGIS a QGIS prevádzať z rastra na krivku, ale trvá to celé veky.

Pozná niekto lepší / rýchlejší spôsob (Python alebo R) alebo lepší nástroj na túto úlohu?

Aktualizácia

  • R: rasterToContour môže byť rýchly a presný, ale ak máte veľmi veľký súbor údajov, ako je ten môj (8 398 080 000 pixelov), potrebujete buď veľmi veľké množstvo pamäte RAM (viac ako 16 GB), alebo prinútite R, aby vykonal viac spracovania na pevnom disku a ten bude tiež trvať veky.
  • Python / GDAL: gdal_poligonize vytvára polygóny namiesto kriviek

Aktualizácia 2

  • R rasterToContour: rasterToContour neprináša požadované výsledky. V porovnaní s ArcGIS (raster na mnohouholník, za ktorým nasleduje funkcia po riadku) neextrahuje presný obrys pixelov, ako je uvedené v príkladoch nižšie.

výsledok rasterToContour

Výsledok ArcGIS

AKTUALIZÁCIA 3

Python / GDAL: Spustil som gdal_polygonize z príkazového riadku proti ArcGIS na testovacej množine údajov a výsledky boli mimoriadne jasné:

  • gdal: 49 sekúnd
  • ArcGIS: 1,84 sekundy

Upraviť: V najnovšej verziisf(v0.9.1) ahviezd(v0.4.1), musíte určiťzlúčiť = PRAVDAargument vo výzve nasf :: st_as_stars ()funkcie.

Pre potomkov som mal úspech vhviezdy ::zabaliť vRza rýchle vykonanie tohto typu operácie.

knižnica (raster) knižnica (hviezdičky) knižnica (sf) knižnica (magrittr) f <- system.file ("externý / test.grd", balíček = "raster") r <- raster (f) r [r [] < 750] <- 0 r [r []> = 750] <- 1 x <- st_as_stars (r)%>% st_as_sf (merge = TRUE)%>% # toto je časť rastra do mnohouholníkov st_cast ("MULTILINESTRING") # vrhať mnohouholníky na krivky (x)

plot (r) plot (x, add = TRUE)


Pracujem s R a používa sarasterToPolygonszrasterbalíček v minulosti, ale teraz mám radšejgdal_polygonizeRJohn Baumgartner. Zakladá sa na tomgdal_polygonize.pya je oveľa rýchlejší. John Baumgartner uverejnil kód a vo svojom blogu uviedol príklad použitia.

Ak poznáte python, môžete ho použiťgdal_polygonize.pypriamo samozrejme.


VyskúšajterasterToContourz raster balíček.

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

Súbory potom môžete ľahko zapísať do miestneho priečinka, napr. ako „ESRI Shapefile“ (.shp) pomocou nasledujúceho kódu. Pozri sa naogrDriversod rgdal aby ste zistili, s ktorými ovládačmi je váš systém kompatibilný.

knižnica (rgdal) writeOGR (x, dsn = getwd (), vrstva = "pobrežné čiary", ovládač = "ESRI Shapefile")

Aj keď som veľkým fanúšikom GDAL, nástroj polygonize bol príliš pomalý aj pre moje aplikácie.

Rýchla alternatíva jegdal_trace_outlineod Dans GDAL skripty ktorá má tiež viac možností týkajúcich sa tolerancie, šišiek atď.

Páči sa mi togdal_polygonizetoto tiež produkuje polygóny, ktoré by ste potom museli konvertovaťogr2ogr -nlt MULTILINESTRING.

Nevýhodou je, že si ho musíte zostaviť sami, pokiaľ nepoužívate systém Linux alebo Mac OsX.


Pozri si video: Jennifer Lopez El Plan B (Október 2021).