private void makeMercator ( ) { /** * Construct a Mercator Projection. * @param lon0 longitude of origin (degrees) * @param par standard parallel (degrees). cylinder cuts earth at this latitude. */ double Latin = gds . getDouble ( GridDefRecord . LAD ) ; // name depends on Grib version 1 or 2 if ( Double . isNaN ( Latin ) ) Latin = gds . getDouble ( GridDefRecord . LATIN ) ; double Lo1 = gds . getDouble ( GridDefRecord . LO1 ) ; //gds.Lo1; double La1 = gds . getDouble ( GridDefRecord . LA1 ) ; //gds.La1; // put longitude origin at first point - doesnt actually matter proj = new Mercator ( Lo1 , Latin ) ; // find out where ProjectionPoint startP = proj . latLonToProj ( new LatLonPointImpl ( La1 , Lo1 ) ) ; startx = startP . getX ( ) ; starty = startP . getY ( ) ; if ( Double . isNaN ( getDxInKm ( ) ) ) { setDxDy ( startx , starty , proj ) ; } attributes . add ( new Attribute ( GridCF . GRID_MAPPING_NAME , "mercator" ) ) ; attributes . add ( new Attribute ( GridCF . STANDARD_PARALLEL , Latin ) ) ; attributes . add ( new Attribute ( GridCF . LONGITUDE_OF_PROJECTION_ORIGIN , Lo1 ) ) ; if ( GridServiceProvider . debugProj ) { double Lo2 = gds . getDouble ( GridDefRecord . LO2 ) ; if ( Lo2 < Lo1 ) Lo2 += 360 ; double La2 = gds . getDouble ( GridDefRecord . LA2 ) ; LatLonPointImpl endLL = new LatLonPointImpl ( La2 , Lo2 ) ; System . out . println ( "GridHorizCoordSys.makeMercator: end at latlon= " + endLL ) ; ProjectionPointImpl endPP = ( ProjectionPointImpl ) proj . latLonToProj ( endLL ) ; System . out . println ( " start at proj coord " + new ProjectionPointImpl ( startx , starty ) ) ; System . out . println ( " end at proj coord " + endPP ) ; double endx = startx + ( getNx ( ) - 1 ) * getDxInKm ( ) ; double endy = starty + ( getNy ( ) - 1 ) * getDyInKm ( ) ; System . out . println ( " should be x=" + endx + " y=" + endy ) ; } }
Make a Mercator projection