Daha çox

Fəza çoxbucağını R -də böyük bir matrisə (böyük bir kafes kimi qurulmuş, netcdf olaraq yaranan) necə kəsmək olar?

Fəza çoxbucağını R -də böyük bir matrisə (böyük bir kafes kimi qurulmuş, netcdf olaraq yaranan) necə kəsmək olar?


Əvvəlcə GIS -də təcrübəsiz olduğumu bildirmək istəyirəm və R -ni öyrənməyə yeni başladım. Buna görə də səhv terminologiyanı bir şey üçün istifadə etsəm və ya sualım qarışıqdırsa, bunu mənim üçün aydınlaşdırmağa kömək edin.

İşim üçün dünyanın hər yerində tonlarla hava məlumatlarını xəritələşdirməyi planlaşdırırıq. Təcrübə üçün məlumatlarımızı verən adam bizə oynamaq üçün bəzi "nümunə" məlumatları təqdim etdi. Rəhbərim xəritələrimi R. -də yaratmağımı istəyir. Məlumatların netcdf formatında olması ehtimal olunur.

Netcdf məlumatlarını xəritələşdirməyimə kömək edən bir neçə dərslik tapmağı bacardım. İşdə kod:

#set iş kataloqu setwd ("D:  stuff") #əlavə kitabxanalar kitabxanası (maptools) kitabxana (ncdf4) kitabxana (RColorBrewer) kitabxana (qəfəs) kitabxana (rasterVis) #madagaskar şəkil faylını əlavə et <- CRS ('+proj = longlat +ellps = WGS84 ') madaqaskar <- readShapeSpatial ("MDG_adm0.shp", proj4string = proj) #10 illik qaytarılma dövrü üçün netcdf məlumatlarını oxuyun ncdf.data <- nc_open ("swio_rpmaps_200_83.nc") qaytarır <- ncvar .data, "y010") #genişlik və uzunluq uzunluğunu təyin et <- ncdf.data $ dim $ boylam $ vals lat <- ncdf.data $ dim $ enlem $ vals grid <- expand.grid (lon = lon, lat = lat ) kəsiklər <- c (0, 10, 20, 30, 40, 50, 60, 70, 80, 90) test <- səviyyə (qaytarır ~ lon * lat, data = grid, at = kəsiklər, kəsiklər = 10, gözəl = T, col.regions = rev (brewer.pal (10, "RdBu")), ylab = "Enlem", xlab = "Boylam", main = "10 İllik Qayıdış Dövrü") #madaqaskarın üstünə çəkilmiş #dönüş dövrləri test + qat (sp.polygons (madaqaskar))

Budur xəritənin görünüşü:

Problem: Bu xəritədə təqdim olunan külək sürəti məlumatlarının yalnız Madaqaskar hissəsini çıxarmaq istəyirəm. Həyatım boyu bunu necə edəcəyimi anlaya bilmirəm. GIntersection -ı rgeos paketindən istifadə etməyə çalışdım, amma netcdf məlumatları (iş sahəmdə böyük bir matris olaraq görünür; "test" olaraq təyin etdiyim və səviyyə sahəsini istifadə etdiyim zaman iş yerində böyük bir kafe halına gəlir) məkan, buna görə heç nə etməyimə icazə vermir.

Yazdığım kodla bu klipi ifa etməyin yolu varmı? Əks təqdirdə, bu netcdf məlumatları ilə bir məkan çoxbucağının üst -üstə düşməsinə necə uyğun olardım? Başımın üstündə YOLDAYAM!


Budur sadə bir yanaşma:

kitabxana (raster) madaqaskar <- getData ('GADM', ölkə = MDM ', səviyyə = 0) b <- kərpic ("swio_rpmaps_200_83.nc", var = "y010") bb <- məhsul (b, madaqaskar) bb < - maska ​​(bb, madaqaskar)

Plan qurmaq üçün baxın

süjet (bb, 1) kitabxana (rasterVis) səviyyəli sahə (bb)

Faylı yüklədim və istifadə edərək bu işi edə bilərəmrasterəvəzinəkərpic(bir qatlı ncdf faylı ilə uğursuz olur ...)

r <- raster (f, varname = "y010") r #sınıf: RasterLayer #ölçüləri: 499, 699, 348801 (nrow, ncol, ncell) #həll: 0.05, 0.05 (x, y) #mətn: 25.025, 59.975 , -29.975, -5.025 (xmin, xmax, ymin, ymax) #koord. refer. : +proj = longlat +datum = WGS84 +ellps = WGS84 +towgs84 = 0,0,0 #data mənbəyi: swio_rpmaps_200_83.nc #adlar: y010 #zvar: y010 mdg <- getData ('GADM', country = "MDG") , səviyyə = 0) x <- məhsul (r, mdg) y <- maska ​​(x, mdg) süjet (y)

Bunu tez -tez edəcəyinizi dediyiniz kimi, işləri sürətləndirmək üçün daimi bir maska ​​yaradardım və uyğunlaşma problemlərinin qarşısını almaq üçün yuvarlaq bir ölçü istifadə edərdim.

e <- mərtəbə (ölçü (mdg)) x <- kəsmə (r, e) x <- rasterləşdir (mdg, x, fayl adı = "mdgmask.tif", məlumat növü = "INT2S")

Bunu bir dəfə etdikdən sonra indi edə bilərsiniz

r <- kərpic (f, varname = "y010") m <- raster ('mdgmask.tif') x <- məhsul (r, m) y <- maska ​​(x, m)

Videoya baxın: Düzgün altıbucaqlının diaqonalları.