Više

Iscrtavanje NetCDF datoteke koristeći lat i lon sadržane u varijablama

Iscrtavanje NetCDF datoteke koristeći lat i lon sadržane u varijablama


Pokušavam iscrtati ovu NetCDF datoteku (i slično) kao 2d konturnu mapu. Datoteka sadrži jedan sloj jedne varijable, "pr".
Datoteka ima 413x229 koordinate X-Y piksela i, uskladištene unutar "xlon" i "xlat" varijabli, tačne koordinate svake tačke mreže.
Lako mogu iscrtati pomoću X-Y koordinata:

naziv datoteke <- "file.nc" varname <- "pr" biblioteka (raster) varijabla <- raster (naziv datoteke, varname = varname) plot (varijabla)

Međutim, iscrtavanje izlazi "stisnuto", i štaviše, želim iscrtati koristeći lat-lon koordinate. Kako to mogu učiniti?


Mislim da je ovo nekako slično ovom pitanju:
https://gis.stackexchange.com/questions/48518/how-to-re-project-ease-equal-area-scalable-earth-grid-with-a-25-km-cylindrica?newreg=0eac93c7cbf04b6386d4e62e64e747ef

Međutim, tamo navedeno rješenje ne odgovara mom slučaju jer:

  • Želim izbjeći korištenjencdf4paket, radije bih upotrijebiorastersamo bi mi to omogućilo da proširim proceduru na veće datoteke
  • Dobijam nekoliko grešaka uconvertGrid ()funkcije, kao što su:
    koordinate (xp) = ~ x+y
    Greška u .subsetu (x, j): samo 0 se mogu miješati s negativnim indeksima

Mislim da bih trebao promijeniti projekciju. Sve što znam o projekciji sadržano je u datoteci ncdump:

projection = "LAMCON" grid_size_in_meters = 12000. latitude_of_projection_origin = 39. longitude_of_projection_origin = 14. standard_parallel = 35., 51. grid_factor = 0.684241343018562

Datoteka nema CRS specifikaciju. Znam da bih to trebao učiniti pomoćusp,rasterirasterVispakete, ali do sada nisam uspio.

Pokušaj iscrtavanja kao data.frame također ne funkcionira jer rešetka nije konstantna.


Pretpostavljam da vas moj odgovor na vaše drugo pitanje o StackOverflow -u nije odveo u pravom smjeru?

Evo detaljnijeg odgovora koji bi vas mogao odvesti u pravom smjeru.

Prvo, moramo znati projekciju vaših podataka i opseg da bismo mogli pravilno projicirati na Long/Lat mrežu. Nažalost, nemamo PROJ4 CRS niti opseg pa se trudim da ih procijenim.

# Prvo, procijenite opseg. # Počinjemo sa lat i long, zatim ga projektujemo u ulaznu datoteku Lambertove konformne biblioteke projekcija (raster) <- "pr_averaged_Med_CORDEX_ATM.1980-2008.nc" # Uhvatite lat i lon iz podatkovne lat <- raster (inputfile, varname = "xlat") lon <- raster (inputfile, varname = "xlon") # Pretvorite u bodove i uskladite lat i lons plat <- rasterToPoints (lat) plon <- rasterToPoints (lon) lonlat <- cbind (plon [, 3], plat [, 3]) # Navedite lonlat kao prostorne tačke sa projekcijom kao long/lat lonlat <- SpatialPoints (lonlat, proj4string = CRS (" +proj = longlat +datum = WGS84")) # Potreban je paket rgdal da ga projiciram u originalnu biblioteku koordinatnog sistema ("rgdal") # Moja najbolja pretpostavka o nizu proj4 iz danih informacija mycrs <- CRS (" +proj = lcc +lat_1 = 35 +lat_2 = 51 +lat_0 = 39 +lon_0 = 14 +k = 0.684241 +jedinice = m +datum = WGS84 +no_defs ") plonlat <- spTransform (lonlat, CRSobj = mycrs) # Pogledajte opseg plonlata (plonlat) # Da! Sada možemo pravilno postaviti informacije o koordinatama za raster pr <- raster (ulazna datoteka, varname = "pr") # Popraviti projekciju i projekciju opsega (pr) <- mycrs opseg (pr) <- opseg (plonlat) # Uzmite a pogledaj pr ploce (pr) # Projekat na dugačku lat grid r <- projectRaster (pr, crs = CRS (" +proj = longlat +datum = WGS84")) # Pogledajte r grafikon (r) # Dodajte konture konture (r , add = TRUE) # Dodaj biblioteku linija država ("maps") kartu (add = TRUE, col = "blue")

Mislim da to izgleda tačno. Čini se da se državne granice u blizini okeana slažu sa bojama radnje. Mislim da odatle možete preuzeti. Možete napraviti ljepše parcele sarasterVisiliggplot.


Ponekad, poput varijabilnog ekstrakta iz HDF (hdf5) datoteke, nemate redovan razmak između ćelija. Lat i lon ekstrakt iz datoteke, na primjer, imaju nepravilan razmak. Dakle, imat ćete problema s izradom ispravnog rastera ili slike. Stoga možete interpolirati podatke. Za to koristim funkciju interp iz paketa akima. Ovo je način na koji rješavam problem ako postoji matriz ili skup podataka s nepravilnim vrijednostima lat i lon. Mislim da je ovo koristan program i za ggplot2.


1. Uvod

NetCDF je široko korišteni format za razmjenu ili distribuciju klimatskih podataka, a također je usvojen u drugim područjima, posebno u bioinformatici, te u drugim disciplinama gdje se stvaraju veliki višedimenzionalni nizovi podataka. NetCDF datoteke jesu samoopisivanje, u smislu da sadrže metapodatke koji opisuju ono što se nalazi u datoteci, kao što je geografska širina i dužina, raspored mreže, imena i jedinice varijabli u skupu podataka i „atributi“ koji opisuju stvari poput kodova nedostajućih vrijednosti , ili pomaci i faktori razmjera koji su možda korišteni za komprimiranje podataka. NetCDF datoteke su takođe mašinski nezavisni jer se može prenijeti među poslužitelje i računare s različitim operativnim sistemima, bez potrebe za pretvaranjem datoteka na neki način. Izvorno razvijeni za pohranu i distribuciju klimatskih podataka, poput onih generiranih simulacijom klime ili modelima ponovne analize, format i protokoli mogu se koristiti za druge skupove podataka s mrežom. NetCDF biblioteke razvija i održava Unidata http://www.unidata.ucar.edu/software/netcdf/, a postoje i aplikacije za jednostavnu upotrebu za izradu jednostavnih vizualizacija datoteka NetCDF, kao što su Panoply, http: // www. giss.nasa.gov/tools/panoply/.

Postoje dvije verzije netCDF netCDF3, koji se široko koristi, ali ima određena ograničenja veličine i performansi, te netCDF4, koji podržava veće skupove podataka i uključuje dodatne mogućnosti poput kompresije datoteka.

R ima mogućnost čitanja i pisanja (i stoga analize) netCDF datoteka, koristeći ncdf i ncdf4 pakete koje je obezbijedio David Pierce, i kroz druge pakete poput rastera, metR1 i RNetCDF. Paketi ncdf4.helpers i easyNCDF pružaju neke dodatne alate.

Paket ncdf4 dostupan je i za Windows i za Mac OS X (i Linux) i podržava i stariji NetCDF3 format, kao i netCDF4. (Pogledajte ncdf/ncdf4 web stranicu na http://cirrus.ucsd.edu/


Iscrtavanje NetCDF datoteke koristeći lat i lon sadržano u varijablama - Geografski informacijski sistemi

Trebaju li indeksi niza početi na 0 ili 1? Moj kompromis od 0,5 je odbijen bez, mislio sam, odgovarajućeg razmatranja. --Stan Kelly-Bootle

Uvod

Bibliotečki softver poput netCDF ili HDF5 pruža pristup višedimenzionalnim podacima pomoću indeksa niza, ali često bismo radije pristupili podacima po koordinatama, poput točaka na površini Zemlje ili okvirima za ograničavanje prostora i vremena.

Konvencije o metapodacima o klimi i prognozi (CF) pružaju dogovorene načine za predstavljanje koordinatnih sistema, ali se ne bave time da pristup koordinatama bude praktičan i efikasan. Konkretno, upotreba koordinatnih sistema, poput onih opisanih u odjeljku CF Konvencije & quotTwo-Dimensional Latitude, Longitude, Coordinate Variables & quot, možda neće omogućiti direktan način za pronalaženje indeksa niza iz koordinata širine i dužine iz različitih razloga. Primjeri takvih podataka uključuju:

  • korištenje krivolinijskih rešetki koje slijede obale
  • satelitski otvori georeferencirani na geografske širine
  • koordinatni sistemi bez CF atributa grid_mapping_name
  • nepomreženi & citati & quot podaci, kao što su posmatranja tačaka i sondiranje

Korištenje stvarnog svijeta (dobro, u redu, an idealizirana sferna Earth), vidjet ćemo nekoliko načina pristupa podacima prema koordinatama, kao i kako upotreba odgovarajućeg softvera i struktura podataka može uvelike poboljšati efikasnost takvog pristupa.

Primjer skupa podataka

Primjer skupa podataka koji koristimo je iz modela HYbrid Coordinate Ocean Model (HYCOM).

Ovaj skup podataka čini dobar primjer iz nekoliko razloga:

  • To je tipično za mnoge podatke o modelima oceana, klime i prognoze, s više varijabli na istoj mreži i u skladu s CF konvencijama za predstavljanje koordinatnog sistema.
  • Ima netrivijalni geoprostorni koordinatni sistem, predstavljen 2D nizovima geografskih širina i dužina koji su pomoćne koordinate za druge varijable. Čini se da je rešetka podskup tripolarne mreže, ali nijedan od parametara potrebnih za izvođenje formule za koju elementi odgovaraju određenoj koordinati nije u datoteci.

Iako nije jako relevantan za temu ovog bloga, primjer skupa podataka također dobro koristi kompresiju, s vrijednostima ispune nad kopnom za podatke o oceanima. Klasična datoteka netCDF je 102 MB, ali ekvivalentna datoteka klasičnog modela netCDF-4 sa kompresijom iznosi samo 30 MB. Ništa u ovom postu nema nikakve veze s modelom podataka netCDF-4, sve se odnosi na klasični model podataka netCDF-3 ili netCDF-4.

Evo nekih rezultata, relevantnih za problem koji ćemo predstaviti, iz & quotncdump -h & quot primijenjenog na datoteku primjera:

Iscrtavanje cijele rešetke geografske širine i dužine rezultiralo bi velikim mrljama od 600.000 piksela, ali evo rjeđeg prikaza mreže, koji prikazuje svaku 25. liniju paralelnu s osi X i Y:

Primjeri upita o koordinatama

Varijabla temperature ima pomoćne koordinate zemljopisne dužine i širine i želimo pristupiti podacima koji odgovaraju njihovim vrijednostima, a ne indeksima niza X i Y. Možemo li učinkovito odrediti vrijednosti na netCDF varijablama, poput temperature ili saliniteta, na primjer, na tački mreže najbližoj 50 stepeni sjeverne širine i -140 stepeni istočne geografske dužine?

Općenito, kako možemo efikasno

  • odrediti vrijednost varijable najbliže navedenoj lokaciji i vremenu?
  • pristupiti svim podacima na podmreži definiranoj unutar zadanog prostorno-vremenskog koordinatnog graničnog okvira?

Zašto za primjer koristiti iPython prijenosno računalo?

Za ovaj primjer, kod za čitanje netCDF podataka i preslikavanje iz koordinatnog prostora u indeksni prostor niza predstavljen je u iPython prijenosniku. Zašto ne C, Java, Fortran ili neki drugi jezik koji podržava Unidata?

Poenta je jasnoća. Ovo je prilično dugačak blog koji je vjerojatno već prikupio nekoliko komentara & quotTLDR & quot. Prateći primjer koda mora biti kratak, jasan i lak za čitanje.

Bilježnica iPython, koja je nastala kao rezultat sesije čitanja netCDF podataka u Unidata 2013 TDS-Python radionici, dostupna je iz Unidata TDS-Python radionice iz 2013., s kojom možete pokrenuti primjere i mjeriti vrijeme na vlastitoj mašini, pa čak i sa svoje podatke!

Odaberete li drugu metodu, možete vidjeti rezultate promjene primjera ili zamjene vlastitih podataka. Da biste koristili bilježnicu, morate imati instaliran Python i neke dodatne biblioteke, kako je navedeno na dnu stranice README na navedenoj web stranici radionice.

Samo pogled na HTML verziju trebao bi biti dovoljan da vidite šta se dešava.

Četiri pristupa

U bilježnici implementiramo i postupno poboljšavamo nekoliko načina za pristup podacima netCDF -a na osnovu koordinata umjesto indeksa niza:

  • sporo, jednostavno, a ponekad i pogrešno
  • brzo, jednostavno, a ponekad i pogrešno
  • ne tako brzo, ali tačno
  • brzo, ispravno i skalabilno za mnoge upite na istom skupu tačaka podataka

Naivan, spor pristup

Budući da je naš konkretni problem pronaći ono što je od preko 600.000 točaka najbliže (lat, lon) točki (50, -140), prvo bismo trebali reći što se podrazumijeva pod "zatvori".

Naivna metrika za udaljenost na kvadrat između (lat, lon) i (lat0, lon0) samo koristi & quotEuclidean normu & quot, jer je lako izračunati:

Zato moramo pronaći indekse x i y tako da tačka (Latitude [y, x], Geografska dužina [y, x]) je blizu željene tačke (lat0, lon0). Naivan način za to je korištenje dvije ugniježđene petlje, provjeravajući udaljenost na kvadrat za svih 600.000+ parova y i x vrijednosti, jednu po jednu tačku.

Kod za ovu verziju predstavljen je kao funkcija naive_slow i nekoliko narednih redaka koji pozivaju funkciju na našem eksplicitnom primjeru.

Imajte na umu da svi primjeri ćelija koda u početku otvaraju datoteku primjera, čitaju podatke potrebne za pronalaženje željenih vrijednosti i zatvaraju datoteku nakon ispisa dovoljno podataka da provjere da li smo dobili pravi odgovor. Otvaranje datoteke, čitanje podataka i zatvaranje datoteke ponavlja se za svaku funkciju tako da su ćelije neovisne jedna o drugoj i mogu se pokrenuti bilo kojim redoslijedom ili ponovo pokrenuti bez grešaka, poput pokušaja čitanja iz zatvorenog datoteke ili zatvaranje iste datoteke dva puta.

Brže uz NumPy

Prvi pristup koristi konvencionalne eksplicitne petlje, zbog čega podsjeća na Fortran ili C kod. Može se ubrzati za faktor preko 700 samo korištenjem NumPy-a, Python-ove biblioteke koja podržava višedimenzionalne nizove i nizove-istovremeno-operacije i funkcije koje često zamjenjuju eksplicitne petlje cijelim nizom izraza. Ovu verziju funkcije zovemo naive_fast.

Kao naive_slow, pati od nedostataka u upotrebi & quotflat & quot mjere bliskosti.

Udaljenost tunela: još uvijek brza, ali ispravnija

Problem s obje prethodne verzije je to što Zemlju tretiraju kao ravnu, sa stupnjem geografske dužine u blizini polova jednako velikim kao i stepen geografske dužine na ekvatoru. On također tretira udaljenost između točaka na rubovima, poput (0,0, -179,99) i (0,0, +179,99) kao veliku, iako se te točke nalaze jedna preko druge preko međunarodne datumske linije.

Jedan od načina za rješavanje oba ova problema je upotreba bolje metrike, na primjer, dužine tunela kroz Zemlju između dvije točke kao udaljenosti, što se lako izračuna samo pomoću male trigonometrije.

Ovo rezultira ispravnijim rješenjem koje funkcionira čak i ako su geografske dužine date u drugom rasponu, na primjer između 0 stupnjeva i 360 stupnjeva umjesto -180 do 180, jer samo koristimo trigonometrijske funkcije kutova za izračunavanje udaljenosti tunela. Wikipedia ima jednostavne formule za aktiviranje koje možemo koristiti. Ovo nam također daje isti odgovor kao i naivni pristup za naš primjer primjera, ali izbjegava pogrešne odgovore koje bismo dobili tretirajući Zemlju kao ravnu u "kvotnativnim" pristupima.

Mjerenje vremena za ovaj pristup, s funkcijom koju pozivamo tunnel_fast, jer i dalje koristimo brze NumPy nizove i funkcije umjesto eksplicitnih petlji, i dalje je oko 200 puta brži od naivnog pristupa petlje.

Korištenje KD-stabala za veće skalabilne ubrzavanja

Konačno, koristimo strukturu podataka posebno dizajniranu za brzo pronalaženje najbliže tačke u velikom skupu tačaka upitnoj tački: KD-stablo (koje se naziva i & quotk-d drvo & quot). Korištenje KD stabla je proces u dva koraka.

Prvo učitajte KD stablo sa skupom tačaka unutar kojih želite da tražite najbližu tačku, obično tačke rešetke ili lokacije skupa nepomreženih podataka. Koliko će ovo trajati ovisi o broju točaka, kao i njihovoj dimenzionalnosti, ali je slično vremenu potrebno za sortiranje N brojeva, naime O (N log (N)). Za primjer skupa podataka s više od 600.000 točaka u mreži, ovo traje manje od 3 sekunde na našoj platformi za testiranje prijenosnog računala, ali je primjetno duže od vremena za postavljanje za pretraživanje minimalne udaljenosti tunela.

Drugi korak pruža tačku upita i vraća najbližu tačku ili tačke u KD-stablu tački upita, gde se može promeniti način na koji je & quotclosest & quot definisan. Ovdje koristimo 3D točke na sfernoj Zemlji s radijusom jedinice. Kombinacija postavljanja i upita u početku su implementirani u kdtree_fast funkciju.

Iako to ne možete reći ako zajedno pokrenete postavljanje i upite, kdtree_fast upit je znatno brži nego u tunnel_fast search. Tako je kdtree_fast pristup je mnogo ljepši kada imamo jedan set, S, tačaka za pretraživanje i puno tačaka upita za koje želimo najbližu tačku (ili tačke) S.

Na primjer, možda bismo htjeli varijabilne vrijednosti na podmreži 100 do 100 (lat, lon) domene, a kao što ćemo vidjeti, stablo KD pruža mnogo brže rješenje od bilo kojeg tunnel_fast ili naive_fast metode. Ako se lokacije ne promijene s podacima iz više datoteka, vremena ili slojeva, vrijeme postavljanja za KD-stablo može se ponovno koristiti za mnoge upite točaka, pružajući značajne prednosti u pogledu efikasnosti. Za popularne skupove prostornih podataka na strani poslužitelja, isto KD stablo moglo bi se ponovno koristiti za više skupova podataka koji koriste iste koordinate.

Struktura podataka stabla KD-a također se može fleksibilnije koristiti za pružanje brzih upita za M najbližih točaka navedenoj točki upita, što je korisno za interpolaciju vrijednosti umjesto samo za korištenje vrijednosti varijable na jednoj najbližoj točki.

Struktura podataka stabla KD-a je poput noža švicarske vojske za podatke o koordinatama, na neki način analogan regularnim izrazima za nizove. Pokazali smo upotrebu KD-stabala za 2D geografske podatke i geografske koordinate tačaka na sferi sa metričkom udaljenošću tunela. KD-stabla se također mogu koristiti s vertikalnim koordinatama ili vremenom, ako navedete razuman način definiranja & quotclose & quot između tačaka u prostor-vremenu.

Implementacije KD-stabala slobodno su dostupne za C, Java, Fortran, C ++ i druge jezike osim Pythona. Implementacija Java KD-stabla koristi se u ncWMS-u, usluzi web mapa uključenoj u TDS servere, ali razvijenoj na Univerzitetu u Readingu. C/C ++ implementacija KD-drveća koristi se u Fimexu, biblioteci Norveškog meteorološkog zavoda koja podržava interpolaciju i podmnožavanje geoprostornih podataka izgrađenih oko zajedničkog modela podataka Unidata. Modul koji smo koristili u primjeru prijenosnog računala iPython, scipy.spatial.cKDTree, je C implementacija koja se može pozvati iz Pythona, znatno brža od čiste Python implementacije u scipy.spatial.KDTree.

Posljednji odjeljak bilježnice ponovno implementira naše četiri funkcije kao četiri objektno orijentirane Python klase, s kodom za postavljanje u konstruktoru klase i jednom metodom upita. Ovo olakšava vremensko određivanje dijelova inicijalizacije i upita svakog pristupa zasebno, što dovodi do jednostavnih formula za vrijeme potrebno za N točaka i predviđanje kada će dodatno vrijeme postavljanja za kdtree_fast isplati se.

I pobjednik je .

Kovertu, molim. I pobjednik je . YMMV!

Razlozi zbog kojih vaša kilometraža može varirati uključuju:

  • broj tačaka u skupu pretraživanja
  • dimenzionalnost skupa za pretraživanje
  • složenost metrike udaljenosti
  • broj tačaka upita
  • potreban broj najbližih susjeda, npr. za interpolaciju
  • I/O faktori, uključujući keširanje, kompresiju i efekte udaljenog pristupa
  • uzimajući u obzir ne-sferni oblik Zemlje

Saželi smo naše rezultate mjerenja vremena za četiri pristupa uzorku problema u primjeru skupa podataka na kraju iPython bilježnice. Možda bismo mogli pogledati neke od gore navedenih faktora u budućim blogovima.

U slučaju da niste htjeli otvoriti iPython prijenosno računalo da biste vidjeli rezultate, evo nekoliko puta na brzoj platformi za prijenosno računalo:

Metoda Postavljanje (ms) Upit (ms) Podešavanje + 10000
upiti (sek)
Naivno_ sporo3.76 7790 77900
Naivno_brzo3.82.46 24.6
Tunnel_fast 27.4 5.14 51.4
Kdtree_fast 2520 0.0738 3.3

Određivanje kada se isplati koristiti KD-drvo ovaj primjer rezultirao:

  • kd_tree_fast nadmašuje naive_fast iznad 1050 upita
  • kd_tree_fast nadmašuje tunnel_fast iznad 490 upita

Prednost korištenja KD-stabala mnogo je veća za više postavljenih točaka pretraživanja, jer je složenost upita KD-stabla O (log (N)), ali drugi algoritmi su O (N), ista je razlika između korištenja binarnog pretraživanja naspram linearnog pretraživanja.

Ako vas zanima više o ovoj temi, dobar kratak rad o raznim načinima regriranja podataka korištenjem KD-stabala i drugih metoda je Brzo regridiranje velikih, složenih geoprostornih skupova podataka od Jona Blowera i A. Clegga.

Vrlo lijep post! Samo par malih komentara:


  1. Papir Blower and Clegg objašnjava zašto tačka "najbližeg susjeda" nije uvijek ista stvar kao "ćelija mreže koja sadrži točku interesa". Ovo može biti važna razlika kada pokušavate precizno riješiti iskrivljene krivolinijske mreže.
  2. Iako smo eksperimentirali s kd-stablom u ncWMS-u, otkrili smo da je jednostavan pristup "tražilice" bio brži, posebno ako ste u mogućnosti predmemorirati tablicu za pretraživanje i izbjegavate je svaki put regenerirati. Stoga ncWMS prema zadanim postavkama koristi LUT.

Grubo rečeno, ncWMS koristi LUT za pronalaženje ćelije mreže koja je blizu potrebne tačke geografske dužine. Zatim lovi oko ove točke dok ne pronađe ćeliju mreže koja zapravo sadrži ovu točku (koristeći Java -inu metodu polygon.contains (point)). Metoda contains () može biti skupa, pa je općenito brže pronaći najbližeg susjeda ako to zaista želite.

Usput, jako mi se sviđa korištenje prijenosnog računara iPython!

Posted by Jon Blower 16. septembra 2013. u 03:28 MDT #

Hvala na komentarima, Jon.

Od čitanja o vašem pristupu LUT -u, želio bih ga implementirati u isti Python okvir koji sam koristio, i možda napisati još jedan unos na blogu o rezultatima za ovaj primjer.

Posted by 67.190.4.13 16. septembra 2013. u 06:21 MDT #

Odlično, bilo bi jako zanimljivo imati Python implementaciju. Inače, ncWMS je ranije koristio prilično grub algoritam za generisanje LUT-a, što je bilo prilično sporo. Sada koristi mnogo bržu metodu koja uključuje "bojanje" ćelija mreže na LUT koristeći Java 2D grafički API, efikasno tretirajući LUT kao sliku. (U terminologiji Blower i Clegg papira, LUT se generira pomoću "source-push" algoritma.) Kôd možete vidjeti na http://www.resc.rdg.ac.uk/trac/ncWMS/browser /trunk/src/java/uk/ac/rdg/resc/edal/cdm/LookUpTable.java.</p>

Ne znam da li Python ima ekvivalentne API -je - ako ne, kod bi mogao biti prilično težak za prijenos!

Posted by Jon Blower 17. septembra 2013. u 01:20 MDT #

Još se sjećam svog prvog projekta koristeći CI i google map

i Google bibliotečke karte donose veliku pomoć i jednostavnu konfiguraciju

Posted by Qwords web hosting 30. novembra 2015. u 02:43 MST #

Slažem se da bih to htio implementirati u isti Python okvir koji sam koristio i možda napisati još jedan unos na blogu o rezultatima za ovaj primjer.

Posted by jasa bikin web 28. maja 2017. u 04:08 MDT #

Možete koristiti mrežni kalkulator. To je API u Netcdf-Extractor verziji 2.0. GNC je besplatan i možete ga koristiti na:
https://www.agrimetsoft.com/Netcdf-Extractor.aspx</p></p>

Posted by Hasan Sheidaee 28. aprila 2018. u 17:29 MDT #

Možete koristiti mrežni kalkulator. To je API u Netcdf-Extractor verziji 2.0. GNC je besplatan i možete ga koristiti na:
https://agrimetsoft.com/Netcdf-Extractor.aspx</p></p>

Posted by Hasan Sheidaee dana 11. jula 2018. u 09:34 MDT #

Posted by Hasan shedaee 17. jula 2018. u 10:09 MDT #

Zdravo! Hvala na pomoći. Ne mogu pristupiti Bilježnici. Uklonjen je. Postoji li način za pristup kodu. Hvala :)

Posted by Patricio Fernandez dana 19. oktobra 2018. u 05:44 MDT #

"Otvorena NC datoteka" može otvoriti i čitati podatke pomoću liste koordinata stanica. Nc korisnik može ručno ili datotekom unijeti listu stanica. "Otvorena NC datoteka" može čitati popis stanica (sastoji se od koordinata) u tekstualnoj datoteci ili excel datoteci ili csv datoteci. Korisnik nc može odabrati sve datoteke nc i spojiti ih u "Otvori datoteku NC".

Posted by Sohrab Kolsoumi dana 19. oktobra 2018. u 08:01 MDT #

Još uvijek me zbunjuje ovaj algoritam programiranja. Ali hvala na dijeljenju

Posted by Jasa Web stranica Semarang 14. decembra 2018. u 19:49 MST #

Zdravo! Hvala na pomoći. Ne mogu pristupiti Bilježnici. Uklonjen je. Postoji li način za pristup kodu. Hvala :)

Posted by Web stranica Harga Jasa Pembuatan 16. marta 2019 u 04:29 MDT #


Benchmark funkcije iscrtavanja¶

gcpy.benchmark sadrži nekoliko funkcija za iscrtavanje GEOS-Chem izlaza u formatima koje je zatražio Upravni odbor GEOS-Chem. Primarna upotreba ovih funkcija je stvaranje grafikona većine izlaznih varijabli GEOS-Chem podijeljenih u određene kategorije, npr. kategorije vrsta kao što su aerosoli ili brom za dijagnostiku SpeciesConc. U svakoj kategoriji ove funkcije stvaraju PDF-ove na jednom nivou za površinu i 500 hPa i srednje zonske PDF-ove za cijelu atmosferu i samo za stratosferu (definirano 1-100 hPa). Za make_benchmark_emis_plots () proizvode se samo parcele na jednom nivou na površini. Sve ove funkcije crtanja uključuju oznake unutar generiranih PDF -ova koje upućuju na stranice koje sadrže svaku iscrtanu količinu. Stoga ove funkcije služe kao alati za brzo kreiranje sveobuhvatnih grafičkih prikaza upoređujući dvije serije GEOS-Chem. Ove funkcije se koriste za kreiranje javno dostupnih grafikona za jednomjesečne i jednogodišnje mjerila novih verzija GEOS-Chem.

Mnoge od ovih funkcija koriste unaprijed definirane (putem YAML datoteka uključene u GCPy) liste varijabli. Ako jedan skup podataka sadrži varijablu, a drugi skup podataka ne, podaci za tu varijablu u potonjem skupu podataka smatrat će se NaN i bit će iscrtani kao takvi.

Zajednička struktura¶

Svaka od funkcija gcpy.benchmark.make_benchmark _*_ plots () zahtijeva 4 argumenta za specifikaciju skupova podataka ref i dev.

Argumenti: ¶

Naziv putanje za skup podataka “Ref” (poznat i kao “Referenca”).

Niz za opis ref (npr. Broj verzije)

Naziv putanje za skup podataka „Dev“ (poznat i kao „razvoj“).

Ovaj skup podataka će se usporediti sa „Referentnim“ skupom podataka.

Niz za opis dev -a (npr. Broj verzije)

Imajte na umu da su ref i dev argumenti u make_benchmark _*_ plots () putanje do NetCDF datoteka, a ne xarray skupovi podataka kao u compare_single_level () i compare_zonal_mean (). Funkcije make_benchmark _*_ plots () interno otvaraju ove datoteke kao xarray skupove podataka i prosljeđuju te skupove podataka za compare_single_level () i compare_zonal_mean ().

Referentne funkcije iscrtavanja dijele nekoliko argumenata ključnih riječi. Argumenti ključnih riječi koji nemaju istu namjenu kroz funkcije benchmarka iscrtavanja imaju NAPOMENU: u opisu.

Argumenti zajedničke ključne riječi: ¶

Niz koji označava odredišnu fasciklu u koju će se zapisati PDF datoteka koja sadrži crteže.

Niz koji označava poddirektorijum dst-a u koji će se upisivati ​​PDF datoteke koje sadrže crteže. U praksi, subdst je potreban samo za jednogodišnje referentne rezultate i označava niz datuma (kao što je “januar 2016”) koji odgovara mjesecu koji se iscrtava. NAPOMENA: Nije dostupno u wetdep_plots

Postavite ovu zastavicu na True da biste prepisali prethodno kreirane datoteke u odredišnoj mapi (specificirano dst argumentom).

Postavite ovu zastavicu na True za ispis dodatnih informacija.

Postavite ovu oznaku na True da biste omogućili iscrtavanje podataka (gornja dva panela svakog grafikona, ne razlikuju se) na ljestvici boja dnevnika.

sigdiff_files: lista str ¶

Imena datoteka koje će sadržavati popis količina koje imaju značajne razlike između skupova podataka. Koriste se tri datoteke: jedna za površinu, jedna za 500 hPa i jedna za zonsku sredinu. Ove liste su potrebne kako bi se ispunili referentni obrasci odobrenja. NAPOMENA: Nije dostupno u wetdep_plots

Direktorij koji sadrži datoteku species_database.yml. Ova datoteka se koristi za pretvaranje jedinica u ug/m3. Direktoriji za pokretanje GEOS-Chem uključuju kopiju ove datoteke koja može biti ažurnija od verzije uključene u GCPy.

Zadana vrijednost: Putanja spremišta koda GCPy

weightsdir: str ¶ Direktorij u koji se smještaju (i eventualno ponovno koriste) xESMF regridder netCDF datoteke. ¶

Definira broj istovremenih radnika za paralelno crtanje. Postavite na 1 da biste onemogućili paralelno crtanje. Vrijednost -1 omogućava aplikaciji da odluči. NAPOMENA: U make_benchmark_conc_plots () dolazi do paralelizacije na nivou kategorije vrsta. U svim ostalim funkcijama dolazi do paralelizacije unutar poziva za compare_single_level () i compare_zonal_mean ().

Zadana vrijednost: -1 u make_benchmark_conc_plots, 1 u svim ostalim

Make_benchmark_aod_plots¶

Argumenti ključnih riječi specifični za funkciju: ¶

Popis AOD varijabli za iscrtavanje. Ako nisu proslijeđene, tada će se iscrtati sve AOD varijable zajedničke i za Dev i za Ref. Koristite argument varlist za ograničavanje broja varijabli iscrtanih u pdf datoteci prilikom otklanjanja grešaka.

Ova funkcija stvara stupce optičke dubine pomoću dijagnostičkog izlaza Aerosols.

Make_benchmark_conc_plots¶

Argumenti ključnih riječi specifični za funkciju: ¶

Naziv zbirke koja će se koristiti za iscrtavanje.

Zadana vrijednost: “SpeciesConc”

Niz koji označava vrstu referentnog izlaza za iscrtavanje, bilo FullChemBenchmark ili TransportTracersBenchmark.

Zadana vrijednost: “FullChemBenchmark”

Postavite ovu oznaku na Netačno da biste slali crteže u jednu datoteku, a ne u zasebnu datoteku po kategoriji.

limit_cats: lista str ¶

Spisak referentnih kategorija u benchmark_categories.yml za izradu grafikona. Ako je prazno, grafikoni se prave za sve kategorije.

Lista tipova parcela za kreiranje.

Zadana vrijednost: ['sfc', '500hpa', 'zonalmean']

Postavite ovu oznaku na Tačno kako biste omogućili normalizaciju podataka po površini (tj. Kg s-1-> gt kg s-1 m-2).

Spisak referentnih kategorija za pretvaranje u ug/m3

Zadana vrijednost: [“Aerosoli”, “Sekundarni_organski_aerosoli”]

oblasti: dict of xarray DataArray: ¶

Površine mrežne kutije u m2 na mrežama Ref i Dev.

Naziv putanje za ref meteorologiju

Naziv putanje za razvojnu meteorologiju

Naziv putanje za drugi skup podataka „Ref” (poznat i kao „Referenca”) za crtanje diff-of-diffs. Ovaj skup podataka trebao bi imati isti tip modela i mrežu kao ref.

Naziv putanje za drugi skup podataka „Ref” (poznat i kao „Referenca”) za crtanje diff-of-diffs. Ovaj skup podataka trebao bi imati isti tip modela i mrežu kao ref.

Ova funkcija prema zadanim postavkama stvara dijagrame koncentracije vrsta koristeći dijagnostički izlaz SpeciesConc. Ova funkcija je jedina referentna funkcija iscrtavanja koja podržava ucrtavanje diff-of-diffs, u kojoj se prosljeđuju 4 skupa podataka i iscrtavaju se razlike između dvije grupe Ref podataka u odnosu na dvije grupe Dev skupova podataka (obično se koriste za poređenje promjena u GCHP vs promjene u GEOS-Chem Classic u svim verzijama modela). Ovo je ujedno i jedina referentna funkcija iscrtavanja koja šalje crteže u odvojene mape na osnovu kategorije (označeno zastavicom plot_by_spc_cat). Potpuna lista kategorija vrsta označena je u benchmark_categories.yml (uključena u GCPy) kako slijedi:

Make_benchmark_emis_plots¶

Argumenti ključnih riječi specifični za funkciju: ¶

prema referentnim kategorijama vrsta (npr. oksidanti, aerosoli, dušik itd.) Ove kategorije su navedene u YAML datoteci benchmark_species.yml.

Postavite ovu zastavicu na True da biste odvojili grafikone u PDF datoteke prema kategorijama emisije HEMCO (npr. Anthro, Aircraft, Bioburn, itd.)

Postavite ovu zastavicu na True da biste obrnuli redoslijed vertikalnih nivoa u skupu podataka „Ref“ (u slučaju da „Ref“ počinje s vrha atmosfere umjesto s površine).

Postavite ovu zastavicu na True da biste obrnuli redoslijed vertikalnih nivoa u skupu podataka „Dev“ (u slučaju da „Dev“ počinje s vrha atmosfere umjesto s površine).

Ova funkcija generira grafikone ukupnih emisija koristeći izlaz iz HEMCO_diagnostics (za GEOS-Chem Classic) i/ili GCHP.Emisije izlaznih datoteka.

Make_benchmark_jvalue_plots¶

Argumenti ključnih riječi specifični za funkciju: ¶

Popis varijabli J-vrijednosti za iscrtavanje. Ako nisu proslijeđene, tada će se iscrtati sve varijable J-vrijednosti zajedničke i za dev i za ref. Varlist argument može biti koristan način ograničavanja broja varijabli iscrtanih u pdf datoteci prilikom otklanjanja grešaka.

Postavite ovu zastavicu za iscrtavanje lokalnih podnevnih J-vrijednosti. Ovo će podijeliti sve varijable J-vrijednosti prema JNoonFrac brojaču, što je dio vremena u kojem je bilo lokalno podne na svakoj lokaciji.

Lista tipova parcela za kreiranje.

Zadana vrijednost: ['sfc', '500hpa', 'zonalmean']

Postavite ovu zastavicu na True da biste obrnuli redoslijed vertikalnih nivoa u skupu podataka „Ref“ (u slučaju da „Ref“ počinje s vrha atmosfere umjesto s površine).

Postavite ovu zastavicu na True da biste obrnuli redoslijed vertikalnih nivoa u skupu podataka „Dev“ (u slučaju da „Dev“ počinje s vrha atmosfere umjesto s površine).

Ova funkcija generira grafikone J-vrijednosti pomoću izlaznih datoteka JValues ​​GEOS-Chem.

Make_benchmark_wetdep_plots¶

Function-specific keyword args:¶

A string with date information to be included in both the plot pdf filename and as a destination folder subdirectory for writing plots

A string denoting the type of benchmark output to plot, either FullChemBenchmark or TransportTracersBenchmark.


Interpolation Routines¶

Interpolating to a Horizontal Level¶

The wrf.interplevel() function is used to interpolate a 3D field to a specific horizontal level, usually pressure or height.

Vertical Cross Sections¶

The wrf.vertcross() function is used to create vertical cross sections. To define a cross section, a start point and an end point needs to be specified. Alternatively, a pivot point and an angle may be used. The start point, end point, and pivot point are specified using a wrf.CoordPair object, and coordinates can either be in grid (x,y) coordinates or (latitude,longitude) coordinates. When using (latitude,longitude) coordinates, a NetCDF file object or a wrf.WrfProj object must be provided.

The vertical levels can also be specified using the nivoima parametar. If not specified, then approximately 100 levels will be chosen in 1% increments.

Example Using Start Point and End Point¶

Example Using Pivot Point and Angle¶

Example Using Lat/Lon Coordinates¶

Example Using Specified Vertical Levels¶

Interpolating Two-Dimensional Fields to a Line¶

Two-dimensional fields can be interpolated along a line, in a manner similar to the vertical cross section (see Vertical Cross Sections ), using the wrf.interpline() function. To define the line to interpolate along, a start point and an end point needs to be specified. Alternatively, a pivot point and an angle may be used. The start point, end point, and pivot point are specified using a wrf.CoordPair object, and coordinates can either be in grid (x,y) coordinates or (latitude,longitude) coordinates. When using (latitude,longitude) coordinates, a NetCDF file object or a wrf.WrfProj object must also be provided.

Example Using Start Point and End Point¶

Example Using Pivot Point and Angle¶

Example Using Lat/Lon Coordinates¶

Interpolating a 3D Field to a Surface Type¶

The wrf.vinterp() is used to interpolate a field to a type of surface. The available surfaces are pressure, geopotential height, theta, and theta-e. The surface levels to interpolate also need to be specified.


Preparation¶

Basic knowledge of Python is assumed. For Python beginners, I recommend Python Data Science Handbook by Jake VanderPlas, which is free available online. Skim through Chapter 1, 2 and 4, then you will be good! (Chapter 3 and 5 are important for general data science but not particularly necessary for working with gridded model data.)

It is crucial to pick up the correct tutorial when learning Python, because Python has a wide range of applications other than just science. For scientific research, you should only read data science tutorials. Other famous books such as Fluent Python and The Hitchhiker’s Guide to Python are great for general software development, but not quite useful for scientific research.

Once you manage to use Python in Jupyter Notebook, follow this GCPy page to set up Python environment for Geosciences. Now you should have everything necessary for working with GEOS-Chem data and most of earth science data in general.


5. Coordinate Systems

A data variable’s dimensions are used to locate data values in time and space or as a function of other independent variables. This is accomplished by associating these dimensions with the relevant set of latitude, longitude, vertical, time and any non-spatiotemporal coordinates. This section presents two methods for making that association: the use of coordinate variables, and the use of auxiliary coordinate variables.

Any of a variable’s dimensions that is an independently varying latitude, longitude, vertical, or time dimension (see Section 1.2, "Terminology") and that has a size greater than one must have a corresponding coordinate variable, i.e., a one-dimensional variable with the same name as the dimension (see examples in Chapter 4, Coordinate Types). This is the only method of associating dimensions with coordinates that is supported by [COARDS].

Any longitude, latitude, vertical or time coordinate which depends on more than one spatiotemporal dimension must be identified by the coordinates attribute of the data variable. Vrijednost coordinates atribut je a blank separated list of the names of auxiliary coordinate variables. There is no restriction on the order in which the auxiliary coordinate variables appear in the coordinates attribute string. The dimensions of an auxiliary coordinate variable must be a subset of the dimensions of the variable with which the coordinate is associated, with two exceptions. First, string-valued coordinates (Section 6.1, "Labels") will have a dimension for maximum string length if the coordinate variable has a type of char rather than a type of string . Second, in the ragged array representations of data (Chapter 9, Discrete Sampling Geometries), special methods are needed to connect the data and coordinates

We recommend that the name of a multidimensional coordinate variable should not match the name of any of its dimensions because that precludes supplying a coordinate variable for the dimension. This practice also avoids potential bugs in applications that determine coordinate variables by only checking for a name match between a dimension and a variable and not checking that the variable is one dimensional.

If the longitude, latitude, vertical or time coordinate is multi-valued, varies in only one dimension, and varies independently of other spatiotemporal coordinates, it is not permitted to store it as an auxiliary coordinate variable. This is both to enhance conformance to COARDS and to facilitate the use of generic applications that recognize the NUG convention for coordinate variables. An application that is trying to find the latitude coordinate of a variable should always look first to see if any of the variable’s dimensions correspond to a latitude coordinate variable. If the latitude coordinate is not found this way, then the auxiliary coordinate variables listed by the coordinates attribute should be checked. Note that it is permissible, but optional, to list coordinate variables as well as auxiliary coordinate variables in the coordinates atribut. If the longitude, latitude, vertical or time coordinate is single-valued, it may be stored either as a coordinate variable with a dimension of size one, or as a scalar coordinate variable (Section 5.7, "Scalar Coordinate Variables").

Ako je an osa attribute is attached to an auxiliary coordinate variable, it can be used by applications in the same way the osa attribute attached to a coordinate variable is used. However, it is not permissible for a data variable to have both a coordinate variable and an auxiliary coordinate variable, or more than one of either type of variable, having an osa attribute with any given value e.g. there must be no more than one osa attribute for X for any data variable. Note that if the osa attribute is not specified for an auxiliary coordinate variable, it may still be possible to determine if it is a spatiotemporal dimension from its own units or standard_name, or from the units and standard_name of the coordinate variable corresponding to its dimensions (see Chapter 4, Coordinate Types). For instance, auxiliary coordinate variables which lie on the horizontal surface can be identified as such by their dimensions being horizontal. Horizontal dimensions are those whose coordinate variables have an osa attribute of X ili Y , ili a jedinice attribute indicating latitude and longitude.

To geo-reference data horizontally with respect to the Earth, a grid mapping variable may be provided by the data variable, using the grid_mapping atribut. If the coordinate variables for a horizontal grid are not longitude and latitude, then a grid_mapping variable provides the information required to derive longitude and latitude values for each grid location. Ako ne grid mapping variable is referenced by a data variable, then longitude and latitude coordinate values shall be supplied in addition to the required coordinates. For example, the Cartesian coordinates of a map projection may be supplied as coordinate variables and, in addition, two-dimensional latitude and longitude variables may be supplied via the coordinates attribute on a data variable. The use of the osa attribute with values X i Y is recommended for the coordinate variables (see Chapter 4, Coordinate Types).

It is sometimes not practical to specify the latitude-longitude location of data which is representative of geographic regions with complex boundaries. For this purpose, provision is made in Section 6.1.1, "Geographic Regions" for indicating the region by a standardized name.

5.1. Independent Latitude, Longitude, Vertical, and Time Axes

When each of a variable’s spatiotemporal dimensions is a latitude, longitude, vertical, or time dimension, then each axis is identified by a coordinate variable.

xwind(n,k,j,i) is associated with the coordinate values lon(i) , lat(j) , pres(k) , i time(n) .

5.2. Two-Dimensional Latitude, Longitude, Coordinate Variables

The latitude and longitude coordinates of a horizontal grid that was not defined as a Cartesian product of latitude and longitude axes, can sometimes be represented using two-dimensional coordinate variables. These variables are identified as coordinates by use of the coordinates atribut.

T(k,j,i) is associated with the coordinate values lon(j,i) , lat(j,i) , i lev(k) . The vertical coordinate is represented by the coordinate variable lev(lev) and the latitude and longitude coordinates are represented by the auxiliary coordinate variables lat(yc,xc) i lon(yc,xc) which are identified by the coordinates atribut.

Note that coordinate variables are also defined for the xc i yc dimenzije. This faciliates processing of this data by generic applications that don’t recognize the multidimensional latitude and longitude coordinates.

5.3. Reduced Horizontal Grid

A "reduced" longitude-latitude grid is one in which the points are arranged along constant latitude lines with the number of points on a latitude line decreasing toward the poles. Storing this type of gridded data in two-dimensional arrays wastes space, and results in the presence of missing values in the 2D coordinate variables. We recommend that this type of gridded data be stored using the compression scheme described in Section 8.2, "Compression by Gathering". Compression by gathering preserves structure by storing a set of indices that allows an application to easily scatter the compressed data back to two-dimensional arrays. The compressed latitude and longitude auxiliary coordinate variables are identified by the coordinates atribut.

PS(n) is associated with the coordinate values lon(n) , lat(n) . Compressed grid index (n) would be assigned to 2D index (j,i) (C index conventions) where

Notice that even if an application does not recognize the komprimirati attribute, the grids stored in this format can still be handled, by an application that recognizes the coordinates atribut.

5.4. Timeseries of Station Data

This section has been superseded by the treatment of time series as a type of discrete sampling geometry in Chapter 9.

5.5. Trajectories

This section has been superseded by the treatment of time series as a type of discrete sampling geometry in Chapter 9.

5.6. Horizontal Coordinate Reference Systems, Grid Mappings, and Projections

A grid mapping variable may be referenced by a data variable in order to explicitly declare the coordinate reference system (CRS) used for the horizontal spatial coordinate values. For example, if the horizontal spatial coordinates are latitude and longitude, the grid mapping variable can be used to declare the figure of the earth (WGS84 ellipsoid, sphere, etc.) they are based on. If the horizontal spatial coordinates are easting and northing in a map projection, the grid mapping variable declares the map projection CRS used and provides the information needed to calculate latitude and longitude from easting and northing.

When the horizontal spatial coordinate variables are not longitude and latitude, it is required that further information is provided to geo-locate the horizontal position. A grid mapping variable provides this information.

Ako ne grid mapping variable is provided and the coordinate variables for a horizontal grid are not longitude and latitude, then it is required that the latitude and longitude coordinates are supplied via the coordinates atribut. Such coordinates may be provided in addition to the provision of a grid mapping variable, but that is not required.

A grid mapping variable provides the description of the mapping via a collection of attached attributes. It is of arbitrary type since it contains no data. Its purpose is to act as a container for the attributes that define the mapping. The one attribute that all grid mapping variables must have is grid_mapping_name, which takes a string value that contains the mapping’s name. The other attributes that define a specific mapping depend on the value of grid_mapping_name. The valid values of grid_mapping_name along with the attributes that provide specific map parameter values are described in Appendix F, Grid Mappings

The grid mapping variables are associated with the data and coordinate variables by the grid_mapping atribut. This attribute is attached to data variables so that variables with different mappings may be present in a single file. The attribute takes a string value with two possible formats. In the first format, it is a single word, which names a grid mapping variable. In the second format, it is a blank-separated list of words "<gridMappingVariable>: <coordinatesVariable> [<coordinatesVariable> …​] [<gridMappingVariable>: <coordinatesVariable>…​]" , which identifies one or more grid mapping variables, and with each grid mapping associates one or more coordinatesVariables, i.e. coordinate variables or auxiliary coordinate variables.

Where an extended "<gridMappingVariable>: <coordinatesVariable> [<coordinatesVariable>]" entity is defined, then the order of the <coordinatesVariable> references within the definition provides an explicit order for these coordinate value variables, which is used if they are to be combined into individual coordinate tuples.

This order is only significant if crs_wkt is also specified within the referenced grid mapping variable. Explicit 'axis order' is important when the grid_mapping_variable contains an attribute crs_wkt as it is mandated by the OGC CRS-WKT standard that coordinate tuples with correct axis order are provided as part of the reference to a Coordinate Reference System.

Using the simple form, where the grid_mapping attribute is only the name of a grid mapping variable, 2D latitude and longitude coordinates for a projected coordinate reference system use the same geographic coordinate reference system (ellipsoid and prime meridian) as the projection is projected from.

The grid_mapping variable may identify datums (such as the reference ellipsoid, the geoid or the prime meridian) for horizontal or vertical coordinates. Therefore a grid mapping variable may be needed when the coordinate variables for a horizontal grid are longitude and latitude. The grid_mapping_name of latitude_longitude should be used in this case.

The expanded form of the grid_mapping attribute is required if one wants to store coordinate information for more than one coordinate reference system. In this case each coordinate or auxiliary coordinate is defined explicitly with respect to no more than one grid_mapping varijabilna. This syntax may be used to explicitly link coordinates and grid mapping variables where only one coordinate reference system is used. In this case, all coordinates and auxiliary coordinates of the data variable not named in the grid_mapping attribute are unrelated to any grid mapping variable. All coordinate names listed in the grid_mapping attribute must be coordinate variables or auxiliary coordinates of the data variable.

In order to make use of a grid mapping to directly calculate latitude and longitude values it is necessary to associate the coordinate variables with the independent variables of the mapping. This is done by assigning a standard_name to the coordinate variable. The appropriate values of the standard_name depend on the grid mapping and are given in Appendix F, Grid Mappings.

A CF compliant application can determine that rlon and rlat are longitude and latitude values in the rotated grid by recognizing the standard names grid_longitude i grid_latitude . Note that the units of the rotated longitude and latitude axes are given as degrees . This should prevent a COARDS compliant application from mistaking the variables rlon i rlat to be actual longitude and latitude coordinates. The entries for these names in the standard name table indicate the appropriate sign conventions for the units of degrees .

An application can determine that x and y are the projection coordinates by recognizing the standard names projection_x_coordinate and projection_y_coordinate . The grid mapping variable Lambert_Conformal contains the mapping parameters as attributes, and is associated with the Temperature variable via its grid_mapping attribute.

5.6.1. Use of the CRS Well-known Text Format

An optional grid mapping attribute called crs_wkt may be used to specify multiple coordinate system properties in so-called well-known text format (usually abbreviated to CRS WKT or OGC WKT). The CRS WKT format is widely recognised and used within the geoscience software community. As such it represents a versatile mechanism for encoding information about a variety of coordinate reference system parameters in a highly compact notational form. The translation of CF coordinate variables to/from OGC Well-Known Text (WKT) format is shown in Examples 5.11 and 5.12 below and described in detail in https://github.com/cf-convention/cf-conventions/wiki/Mapping-from-CF-Grid-Mapping-Attributes-to-CRS-WKT-Elements.

The crs_wkt attribute should comprise a text string that conforms to the WKT syntax as specified in reference [OGC_WKT-CRS]. If desired the text string may contain embedded newline characters to aid human readability. However, any such characters are purely cosmetic and do not alter the meaning of the attribute value. It is envisaged that the value of the crs_wkt attribute typically will be a single line of text, one intended primarily for machine processing. Other than the requirement to be a valid WKT string, the CF convention does not prescribe the content of the crs_wkt attribute since it will necessarily be context-dependent.

Gdje a crs_wkt attribute is added to a grid_mapping, the extended syntax for the grid_mapping attribute enables the list of variables containing coordinate values being referenced to be explicitly stated and the CRS WKT Axis order to be explicitly defined. The explicit definition of WKT CRS Axis order is expected by the OGC standards for referencing by coordinates. Software implementing these standards are likely to expect to receive coordinate value tuples, with the correct coordinate value order, along with the coordinate reference system definition that those coordinate values are defined with respect to.

The order of the <coordinatesVariable> references within the grid_mapping attribute definition defines the order of elements within a derived coordinate value tuple. This enables an application reading the data from a file to construct an array of coordinate value tuples, where each tuple is ordered to match the specification of the coordinate reference system being used whilst the array of tuples is structured according to the netCDF definition. It is the responsibility of the data producer to ensure that the <coordinatesVariable> list is consistent with the CRS WKT definition of CS AXIS, with the correct number of entries in the correct order (note: this is not a conformance requirement as CF conformance is not dependent on CRS WKT parsing).

For example, a file has two coordinate variables, lon and lat, and a grid mapping variable crs with an associated crs_wkt attribute the WKT definition defines the AXIS order as ["latitude", "longitude"]. The grid_mapping attribute is thus given a value crs:lat lon to define that where coordinate pairs are required, these shall be ordered (lat, lon), to be consistent with the provided crs_wkt string (and not order inverted). A 2-D array of (lat, lon) tuples can then be explicitly derived from the combination of the lat and lon variables.

The crs_wkt attribute is intended to act as a dodatak to other single-property CF grid mapping attributes (as described in Appendix F) it is not intended to replace those attributes. If data producers omit the single-property grid mapping attributes in favour of the compound crs_wkt attribute, software which cannot interpret crs_wkt will be unable to use the grid_mapping information. Therefore the CRS should be described as thoroughly as possible with the single-property attributes as well as by crs_wkt .

There will be occasions when a given CRS property value is duplicated in both a single-property grid mapping attribute and the crs_wkt atribut. In such cases the onus is on data producers to ensure that the property values are consistent. However, in those situations where two values of a given property are different, then the value specified by the single-property attribute shall take precedence. For example, if the semi-major axis length of the ellipsoid is defined by the grid mapping attribute semi_major_axis and also by the crs_wkt attribute (via the WKT SPHEROID[…​] element) then the former, being the more specific attribute, takes precedence. Naturally if the two values are equal then no ambiguity arises.

Likewise, in those cases where the value of a CRS WKT element should be used consistently across the CF-netCDF community (names of projections and projection parameters, for example) then, the values shown in https://github.com/cf-convention/cf-conventions/wiki/Mapping-from-CF-Grid-Mapping-Attributes-to-CRS-WKT-Elements should be preferred these are derived from the OGP/EPSG registry of geodetic parameters, which is considered to represent the definitive authority as regards CRS property names and values.

Examples 5.11 illustrates how the coordinate system properties specified via the crs grid mapping variable in Example 5.9 might be expressed using a crs_wkt atribut. Example 5.12 also illustrates the addition of the crs_wkt attribute, but here the attribute is added to the crs variable of a simplified variant of Example 5.10. For brevity in Example 5.11, only the grid mapping variable and its grid_mapping_name and crs_wkt attributes are included all other elements are as per the Example 5.9. Names of projection PARAMETERs follow the spellings used in the EPSG geodetic parameter registry.

Example 5.12 illustrates how certain WKT elements - all of which are optional - can be used to specify CRS properties not covered by existing CF grid mapping attributes, including:

use of the VERT_DATUM element to specify vertical datum information

use of additional PARAMETER elements (albeit not essential ones in this example) to define the location of the false origin of the projection

use of AUTHORITY elements to specify object identifier codes assigned by an external authority, OGP/EPSG in this instance

Note: To enhance readability of these examples, the WKT value has been split across multiple lines and embedded quotation marks (") left unescaped - in real netCDF files such characters would need to be escaped. In CDL, within the CRS WKT definition string, newlines would need to be encoded within the string as and double quotes as " . Also for readability, we have dropped the quotation marks which would delimit the entire crs_wkt string. This pseudo CDL will not parse directly.

Note: There are unescaped double quotes and newlines and the quotation marks which would delimit the entire crs_wkt string are missing in this example. This is to enhance readability, but it means that this pseudo CDL will not parse directly.

The preceding two example (5.11 and 5.12) may be combined, if the data provider desires to provide explicit latitude and longitude coordinates as well as projection coordinates and to provide CRS WKT referencing for both sets of coordinates. This is demonstrated in example 5.13

Note: There are unescaped double quotes and newlines and the quotation marks which would delimit the entire crs_wkt string are missing in this example. This is to enhance readability, but it means that this pseudo CDL will not parse directly.

5.7. Scalar Coordinate Variables

When a variable has an associated coordinate which is single-valued, that coordinate may be represented as a scalar variable (i.e. a data variable which has no netCDF dimensions). Since there is no associated dimension these scalar coordinate variables should be attached to a data variable via the coordinates atribut.

The use of scalar coordinate variables is a convenience feature which avoids adding size one dimensions to variables. A numeric scalar coordinate variable has the same information content and can be used in the same contexts as a size one numeric coordinate variable. Similarly, a string-valued scalar coordinate variable has the same meaning and purposes as a size one string-valued auxiliary coordinate variable (Section 6.1, "Labels"). Note however that use of this feature with a latitude, longitude, vertical, or time coordinate will inhibit COARDS conforming applications from recognizing them.

Once a name is used for a scalar coordinate variable it can not be used for a 1D coordinate variable. For this reason we strongly recommend against using a name for a scalar coordinate variable that matches the name of any dimension in the file.

If a data variable has two or more scalar coordinate variables, they are regarded as though they were all independent coordinate variables with dimensions of size one. If two or more single-valued coordinates are not independent, but have related values (this might be the case, for instance, for time and forecast period, or vertical coordinate and model level number, Section 6.2, "Alternative Coordinates"), they should be stored as coordinate or auxiliary coordinate variables of the same size one dimension, not as scalar coordinate variables.

In this example both the analysis time and the single pressure level are represented using scalar coordinate variables. The analysis time is identified by the standard name "forecast_reference_time" while the valid time of the forecast is identified by the standard name "time".


AreaDefinition Class Methods¶

There are four class methods available on the AreaDefinition class utilizing create_area_def() providing a simpler interface to the functionality described in the previous section. Hence each argument used below is the same as the create_area_def arguments described above and can be used in the same way (i.e. units). The following functions require area_id i projection along with a few other arguments:

From_extent¶

From_circle¶

From_area_of_interest¶

From_ul_corner¶


Primjeri

Display Regular Data Grid as Texture Map

Load elevation data and a geographic cells reference object for the Korean peninsula. Create a set of map axes for the Korean peninsula using worldmap .

Display the elevation data as a texture map. Apply a colormap appropriate for elevation data using demcmap .

Display Polygons on Map Projection

Import a shapefile containing the coastline coordinates of Africa, Asia, and Europe. Verify the data represents a polygon by querying its Geometry field.

Display the polygon on a world map. NaN values in coast separate the external continent boundary from the internal pond and lake boundaries.

Define Face Colors and Set Default Face Colors

Load sample data representing the USA. Set up an empty map axes with projection and limits suitable for displaying all 50 states.

Create a symbolization specification that sets the color of Alaska and Hawaii polygons to red.

Display all the other states, setting the default face color to blue and the default edge color to black.

Create Map and Display NaNs as Transparent

Load elevation data and a geographic cells reference object for the Korean peninsula. Insert a band of null values into the elevation data.

Create a set of map axes for the Korean peninsula using worldmap . Then, display the elevation data as a surface with transparent null values.

Display EGM96 Geoid Heights Masking Out Land Areas

Get geoid heights and a geographic postings reference object from the EGM96 geoid model. Then, display the geoid heights as a surface using an Eckert projection. Ensure the surface appears under the land mask by setting the 'CData' name-value pair to the geoid height data and the 'ZData' name-value pair to a matrix of zeros. Display the frame and grid of the map using framem and gridm .

Create a colorbar and add a text description. Then, mask out all the land.

Display EGM96 Geoid Heights as 3-D Surface

Get geoid heights and a geographic postings reference object from the EGM96 geoid model. Then, display the geoid heights as a surface using an Eckert projection.

Add light and material. Then, view the map as a 3-D surface.

Display Moon Albedo Using Orthographic Projection

Load moon albedo data and a geographic cells reference object.

Then, display the data. To do this, create a map axes object and specify its projection as orthographic. Display the data in the map axes as a texture map using the geoshow function. Then, change the colormap to grayscale and remove the axis lines.


NCO netCDF Operators

I have a NetCDF file structure as below. How can I delete the dimensions & variables such as "Band", "OpticalDepth", "ParticleType"?

I tried "ncks -x -v Band in.nc out.nc". It went thru from the command without any error. but when I ncdump out.nc, I see the variable/dimension "Band" is still in the file. Sta nije u redu? Any suggestion how to do it?

dimensions:
Band = 1
time = UNLIMITED // (5 currently)
OpticalDepth = 1
ParticleType = 1
variables:
int Band(Band)
Band:long_name = "Band(fake)"
Band:units = "level"
Band:standard_name = "band"
double my_plottable_variable(time, OpticalDepth, Band, ParticleType)
my_plottable_variable:_FillValue = -9999.
my_plottable_variable:coordinates = "time"
my_plottable_variable:long_name = "my plottable variable"
int OpticalDepth(OpticalDepth)
OpticalDepth:long_name = "OpticalDepth(fake)"
OpticalDepth:units = "level"
OpticalDepth:standard_name = "opticaldepth"
int ParticleType(ParticleType)
ParticleType:long_name = "ParticleType(fake)"
ParticleType:units = "level"
ParticleType:standard_name = "particletype"
int time(time)
time:standard_name = "time"
time:units = "seconds since 1970-01-01 00:00:00"

Ups. just tried again, it complains with my command:
$ ncks -O -x -v new_misr.nc mytest.nc
ncks: ERROR mytest.nc neither exists locally nor matches remote filename patterns
$

so , still the same question -- what is the command to delete a dimension and a variable at the same time or separately?

ncks -C -O -x -v Band new_misr.nc mytest.nc

this will not delete the dimension because another variable (my_plottable_variable) needs it.

ncks -O -x -v Band,my_plottable_variable new_misr.nc mytest.nc

do appreciate. I see the problem now.

however, the variables 'my_plottable_variable' and "time" are to be used for a time series plot. so, deleting 'my_plottable_variable" is not a solution in my case. how to remove the "Band" dimension referenced by "my_plottable_variable"?

my final goal is to generate a file like below:

dimensions:
time = UNLIMITED // (5 currently)

variables:
double my_plottable_variable(time)
my_plottable_variable:_FillValue = -9999.
my_plottable_variable:coordinates = "time"
my_plottable_variable:long_name = "my plottable variable"

int time(time)
time:standard_name = "time"
time:units = "seconds since 1970-01-01 00:00:00"


Pogledajte video: Convert Lat Lon to XY using QGIS, Easy and Free