AMcoder - javascript, python, java, html, php, sql

Ինչպես փոխակերպել Lambert Conformal Conic նախագծումը lat/lng տասնորդական կետերի NetCDF-ով Java-ում

Ես օգտագործում եմ NetCDF 4 java գրադարանը unidata-ից՝ GRIB ֆայլերը կարդալու համար: GRIB ֆայլերի կառուցվածքը հետևյալն է.

  dimensions:
    x = 401;
    y = 301;
    time = 1;
  variables:
    int LambertConformal_Projection;
      :grid_mapping_name = "lambert_conformal_conic";
      :latitude_of_projection_origin = 46.12000274658203; // double
      :longitude_of_central_meridian = 14.815000534057617; // double
      :standard_parallel = 46.12000274658203; // double
      :earth_radius = 6367470.0; // double
      :_CoordinateTransformType = "Projection";
      :_CoordinateAxisTypes = "GeoX GeoY";

    float VAR219-0-219-170_surface(time=1, y=301, x=401);
      :long_name = "Unknown Parameter 219-0-219-170 @ Ground or water surface";
      :units = "";
      :missing_value = NaNf; // float
      :grid_mapping = "LambertConformal_Projection";
      :coordinates = "reftime time y x ";
      :Grib_Variable_Id = "VAR_219-0-219-170_L1";
      :Grib1_Center = 219; // int
      :Grib1_Subcenter = 0; // int
      :Grib1_TableVersion = 219; // int
      :Grib1_Parameter = 170; // int
      :Grib1_Level_Type = 1; // int
      :Grib1_Level_Desc = "Ground or water surface";

    float x(x=401);
      :standard_name = "projection_x_coordinate";
      :units = "km";
      :_CoordinateAxisType = "GeoX";

    float y(y=301);
      :standard_name = "projection_y_coordinate";
      :units = "km";
      :_CoordinateAxisType = "GeoY";

    double reftime;
      :units = "Minute since 2016-02-18T12:00:00Z";
      :standard_name = "forecast_reference_time";
      :long_name = "GRIB reference time";
      :calendar = "proleptic_gregorian";
      :_CoordinateAxisType = "RunTime";

    double time(time=1);
      :units = "Minute since 2016-02-18T12:00:00Z";
      :standard_name = "time";
      :long_name = "GRIB forecast or observation time";
      :calendar = "proleptic_gregorian";
      :_CoordinateAxisType = "Time";

  // global attributes:
  :Originating_or_generating_Center = "Ljubljana";
  :Originating_or_generating_Subcenter = "0";
  :GRIB_table_version = "0,219";
  :file_format = "GRIB-1";
  :Conventions = "CF-1.6";
  :history = "Read using CDM IOSP GribCollection v3";
  :featureType = "GRID";
  :_CoordSysBuilder = "ucar.nc2.dataset.conv.CF1Convention";
}

Ես կցանկանայի գրել ծրագիր, որը x-ը և y-ը փոխակերպում է lat/lng տասնորդական կետերի: Ես նոր եմ պլանավոր/գլոբուս քարտեզագրման մեջ:

15.04.2016

  • Այսպիսով, ի՞նչն է ձեզ խանգարում դա անել: Դեռ որևէ ջանք գործադրե՞լ եք: 15.04.2016
  • այո։ Ես փորձում էի գտնել օրինակ, թե ինչպես օգտագործել Projections-ը և Vertical Transforms-ը NetCDF Java գրադարանում, բայց ոչ մի հաջողություն: 15.04.2016
  • Ոչ, ես նկատի ունեմ. Դուք իրականում սկսել եք ինչ-որ կոդ գրել: Ես հասկանում եմ, որ java / ծրագրավորումն ընդհանրապես ձեր խնդիրը չէ, ճիշտ է: 15.04.2016
  • Ոչ, քանի որ ես չգիտեմ, թե որ պարամետրերն օգտագործել Projections և Vertical Transforms դասը: Ես գտա այս դասի հանրային CoordinateTransform makeCoordinateTransform, բայց չգիտեմ, թե ինչպես օգտագործել այն: 15.04.2016
  • Ահա ձեռնարկներ. Բաժին 5, ըստ երևույթին, վերաբերում է կոորդինատների փոխակերպումների unidata: ucar.edu/software/thredds/current/netcdf-java/tutorial 15.04.2016
  • stackoverflow.com/a/7338149/982149 Սա նույնպես կարող է հետաքրքիր լինել ձեզ համար: 15.04.2016

Պատասխանները:


1

Շնորհակալություն Fildor հղումների համար: Ինձ անհրաժեշտ էր (և պարզեցի, թե ինչպես) օգտագործել projToLatLon մեթոդը: Ահա թե ինչպես ես ստացա լայնությունը և երկայնությունը x և y արժեքներից.

    NetcdfDataset gid = 
    GridDataset gds = ucar.nc2.dt.grid.GridDataset.open("file.GRB");  
    GridCoordSystem gcs =  gds.getGrids().get(0).getCoordinateSystem();
    ProjectionImpl proj = gcs.getProjection();
    Variable vr = gid.findVariable("x");
    Variable vr2 = gid.findVariable("y");
    Array data1 = vr.read();
    Array data2 = vr2.read();

    int[] shape = data1.getShape();
    int[] shape2 = data2.getShape();
    Index index = data1.getIndex();
    Index index2 = data2.getIndex();
    double dval;
    double dval2; 

    for (int j=0; j<shape2[0]; j++)
       for (int i=0; i<shape[0]; i++){
          dval = data1.getDouble(index.set(i));
          dval2 = data2.getDouble(index2.set(j));
          System.out.println(dval + " " + dval2 + " " + proj.projToLatLon(dval, dval2).getLatitude() + "  " + proj.projToLatLon(dval, dval2).getLongitude() );
    }        
22.04.2016
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..