Vairāk

NetCDF faila uzzīmēšana, izmantojot mainīgos iekļauto lat un lon


Es mēģinu uzzīmēt šo NetCDF failu (un tamlīdzīgu) kā 2d kontūru karti. Failā ir viens slānis ar vienu mainīgo, pr.
Failam ir 413x229 X-Y pikseļu koordinātas, un, saglabājot mainīgos "xlon" un "xlat", precīzas katra režģa punkta koordinātas.
Es varu viegli uzzīmēt, izmantojot XY koordinātas:

faila nosaukums <- "file.nc" varname <- "pr" bibliotēkas (rastra) mainīgais <- rastrs (faila nosaukums, varname = varname) gabals (mainīgais)

Hpwever, sižets iznāk "saspiests", un turklāt es vēlos uzzīmēt, izmantojot lat-lon koordinātas. Kā es to varu izdarīt?


Tas, manuprāt, ir kaut kā līdzīgs šim jautājumam:
https://gis.stackexchange.com/questions/48518/how-to-re-project-ease-equal-area-scalable-earth-grid-with-a-25-km-cylindrica?newreg=0eac93c7cbf04b6386d4e62e64e747ef

Tomēr tur sniegtais risinājums nav piemērots manam gadījumam, jo:

  • Es gribētu izvairīties noncdf4iepakojumā, es labprātāk izmantoturastrstikai tāpēc, ka tas ļautu man paplašināt procedūru līdz lielākiem failiem
  • Man ir vairākas kļūdasconvertGrid ()funkcija, piemēram:
    koordinātas (xp) = ~ x+y
    Kļūda .subsetā (x, j): tikai 0 var sajaukt ar negatīviem apakšrakstiem

Manuprāt, man vajadzētu mainīt projekciju. Viss, ko es zinu par projekciju, ir ietverts failā ncdump:

projection = "LAMCON" grid_size_in_meters = 12000. platuma_projekta_izcelsme = 39.

Failam nav DRS specifikācijas. Es zinu, ka man vajadzētu to darīt, izmantojotsp,rastrsunrasterVisiepakojumiem, bet līdz šim man tas nav izdevies.

Mēģinājums uzzīmēt kā data.frame arī nedarbojas, jo režģis nav nemainīgs.


Es domāju, ka mana atbilde no jūsu cita StackOverflow jautājuma nav novedusi jūs pareizajā virzienā?

Šeit ir detalizētāka atbilde, kas var novirzīt jūs pareizajā virzienā.

Pirmkārt, mums ir jāzina jūsu datu prognoze un apjoms, lai varētu pareizi projicēt garo/latu režģi. Diemžēl mums nav PROJ4 CRS vai apjoma, tāpēc es cenšos visu iespējamo novērtēt.

# Pirmkārt, novērtējiet apjomu. # Mēs sākam ar latu un garo, pēc tam projicējam to uz Lamberta konformālās projekcijas bibliotēkas (rastra) ievades failu <- "pr_avegated_Med_CORDEX_ATM.1980-2008.nc" # Paņemiet lat un lon no datu lat <- rastrs (ievades fails, varname = "xlat") lon <- rastrs (inputfile, varname = "xlon") # Pārvērst par punktiem un saskaņot lat un lons plat <- rasterToPoints (lat) plon <- rasterToPoints (lon) lonlat <- cbind (plon [, 3], plat [, 3]) # Norādiet lonlat kā telpiskus punktus ar projekciju kā long/lat lonlat <- SpatialPoints (lonlat, proj4string = CRS (" +proj = longlat +nulles punkts = WGS84")) # Nepieciešama pakete rgdal lai to projicētu sākotnējā koordinātu sistēmas bibliotēkā ("rgdal") # Mans labākais minējums par virkni proj4 no sniegtās informācijas mycrs <- CRS (" +proj = lcc +lat_1 = 35 +lat_2 = 51 +lat_0 = 39 +lon_0 = 14 +k = 0,684241 +vienības = m +nulles punkts = WGS84 +no_defs ") plonlat <- spTransform (lonlat, CRSobj = mycrs) # Paskatieties plonlat mērā (plonlat) # Yay! Tagad mēs varam pareizi iestatīt koordinātu informāciju rastram pr <- rastrs (ievades fails, varname = "pr") meklēt pr diagrammu (pr) # Projekts uz garo lat režģi r <- projectRaster (pr, crs = CRS (" +proj = longlat +nulles punkts = WGS84")) # Apskatiet r diagrammu (r) # Pievienojiet kontūru kontūru (r , add = TRUE) # Pievienot valsts līniju bibliotēkas ("maps") karti (add = TRUE, col = "blue")

Es domāju, ka tas izskatās pareizi. Šķiet, ka valsts robežas netālu no okeāna atbilst sižeta krāsām. Es domāju, ka jūs varat to paņemt no turienes. Jūs varat izveidot skaistākus gabalus arrasterVisvaiggplot.


Dažreiz, tāpat kā mainīgam HDF (hdf5) faila izvilkumam, jums nav regulāru šūnu atstarpju. Lat un lon izvilkums no faila, piemēram, ir neregulāras atstarpes. Tātad jums būs problēmas izveidot pareizu rastru vai attēlu. Tāpēc jūs varat interpolēt datus. Šim nolūkam es izmantoju funkciju interp no paketes akima. Tas ir veids, kā es atrisinu problēmu, ja ir matrica vai datu kopa ar neregulārām lat un lon vērtībām. Es domāju, ka to var izmantot arī ggplot2.


1. Ievads

NetCDF ir plaši izmantots formāts klimata datu apmaiņai vai izplatīšanai, un tas ir pieņemts arī citās jomās, jo īpaši bioinformātikā, un citās disciplīnās, kur tiek ģenerēti lieli daudzdimensiju datu masīvi. NetCDF faili ir sevi raksturojošstādā nozīmē, ka tajos ir metadati, kas apraksta failā ietverto informāciju, piemēram, režģa platuma un garuma izkārtojums, mainīgo lielumu nosaukumi un vienības datu kopā un “atribūti”, kas apraksta, piemēram, trūkstošos vērtību kodus vai kompensācijas un mēroga faktori, kas, iespējams, tika izmantoti datu saspiešanai. Ir arī NetCDF faili neatkarīgs no mašīnas jo to var pārsūtīt starp serveriem un datoriem, kuros darbojas dažādas operētājsistēmas, kaut kādā veidā nepārveidojot failus. Sākotnēji izstrādāts klimata datu, piemēram, klimata simulācijas vai reanalīzes modeļu ģenerēto, glabāšanai un izplatīšanai, formātu un protokolus var izmantot citām režģveida datu kopām. NetCDF bibliotēkas izstrādā un uztur Unidata http://www.unidata.ucar.edu/software/netcdf/, un pastāv viegli lietojamas lietojumprogrammas vienkāršu NetCDF failu vizualizēšanai, piemēram, Panoply, http: // www. giss.nasa.gov/tools/panoply/.

Pastāv divas netCDF netCDF3 versijas, kas tiek plaši izmantotas, taču tām ir daži izmēru un veiktspējas ierobežojumi, un netCDF4, kas atbalsta lielākas datu kopas un ietver papildu iespējas, piemēram, failu saspiešanu.

R spēj lasīt un rakstīt (un līdz ar to analizēt) netCDF failus, izmantojot David Pierce piedāvātās ncdf un ncdf4 paketes, kā arī izmantojot citas paketes, piemēram, rastra, metR1 un RNetCDF. Paketes ncdf4.helpers un easyNCDF nodrošina dažus papildu rīkus.

Pakete ncdf4 ir pieejama gan operētājsistēmā Windows, gan Mac OS X (un Linux), un tā atbalsta gan vecāku NetCDF3 formātu, gan netCDF4. (Skatiet tīmekļa lapu ncdf/ncdf4 vietnē http://cirrus.ucsd.edu/


NetCDF faila uzzīmēšana, izmantojot mainīgos ietvertos latus un lonus - ģeogrāfiskās informācijas sistēmas

Vai masīva indeksiem jāsākas ar 0 vai 1? Manu kompromisu 0,5 noraidīja, manuprāt, pienācīgi neapsverot. --Stan Kellija-Bootle

Ievads

Bibliotēkas programmatūra, piemēram, netCDF vai HDF5, nodrošina piekļuvi daudzdimensionāliem datiem, izmantojot masīva indeksus, taču mēs bieži vien labprātāk piekļūstam datiem pēc koordinātām, piemēram, punktiem uz Zemes virsmas vai telpas un laika ierobežojošajām kastēm.

Klimata un prognozes (CF) metadatu konvencijas paredz saskaņotus veidus, kā attēlot koordinātu sistēmas, bet neattiecas uz piekļuves nodrošināšanu ar koordinātām praktiski un efektīvi. Jo īpaši tādu koordinātu sistēmu izmantošana, kādas aprakstītas CF konvenciju sadaļā "Divdimensiju platums, garums, koordinātu mainīgie", dažādu iemeslu dēļ var nenodrošināt tiešu veidu, kā atrast masīva indeksus no platuma un garuma koordinātām. Šādu datu piemēri ir šādi:

  • līkņveida režģu izmantošana, kas seko piekrastes līnijām
  • satelītu vāli, kas ģeoreferēti uz lat-lon tīkliem
  • koordinātu sistēmas bez CF grid_mapping_name atribūta
  • nesaistīti & quotation & quot; dati, piemēram, punktu novērojumi un zondes

Izmantojot reālo pasauli (labi, labi, an idealizēta sfēriska Earth), piemēram, mēs redzēsim vairākus veidus, kā piekļūt datiem pēc koordinātām, kā arī to, kā atbilstošas ​​programmatūras un datu struktūru izmantošana var ievērojami uzlabot šādas piekļuves efektivitāti.

Datu kopas piemērs

Mūsu izmantotā datu kopas paraugs ir no HYbrid koordinātu okeāna modeļa (HYCOM).

Šī datu kopa ir labs piemērs vairāku iemeslu dēļ:

  • Tas ir raksturīgi daudziem okeāna, klimata un prognozēto modeļu datu produktiem ar vairākiem mainīgajiem vienā režģī un atbilst CF konvencijām par koordinātu sistēmas attēlošanu.
  • Tam ir netriviāla ģeotelpiskā koordinātu sistēma, ko attēlo 2D platuma un garuma masīvi, kas ir palīgkoordinātas citiem mainīgajiem. Šķiet, ka režģis ir trīspolāra režģa apakškopa, taču failā nav neviena no parametriem, kas nepieciešami, lai iegūtu formulu, kuras elementi atbilst noteiktai koordinātei.

Lai gan šī emuāra tēmai nav ļoti būtiska, datu kopas paraugs arī labi izmanto saspiešanu, okeāna datu aizpildīšanas vērtības virs zemes. NetCDF klasiskais fails ir 102 MB, bet ekvivalents netCDF-4 klasiskā modeļa fails ar saspiešanu ir tikai 30 MB. Nekam šajā rakstā nav nekāda sakara ar netCDF-4 datu modeli, tas viss attiecas uz klasiskā modeļa netCDF-3 vai netCDF-4 datiem.

Šeit ir daži iznākumi, kas attiecas uz mūsu radīto problēmu, no & quotncdump -h & quot, kas piemērots parauga failam:

Uzzīmējot visu platuma un garuma režģi, tiktu iegūts liels 600 000 pikseļu plankums, bet šeit ir retāks režģa attēlojums, kas parāda katru 25. rindu paralēli X un Y asīm:

Koordinātu vaicājumu piemēri

Temperatūras mainīgajam ir papildu garuma un platuma koordinātas, un mēs vēlamies piekļūt datiem, kas atbilst to vērtībām, nevis X un Y masīva indeksiem. Vai mēs varam efektīvi noteikt vērtības netCDF mainīgajiem, piemēram, temperatūrai vai sāļumam, piemēram, režģa punktā, kas ir vistuvāk 50 grādiem ziemeļu platuma un -140 grādiem austrumu garuma?

Vispārīgāk runājot, kā mēs varam efektīvi

  • noteikt mainīgā vērtību, kas ir vistuvāk noteiktai vietai un laikam?
  • vai piekļūt visiem datiem apakštīklā, kas definēts noteiktā laika un laika koordinātu ierobežošanas lodziņā?

Kāpēc piemēram izmantot iPython piezīmjdatoru?

Šajā piemērā kods netCDF datu lasīšanai un kartēšanai no koordinātu telpas uz masīva indeksa telpu ir parādīts iPython piezīmjdatorā. Kāpēc ne C, Java, Fortran vai kāda cita valoda, ko tieši atbalsta Unidata?

Lieta ir skaidrība. Šis ir diezgan garš emuārs, kurā, iespējams, jau ir apkopoti vairāki & quot; TLDR & quot; komentāri. Pievienotajam piemēra kodam jābūt īsam, skaidram un viegli lasāmam.

Piezīmjdators iPython, kas izauga no sesijas par netCDF datu lasīšanu Unidata 2013 TDS-Python seminārā, ir pieejams 2013. gada Unidata TDS-Python darbnīcā, ar kuru jūs varat palaist piemērus un veikt laika iestatījumus savā datorā un pat ar savus datus!

Ja izvēlaties otro metodi, varat redzēt piemēru maiņas vai savu datu aizstāšanas rezultātus. Lai izmantotu piezīmjdatoru, jums ir jāinstalē Python un dažas papildu bibliotēkas, kas norādītas atsauces darbnīcas vietnes README lapas apakšā.

Lai apskatītu notiekošo, pietiek ar HTML versijas aplūkošanu.

Četras pieejas

Piezīmjdatorā mēs ieviešam un pakāpeniski uzlabojam vairākus veidus, kā piekļūt netCDF datiem, pamatojoties uz koordinātām, nevis masīva indeksiem:

  • lēni, vienkārši un dažreiz nepareizi
  • ātri, vienkārši un dažreiz nepareizi
  • ne tik ātri, bet pareizi
  • ātrs, pareizs un pielāgojams daudziem vaicājumiem vienā datu kopā

Naiva, lēna pieeja

Tā kā mūsu konkrētā problēma ir atrast, kurš no vairāk nekā 600 000 punktiem ir vistuvāk (lat, lon) punktam (50, -140), vispirms vajadzētu pateikt, kas ir domāts ar "slēgt".

Naivā metrika attālumam kvadrātā starp (lat, lon) un (lat0, lon0) vienkārši izmanto & quot; Eiklīda normu & quot;, jo to ir viegli aprēķināt:

Tāpēc mums ir jāatrod indeksi x un y tā, lai punkts (platums [y, x], Garums [y, x]) ir tuvu vēlamajam punktam (lat0, lon0). Naivs veids, kā to izdarīt, ir izmantot divas ligzdotas cilpas, pārbaudot attālumu kvadrātā visiem 600 000+ pāriem y un x vērtības vienā punktā.

Šīs versijas kods tiek parādīts kā funkcija naivs_ lēns un dažas turpmākas rindiņas, kas izsauc funkciju mūsu skaidrajā piemērā.

Ņemiet vērā, ka visi koda šūnu piemēri sākotnēji atver parauga failu, nolasa datus, kas nepieciešami, lai atrastu vēlamās vērtības, un aizver failu pēc pietiekami daudz informācijas drukāšanas, lai pārliecinātos, ka esam saņēmuši pareizo atbildi. Darbs ar faila atvēršanu, datu nolasīšanu un faila aizvēršanu tiek atkārtots katrai funkcijai, lai šūnas būtu viena no otras neatkarīgas un tās varētu palaist jebkurā secībā vai atkārtoti, neradot kļūdas, piemēram, mēģinot lasīt no aizvērtām failus vai divreiz aizverot vienu un to pašu failu.

Ātrāk ar NumPy

Pirmā pieeja izmanto parastas skaidras cilpas, kas padara to līdzīgu Fortran vai C kodam. To var paātrināt vairāk nekā 700 reizes, vienkārši izmantojot NumPy, Python bibliotēku, kas atbalsta daudzdimensiju masīvus un masīva darbības vienlaicīgi, un funkcijas, kas bieži aizvieto skaidras cilpas ar visa masīva paziņojumiem. Mēs saucam šo funkcijas versiju naivs_ātrs.

Patīk naivs_ lēns, tas cieš no trūkumiem, izmantojot "plakanu" tuvuma mēru.

Tuneļa attālums: joprojām ātrs, bet pareizāks

Abu iepriekšējo versiju problēma ir tā, ka tās uzskata Zemi par plakanu, ar garuma pakāpi pie poliem tikpat liela kā ekvatora garuma grāds. Tas arī uzskata, ka attālums starp punktiem malās, piemēram, (0,0, -179,99) un (0,0, +179,99) ir liels, pat ja šie punkti atrodas tieši pāri starptautiskajai datuma līnijai.

Viens no veidiem, kā atrisināt abas šīs problēmas, ir izmantot labāku metriku, piemēram, tuneļa garumu caur Zemi starp diviem punktiem kā attālumu, ko ir viegli aprēķināt, izmantojot tikai nelielu trigonometriju.

Tādējādi tiek iegūts pareizāks risinājums, kas darbojas pat tad, ja garuma grādi ir norādīti citā diapazonā, piemēram, no 0 līdz 360 grādiem, nevis no -180 līdz 180, jo tuneļa attāluma aprēķināšanai mēs izmantojam tikai leņķu trigonometriskās funkcijas. Vikipēdijā ir vienkāršas trig formulas, kuras mēs varam izmantot. Tas arī dod mums tādu pašu atbildi kā naivā pieeja mūsu piemēra punktam, bet izvairās no kļūdainām atbildēm, kuras mēs iegūtu, ja zemi uzskatītu par līdzenu, izmantojot „naivās” pieejas.

Laika šo pieeju, ar funkciju mēs saucam tunelis_ātrs, jo mēs joprojām izmantojam ātrus NumPy masīvus un funkcijas skaidru cilpu vietā, joprojām ir aptuveni 200 reizes ātrāks nekā cilpas naivā pieeja.

KD koku izmantošana mērogojamākiem paātrinājumiem

Visbeidzot, mēs izmantojam datu struktūru, kas īpaši izstrādāta, lai ātri atrastu vaicājuma punktam tuvāko punktu lielā punktu kopā: KD koku (sauktu arī par & quot;k-d koks & quot). KD koka izmantošana ir divpakāpju process.

Vispirms ielādējiet KD koku ar punktu kopumu, kurā vēlaties meklēt tuvāko punktu, parasti režģa punktus vai nesaistītu datu kopas atrašanās vietas. Cik ilgs laiks tas ir atkarīgs no punktu skaita, kā arī to dimensijas, taču tas ir līdzīgs kārtošanai nepieciešamajam laikam N cipari, proti O (N log (N)). Datu kopas paraugam, kurā režģī ir vairāk nekā 600 000 punktu, mūsu klēpjdatora testa platformā tas aizņem mazāk nekā 3 sekundes, taču tas ir ievērojami ilgāks par minimālā tuneļa attāluma meklēšanas iestatīšanas laiku.

Otrais solis nodrošina vaicājuma punktu un atgriež vaicājuma punktam tuvāko punktu vai punktus KD kokā, kur var mainīt to, kā ir definēts "tuvākais". Šeit mēs izmantojam 3D punktus uz sfēriskās Zemes ar vienības rādiusu. Iestatīšanas un vaicājuma kombinācija sākotnēji tiek ieviesta a kdtree_fast funkciju.

Lai gan to nevar noteikt, izpildot iestatīšanu un vaicājumu kopā, kdtree_fast vaicājums ir ievērojami ātrāks nekā tunelis_ātrs Meklēt. Tādējādi kdtree_fast pieeja ir daudz labāka, ja mums ir viens komplekts, S, meklēšanas punkti un daudzi vaicājumu punkti, kuriem mēs vēlamies tuvāko punktu (vai punktus) S.

Piemēram, mēs varam vēlēties mainīgas vērtības 100 x 100 (lat, lon) domēna apakštīklos, un, kā redzēsim, KD koks nodrošina daudz ātrāku risinājumu nekā tunelis_ātrs vai naivs_ātrs metodes. Ja atrašanās vietas nemainās, izmantojot datus no vairākiem failiem, laikiem vai slāņiem, KD koka iestatīšanas laiku var atkārtoti izmantot daudziem punktu vaicājumiem, nodrošinot ievērojamu efektivitāti. Populārām telpiskām datu kopām servera pusē vienu un to pašu KD koku var atkārtoti izmantot vairākām datu kopām, kurās tiek izmantotas vienas un tās pašas koordinātas.

KD koka datu struktūru var izmantot arī elastīgāk, lai nodrošinātu ātrus vaicājumus M tuvākajiem punktiem noteiktam vaicājuma punktam, kas ir noderīgi vērtību interpolācijai, nevis tikai mainīgā vērtības izmantošanai vienā tuvākajā punktā.

KD koka datu struktūra ir kā Šveices armijas nazis koordinātu datiem, kas zināmā mērā ir līdzīga virkņu regulārajām izteiksmēm. Mēs esam parādījuši KD koku izmantošanu 2D lat/lon datiem un punktu 3D koordinātām sfērā ar tuneļa attāluma metriku. KD kokus var izmantot arī ar vertikālām koordinātām vai laiku, ja norādāt saprātīgu veidu, kā definēt & quot; slēgt & quot; starp punktiem telpā-laikā.

KD koku ieviešana ir brīvi pieejama C, Java, Fortran, C ++ un citās valodās, izņemot Python. Java KD koka ieviešana tiek izmantota ncWMS-tīmekļa karšu pakalpojumā, kas iekļauts TDS serveros, bet izstrādāts Readingas universitātē. KD-koku C/C ++ ieviešana tiek izmantota Norvēģijas Meteoroloģijas institūta bibliotēkā Fimex, kas atbalsta ģeotelpisko datu interpolāciju un apakškopēšanu, kas balstīta uz Unidata kopējo datu modeli. Modulis, kuru izmantojām iPython piezīmjdatora piemērā, scipy.spatial.cKDTree, ir C ieviešanas zvans no Python, ievērojami ātrāk nekā tīrā Python ieviešana scipy.spatial.KDTree.

Piezīmjdatora pēdējā sadaļā no jauna tiek ieviestas mūsu četras funkcijas kā četras uz objektu orientētas Python klases ar iestatīšanas kodu klases konstruktorā un vienu vaicājuma metodi. Tas atvieglo katras pieejas inicializācijas un vaicājumu daļu savlaicīgu noteikšanu, kā rezultātā tiek iegūtas vienkāršas formulas par laiku, kas nepieciešams N punktiem, un prognozes par to, kad papildu iestatīšanas laiks kdtree_fast atmaksājas.

Un uzvarētājs ir .

Lūdzu, aploksni. Un uzvarētājs ir . YMMV!

Jūsu nobraukuma iemesli var būt dažādi:

  • punktu skaits meklēšanas komplektā
  • meklēšanas kopas dimensijas
  • attāluma metrikas sarežģītība
  • vaicājuma punktu skaits
  • vajadzīgo tuvāko kaimiņu skaits, piem. interpolācijai
  • I/O faktori, ieskaitot kešatmiņu, saspiešanu un attālās piekļuves efektus
  • ne-sfēriskas Zemes formas uzskaite

Mēs esam apkopojuši savus laika rezultātus četrām pieejām parauga problēmai, izmantojot piemēru datu kopu iPython piezīmjdatora beigās. Varbūt mēs varam apskatīt dažus no iepriekš uzskaitītajiem faktoriem turpmākajos emuāros.

Ja nevēlaties atvērt iPython piezīmjdatoru, lai redzētu rezultātus, šeit ir dažas reizes ātras klēpjdatora platformas laikā:

Metode Iestatīšana (ms) Vaicājums (ms) Iestatīšana + 10000
vaicājumi (sek.)
Naive_slow3.76 7790 77900
Naivs_ātrs3.82.46 24.6
Tunelis_ātrs 27.4 5.14 51.4
Kdtree_fast 2520 0.0738 3.3

Nosakot, kad ir vērts izmantot KD koku šis piemērs rezultātā:

  • kd_tree_fast pārspēj naive_fast virs 1050 vaicājumiem
  • kd_tree_fast pārspēj tunnel_fast virs 490 vaicājumiem

KD koku izmantošanas priekšrocība ir daudz lielāka, lai iegūtu vairāk meklēšanas iestatījumu punktu, jo KD koka vaicājuma sarežģītība ir O (log (N)), bet pārējie algoritmi ir O (N), tāpat kā atšķirība starp binārās meklēšanas izmantošanu pret lineāro meklēšanu.

Ja jūs interesē vairāk par šo tēmu, labs īss raksts par dažādiem datu kārtošanas veidiem, izmantojot KD kokus un citas metodes, ir Jona Blūfa un A. Klega ātra lielu, sarežģītu ģeotelpisko datu kopu atkārtota apkopošana.

Ļoti jauks ieraksts! Tikai pāris nelieli komentāri:


  1. Pūtēja un Klegga dokumentā ir paskaidrots, kāpēc “tuvākā kaimiņa” punkts ne vienmēr ir tas pats, kas “režģa šūna, kurā atrodas interesējošais punkts”. Tā var būt svarīga atšķirība, mēģinot precīzi tikt galā ar izliektiem līknes režģiem.
  2. Lai gan mēs eksperimentējām ar kd koku ncWMS, mēs atklājām, ka vienkārša “uzmeklēšanas tabulas” pieeja bija ātrāka, it īpaši, ja jūs varat saglabāt kešatmiņā uzmeklēšanas tabulu un izvairīties no tā atjaunošanas katru reizi. Tāpēc ncWMS pēc noklusējuma izmanto LUT.

Aptuveni runājot, ncWMS izmanto LUT, lai atrastu režģa šūnu, kas atrodas tuvu vajadzīgajam platuma un garuma punktam. Tad tas medī ap šo punktu, līdz atrod režģa šūnu, kurā faktiski ir šis punkts (izmantojot Java daudzstūra. Satur (punkta) metodi). Metode satur () var būt dārga, tāpēc parasti ir ātrāk atrast tuvāko kaimiņu, ja tas tiešām ir tas, ko vēlaties.

Starp citu, jums patīk izmantot iPython piezīmjdatoru!

Ievietojis Džons Pūtējs 2013. gada 16. septembrī plkst. 03:28 MDT #

Paldies par komentāriem, Jon.

Kopš lasīju par jūsu LUT pieeju, es vēlos to ieviest tajā pašā Python sistēmā, kuru izmantoju, un varbūt uzrakstīt citu emuāra ierakstu par šī piemēra rezultātiem.

Ievietojis 67.190.4.13 2013. gada 16. septembrī plkst. 06:21 MDT #

Lieliski, būtu ļoti interesanti ieviest Python. Starp citu, ncWMS LUT ģenerēšanai izmantoja diezgan brutālu spēku algoritmu, kas bija diezgan lēns. Tagad tā izmanto daudz ātrāku metodi, kas ietver režģa šūnu "krāsošanu" LUT, izmantojot Java 2D grafisko API, efektīvi apstrādājot LUT kā attēlu. (Blower and Clegg papīra terminoloģijā LUT tiek ģenerēts, izmantojot "avota spiediena" algoritmu.) Kods ir redzams vietnē http://www.resc.rdg.ac.uk/trac/ncWMS/browser /trunk/src/java/uk/ac/rdg/resc/edal/cdm/LookUpTable.java.</p>

Es nezinu, vai Python ir līdzvērtīgas API - ja nē, kodu var būt diezgan grūti pārnest!

Ievietojis Džons Pūtējs 2013. gada 17. septembrī plkst. 01:20 MDT #

Es joprojām atceros savu pirmo projektu, izmantojot CI un google karti

un bibliotēku kartes no Google patiešām sniedz lielisku palīdzību un vienkāršu konfigurāciju

Ievietojis Qwords tīmekļa mitināšana 2015. gada 30. novembrī plkst. 02:43 MST #

Es piekrītu, ka es vēlētos to ieviest tajā pašā Python sistēmā, kuru izmantoju, un varbūt uzrakstīt citu emuāra ierakstu par šī piemēra rezultātiem.

Ievietojis jasa bikin web 2017. gada 28. maijā plkst. 04:08 MDT #

Jūs varat izmantot režģa skaitļu kalkulatoru. Tā ir API Netcdf-Extractor versijā 2.0. GNC ir bezmaksas, un to varat izmantot:
https://www.agrimetsoft.com/Netcdf-Extractor.aspx</p></p>

Ievietojis Hasan Sheidaee 2018. gada 28. aprīlī plkst. 17:29 MDT #

Jūs varat izmantot režģa skaitļu kalkulatoru. Tā ir API Netcdf-Extractor versijā 2.0. GNC ir bezmaksas, un to varat izmantot:
https://agrimetsoft.com/Netcdf-Extractor.aspx</p></p>

Ievietojis Hasan Sheidaee 2018. gada 11. jūlijā plkst. 09:34 MDT #

Ievietojis Hasan Shedaee 2018. gada 17. jūlijā plkst. 10:09 MDT #

Sveiki! Paldies par palīdzību. Es nevaru piekļūt piezīmju grāmatiņai. Tas ir noņemts. Vai ir kāds veids, kā piekļūt kodam. Paldies :)

Ievietojis Patrīcija Fernandess 2018. gada 19. oktobrī plkst. 05:44 MDT #

"Atvērt NC failu" var atvērt un lasīt datus, izmantojot staciju koordinātu sarakstu. Nc lietotājs var ievadīt staciju sarakstu manuāli vai ar failu. "Atvērt NC failu" var lasīt staciju sarakstu (sastāv no koordinātām) teksta failā vai Excel failā vai csv failā. Nc lietotājs var atlasīt visus nc failus un tos apvienot sadaļā "Atvērt NC failu".

Ievietojis Sohrab Kolsoumi 2018. gada 19. oktobrī plkst. 08:01 MDT #

Man joprojām ir mulsinoši par šo programmēšanas algoritmu. Bet paldies par dalīšanos

Ievietojis Jasa vietne Semarang 2018. gada 14. decembrī plkst. 19:49 MST #

Sveiki! Paldies par palīdzību. Es nevaru piekļūt piezīmju grāmatiņai. Tas ir noņemts. Vai ir kāds veids, kā piekļūt kodam. Paldies :)

Ievietojis Harga Jasa Pembuatan vietne 2019. gada 16. martā, 04:29 MDT #


Etalona zīmēšanas funkcijas¶

Gcpy.benchmark satur vairākas funkcijas GEOS-Chem izvades attēlošanai GEOS-Chem vadības komitejas pieprasītajos formātos. Šo funkciju primārais pielietojums ir izveidot diagrammas lielākajai daļai GEOS-Chem izvades mainīgo, kas iedalītas īpašās kategorijās, piem. sugu kategorijas, piemēram, aerosoli vai broms SpeciesConc diagnostikai. Katrā kategorijā šīs funkcijas izveido viena līmeņa PDF failus virsmai un 500 hPa un zonālos vidējos PDF failus visai atmosfērai un tikai stratosfērai (definēts 1–100 hPa). Veidam make_benchmark_emis_plots () tiek veidoti tikai viena līmeņa grafiki pie virsmas. Visas šīs zīmēšanas funkcijas ietver grāmatzīmes ģenerētajos PDF failos, kas norāda uz lapām, kurās ir katrs uzzīmētais daudzums. Tādējādi šīs funkcijas kalpo kā rīki, lai ātri izveidotu visaptverošus grafikus, salīdzinot divus GEOS-Chem braucienus. Šīs funkcijas tiek izmantotas, lai izveidotu publiski pieejamus grafikus GEOS-Chem jauno versiju 1 mēneša un 1 gada etaloniem.

Daudzas no šīm funkcijām izmanto iepriekš definētus (izmantojot GCPy iekļautos YAML failus) mainīgo sarakstus. Ja vienā datu kopā ir mainīgais, bet otrā nav, tad šī mainīgā dati pēdējā datu kopā tiks uzskatīti par NaN un tiks uzzīmēti kā tādi.

Kopīga struktūra¶

Katrai funkcijai gcpy.benchmark.make_benchmark _*_ plot () ir nepieciešami 4 argumenti, lai norādītu ref un dev datu kopas.

Argumenti: ¶

“Ref” (pazīstams arī kā “atsauce”) datu kopas ceļa nosaukums.

Virkne, lai aprakstītu atsauci (piemēram, versijas numurs)

“Dev” (pazīstams arī kā “Development”) datu kopas ceļa nosaukums.

Šo datu kopu salīdzinās ar “atsauces” datu kopu.

Virkne, lai aprakstītu izstrādātāju (piemēram, versijas numurs)

Ņemiet vērā, ka ref un dev argumenti make_benchmark _*_ diagrammās () ir ceļi uz NetCDF failiem, nevis xarray datu kopas, piemēram, salīdzināšanas_single_level () un compa_zonal_mean (). Funkcijas make_benchmark _*_ shēmas () iekšēji atver šos failus kā xarray datu kopas un nodod šīs datu kopas salīdzināšanai_vienotības_līmenim () un salīdzināt_zonal_mean ().

Etalona zīmēšanas funkcijām ir vairāki atslēgvārdu argumenti. Atslēgvārdu argumentiem, kuriem nav vienāda mērķa salīdzinošās zīmēšanas funkcijās, aprakstā ir PIEZĪME.

Kopīgi atslēgvārdu argumenti: ¶

Virkne, kas apzīmē galamērķa mapi, kurā tiks rakstīts PDF fails, kas satur grafikus.

Virkne, kas apzīmē dst apakšdirektoriju, kurā tiks rakstīti diagrammas saturoši PDF faili. Praksē subdst ir vajadzīgs tikai viena gada etalona izlaidei, un tas apzīmē datuma virkni (piemēram, “Jan2016”), kas atbilst grafikam. PIEZĪME: nav pieejams wetdep_plots

Iestatiet šo karodziņu uz True, lai pārrakstītu iepriekš izveidotos failus mērķa mapē (norādīts ar dst argumentu).

Iestatiet šo karodziņu uz True, lai izdrukātu papildu informācijas izvadi.

Iestatiet šo karodziņu uz True, lai žurnāla krāsu skalā iespējotu datu attēlošanu (katra diagrammas divi augšējie paneļi, nevis atšķirības).

sigdiff_files: str ¶ saraksts

Failu nosaukumi, kuros būs to daudzumu saraksts, kuriem ir būtiskas atšķirības starp datu kopām. Tiek izmantoti trīs faili: viens virsmai, viens 500 hPa un viens vidējam. Šie saraksti ir nepieciešami, lai aizpildītu etalona apstiprinājuma veidlapas. PIEZĪME: nav pieejams wetdep_plots

Katalogs, kurā ir fails sugas_database.yml. Šis fails tiek izmantots vienību konvertēšanai uz ug/m3. GEOS-Chem palaistie katalogi ietver šī faila kopiju, kas var būt jaunāka par GCPy iekļauto versiju.

Noklusējuma vērtība: GCPy koda krātuves ceļš

weightsdir: str ¶ Katalogs, kurā ievietot (un, iespējams, atkārtoti izmantot) xESMF regridder netCDF failus. ¶

Nosaka vienlaicīgu darbinieku skaitu paralēlajai uzzīmēšanai. Iestatiet 1, lai atspējotu paralēlo zīmēšanu. Vērtība -1 ļauj lietojumprogrammai izlemt. PIEZĪME. Make_benchmark_conc_plots () paralelizācija notiek sugu kategoriju līmenī. Visās pārējās funkcijās paralēlizācija notiek zvanu laikā salīdzināt vienotā līmeņa () un salīdzināt_zonas_mērķi ().

Noklusējuma vērtība: -1 make_benchmark_conc_plots, 1 visos pārējos

Make_benchmark_aod_plots¶

Atsevišķu funkciju atslēgvārdu argumenti: ¶

Uzzīmējamo AOD mainīgo saraksts. Ja tas nav nokārtots, tiks attēloti visi AOD mainīgie, kas ir kopīgi gan Dev, gan Ref. Izmantojiet argumentu varlist, lai atkļūdošanas laikā ierobežotu pdf failā attēloto mainīgo skaitu.

Šī funkcija izveido kolonnu optiskos dziļuma grafikus, izmantojot Aerosols diagnostikas izvadi.

Make_benchmark_conc_plots¶

Atsevišķu funkciju atslēgvārdu argumenti: ¶

Zīmēšanai izmantojamās kolekcijas nosaukums.

Noklusējuma vērtība: “SpeciesConc”

Virkne, kas apzīmē uzzīmētā etalona izvades veidu - FullChemBenchmark vai TransportTracersBenchmark.

Noklusējuma vērtība: “FullChemBenchmark”

Iestatiet šo karodziņu uz False, lai sižetus nosūtītu vienam failam, nevis atsevišķam failam katrā kategorijā.

limit_cats: str ¶ saraksts

Etalona kategoriju saraksts vietnē benchmark_categories.yml, lai izveidotu grafikus. Ja tukšs, parauglaukumus veido visām kategorijām.

Izveidojamo zemes gabalu veidu saraksts.

Noklusējuma vērtība: [‘sfc’, ‘500hpa’, ‘zonalmean’]

Iestatiet šo karodziņu uz patiesu, lai ļautu normalizēt datus pēc virsmas (piemēram, kg s-1-& gt kg s-1 m-2).

To etalona kategoriju saraksts, kuras jāpārvērš ug/m3

Noklusējuma vērtība: [“Aerosoli”, “Secondary_Organic_Aerosols”]

apgabali: xarray dikts DataArray: ¶

Režģa kastes virsmas laukumi m2 uz Ref un Dev režģiem.

Atsauces meteoroloģijas ceļa nosaukums

Dev meteoroloģijas ceļa nosaukums

Ceļa nosaukums otrajai “Ref” (pazīstama arī kā “Atsauce”) datu kopai, lai attēlotu atšķirības. Šai datu kopai jābūt tādam pašam modeļa tipam un režģim kā atsaucei.

Ceļa nosaukums otrajai “Ref” (pazīstama arī kā “Atsauce”) datu kopai, lai attēlotu atšķirības. Šai datu kopai jābūt tādam pašam modeļa tipam un režģim kā atsaucei.

Šī funkcija izveido sugu koncentrācijas diagrammas, izmantojot SpeciesConc diagnostikas izvadi pēc noklusējuma. Šī funkcija ir vienīgā etalona zīmēšanas funkcija, kas atbalsta atšķirību starpdiagrammu veidošanu, kurā tiek nodotas 4 datu kopas un tiek attēlotas atšķirības starp divām Ref datu kopu grupām salīdzinājumā ar divām Dev datu kopu grupām (parasti izmanto, lai salīdzinātu izmaiņas GCHP un . izmaiņas GEOS-Chem Classic modeļu versijās). Šī ir arī vienīgā etalona zīmēšanas funkcija, kas grafikus nosūta uz atsevišķām mapēm, pamatojoties uz kategoriju (kā apzīmēts ar karogu plot_by_spc_cat). Pilns sugu kategoriju saraksts ir norādīts benchmark_categories.yml (iekļauts GCPy) šādi:

Make_benchmark_emis_plots¶

Atsevišķu funkciju atslēgvārdu argumenti: ¶

atbilstoši etalonu sugu kategorijām (piemēram, oksidētāji, aerosoli, slāpeklis u.c.) Šīs kategorijas ir norādītas YAML failā benchmark_species.yml.

Iestatiet šo karodziņu uz True, lai atdalītu gabalus PDF failos atbilstoši HEMCO emisiju kategorijām (piemēram, Anthro, Aircraft, Bioburn utt.)

Iestatiet šo karodziņu uz True, lai mainītu vertikālā līmeņa secību “Ref” datu kopā (ja “Ref” sākas no atmosfēras augšdaļas, nevis virsmas).

Iestatiet šo karodziņu uz True, lai mainītu vertikālā līmeņa secību “Dev” datu kopā (ja “Dev” sākas no atmosfēras augšdaļas, nevis virsmas).

Šī funkcija ģenerē kopējo emisiju diagrammas, izmantojot HEMCO_diagnostics (GEOS-Chem Classic) un/vai GCHP.Emiss izvades failu izvadi.

Make_benchmark_jvalue_plots¶

Atsevišķu funkciju atslēgvārdu argumenti: ¶

Zīmējamo J vērtības mainīgo saraksts. Ja tas nav nokārtots, tiks attēloti visi J vērtības mainīgie, kas ir kopīgi gan dev, gan ref. Arguments varlist var būt noderīgs veids, kā atkļūdošanas laikā ierobežot pdf failā attēloto mainīgo skaitu.

Iestatiet šo karodziņu, lai attēlotu vietējās pusdienlaika J vērtības. Tādējādi visi J vērtības mainīgie tiks sadalīti ar JNoonFrac skaitītāju, kas ir daļa no laika, kad tas bija vietējais pusdienlaiks katrā vietā.

Izveidojamo zemes gabalu veidu saraksts.

Noklusējuma vērtība: [‘sfc’, ‘500hpa’, ‘zonalmean’]

Iestatiet šo karodziņu uz True, lai mainītu vertikālā līmeņa secību “Ref” datu kopā (ja “Ref” sākas no atmosfēras augšdaļas, nevis virsmas).

Set this flag to True to reverse the vertical level ordering in the “Dev” dataset (in case “Dev” starts from the top of atmosphere instead of the surface).

This function generates plots of J-values using the JValues GEOS-Chem output files.

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 līmeņos parametrs. 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 pēc 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. Vērtība coordinates atribūts ir 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 virkne . 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 attribute. 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").

Ja an ass attribute is attached to an auxiliary coordinate variable, it can be used by applications in the same way the ass 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 ass attribute with any given value e.g. there must be no more than one ass attribute for X for any data variable. Note that if the ass 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 ass attribute of X vai Y vai a units 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 attribute. 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. If no 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 ass attribute with values X un 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) , un 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 attribute.

T(k,j,i) is associated with the coordinate values lon(j,i) , lat(j,i) , un 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) un lon(yc,xc) which are identified by the coordinates attribute.

Note that coordinate variables are also defined for the xc un yc dimensions. 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 attribute.

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 saspiest attribute, the grids stored in this format can still be handled, by an application that recognizes the coordinates attribute.

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.

If no 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 attribute. 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 attribute. 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 mainīgais. 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 standarta_vārds to the coordinate variable. The appropriate values of the standarta_vārds 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 un 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 un 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.

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.

Kur 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.

crs_wkt attribute is intended to act as a papildinājums 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 attribute. 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 attribute. 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 attribute.

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 un projection along with a few other arguments:

From_extent¶

From_circle¶

From_area_of_interest¶

From_ul_corner¶


Piemēri

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. Kas noticis? 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"

Hmm ... 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"