visad/src/main/java/ucar/nc2/iosp/gempak/NavigationBlock.java
private void setParams() {
        String angle1 = String.valueOf(vals[10]);
        String angle2 = String.valueOf(vals[11]);
        String angle3 = String.valueOf(vals[12]);
        String lllat  = String.valueOf(vals[6]);
        String lllon  = String.valueOf(vals[7]);
        String urlat  = String.valueOf(vals[8]);
        String urlon  = String.valueOf(vals[9]);
        addParam(NX, String.valueOf(vals[4]));
        addParam(NY, String.valueOf(vals[5]));
        addParam(LA1, lllat);
        addParam(LO1, lllon);
        addParam(LA2, urlat);
        addParam(LO2, urlon);
      switch (proj) {
        case "STR":
        case "NPS":
        case "SPS":
          addParam(LOV, angle2);
          // TODO:  better to just set pole?
          if (proj.equals("SPS")) {
            addParam("NpProj", "false");
          }
          break;
        case "LCC":
        case "SCC":
          addParam(LATIN1, angle1);
          addParam(LOV, angle2);
          addParam(LATIN2, angle3);
          // TODO: test this
          break;
        case "MER":
        case "MCD":
          String standardLat;
          if (vals[10] == 0) {  // use average latitude
            float lat = (vals[8] + vals[6]) / 2;
            standardLat = String.valueOf(lat);
          } else {
            standardLat = angle1;
          }
          addParam("Latin", standardLat);
          addParam(LOV, angle2);
          break;
        case "CED":
          double lllatv = vals[6];
          double lllonv = vals[7];
          double urlatv = vals[8];
          double urlonv = vals[9];
          if (urlonv <= lllonv) {
            urlonv += 360.;
          }
          double dx = Math.abs((urlonv - lllonv) / (vals[4] - 1));
          double dy = Math.abs((urlatv - lllatv) / (vals[5] - 1));
          addParam(DX, String.valueOf(dx));
          addParam(DY, String.valueOf(dy));
          addParam(LO2, String.valueOf(urlonv));


          break;
      }
    }
private void setParams() {
        String angle1 = String.valueOf(vals[10]);
        String angle2 = String.valueOf(vals[11]);
        String angle3 = String.valueOf(vals[12]);
        String lllat  = String.valueOf(vals[6]);
        String lllon  = String.valueOf(vals[7]);
        String urlat  = String.valueOf(vals[8]);
        String urlon  = String.valueOf(vals[9]);
        addParam(NX, String.valueOf(vals[4]));
        addParam(NY, String.valueOf(vals[5]));
        addParam(LA1, lllat);
        addParam(LO1, lllon);
        addParam(LA2, urlat);
        addParam(LO2, urlon);
      switch (proj) {
        case "STR":
        case "NPS":
        case "SPS":
          addParam(LOV, angle2);
          // TODO:  better to just set pole?
          if (proj.equals("SPS")) {
            addParam("NpProj", "false");
          }
          break;
        case "LCC":
        case "SCC":
          addParam(LATIN1, angle1);
          addParam(LOV, angle2);
          addParam(LATIN2, angle3);
          // TODO: test this
          break;
        case "MER":
        case "MCD":
          String standardLat;
          if (vals[10] == 0) {  // use average latitude
            float lat = (vals[8] + vals[6]) / 2;
            standardLat = String.valueOf(lat);
          } else {
            standardLat = angle1;
          }
          addParam("Latin", standardLat);
          addParam(LOV, angle2);
          break;
        case "CED":
          double lllatv = vals[6];
          double lllonv = vals[7];
          double urlatv = vals[8];
          double urlonv = vals[9];
          if (urlonv <= lllonv) {
            urlonv += 360.;
          }
          double dx = Math.abs((urlonv - lllonv) / (vals[4] - 1));
          double dy = Math.abs((urlatv - lllatv) / (vals[5] - 1));
          addParam(DX, String.valueOf(dx));
          addParam(DY, String.valueOf(dy));
          addParam(LO2, String.valueOf(urlonv));


          break;
      }
    }
private void setParams ( ) { String angle1 = String . valueOf ( vals [ 10 ] ) ; String angle2 = String . valueOf ( vals [ 11 ] ) ; String angle3 = String . valueOf ( vals [ 12 ] ) ; String lllat = String . valueOf ( vals [ 6 ] ) ; String lllon = String . valueOf ( vals [ 7 ] ) ; String urlat = String . valueOf ( vals [ 8 ] ) ; String urlon = String . valueOf ( vals [ 9 ] ) ; addParam ( NX , String . valueOf ( vals [ 4 ] ) ) ; addParam ( NY , String . valueOf ( vals [ 5 ] ) ) ; addParam ( LA1 , lllat ) ; addParam ( LO1 , lllon ) ; addParam ( LA2 , urlat ) ; addParam ( LO2 , urlon ) ; switch ( proj ) { case "STR" : case "NPS" : case "SPS" : addParam ( LOV , angle2 ) ; // TODO:  better to just set pole? if ( proj . equals ( "SPS" ) ) { addParam ( "NpProj" , "false" ) ; } break ; case "LCC" : case "SCC" : addParam ( LATIN1 , angle1 ) ; addParam ( LOV , angle2 ) ; addParam ( LATIN2 , angle3 ) ; // TODO: test this break ; case "MER" : case "MCD" : String standardLat ; if ( vals [ 10 ] == 0 ) { // use average latitude float lat = ( vals [ 8 ] + vals [ 6 ] ) / 2 ; standardLat = String . valueOf ( lat ) ; } else { standardLat = angle1 ; } addParam ( "Latin" , standardLat ) ; addParam ( LOV , angle2 ) ; break ; case "CED" : double lllatv = vals [ 6 ] ; double lllonv = vals [ 7 ] ; double urlatv = vals [ 8 ] ; double urlonv = vals [ 9 ] ; if ( urlonv <= lllonv ) { urlonv += 360. ; } double dx = Math . abs ( ( urlonv - lllonv ) / ( vals [ 4 ] - 1 ) ) ; double dy = Math . abs ( ( urlatv - lllatv ) / ( vals [ 5 ] - 1 ) ) ; addParam ( DX , String . valueOf ( dx ) ) ; addParam ( DY , String . valueOf ( dy ) ) ; addParam ( LO2 , String . valueOf ( urlonv ) ) ; break ; } }
Set the parameters for the GDS.
TODO Add the following:
The following simple map projections may be specified:

NOR     North Orthographic
SOR     South Orthographic
MER     (CYL)   Mercator
CED     (CYL)   Cylindrical Equidistant
MCD     (CYL)   Modified Cylindrical Equidistant
STR     (AZM)   Polar Stereographic
AED     (AZM)   Azimuthal Equidistant
ORT     (AZM)   Orthographic
LEA     (AZM)   Lambert equal area
GNO     (AZM)   Gnomonic
</TODO>

In addition for full map projections, three angles MUST be specified
in PROJ.  The angles have the following meanings for the different
projection classes:

CYL     angle1 -- latitude of origin on the projection cylinder
0 = Equator
angle2 -- longitude of origin on the projection cylinder
0 = Greenwich meridian
angle3 -- angle to skew the projection by rotation of
the cylindrical surface of projection about
the line from the Earth's center passing
through the origin point. This results in
curved latitude and longitude lines.

If angle3 is greater than 360 or less than -360
degrees, then the rectangular Cartesian coordinate
system on the projection plane is rotated
+/- |angle3|-360 degrees. This results in
latitude and longitude lines that are skewed
with respect to the edge of the map.  This option
is only valid when specifying a map projection and
is not available for grid projections.

The difference between |angle3| < 360 and
|angle3| > 360 is that, in the former case,
the rotation is applied to the developable
cylindrical surface before projection and
subsequent development; while, in the latter
case, the rotation is applied to the Cartesian
coordinate system in the plane after development.
Development here refers to the mathematical
flattening of the surface of projection into a
planar surface.

Exception:

MCD     angle1 -- scaling factor for latitude
0 = default scaling (1/cos(avglat))
angle2 -- longitude of origin (center longitude)
angle3 -- not used


AZM     angle1 -- latitude of the projection's point of tangency
angle2 -- longitude of the projection's point of tangency
angle3 -- angle to skew the projection by rotation about
the line from the Earth's center passing
through the point of tangency

CON     angle1 -- standard latitude 1
angle2 -- polon is the central longitude
angle3 -- standard latitude 2
Set the parameters for the GDS . TODO Add the following : The following simple map projections may be specified :