Browse Source

Fixed problem with pyngl plotting and unicode strings for resources

main prebeta.0.1
Bill Ladwig 9 years ago
parent
commit
59e3c8eb8e
  1. 38
      src/wrf/projection.py
  2. 15
      test/projtest.py

38
src/wrf/projection.py

@ -210,9 +210,9 @@ class LambertConformal(WrfProj):
else self.truelat2) else self.truelat2)
_pyngl = Resources() _pyngl = Resources()
_pyngl.mpProjection = "LambertConformal" _pyngl.mpProjection = bytes("LambertConformal")
_pyngl.mpDataBaseVersion = "MediumRes" _pyngl.mpDataBaseVersion = bytes("MediumRes")
_pyngl.mpLimitMode = "Corners" _pyngl.mpLimitMode = bytes("Corners")
_pyngl.mpLeftCornerLonF = self.ll_lon _pyngl.mpLeftCornerLonF = self.ll_lon
_pyngl.mpLeftCornerLatF = self.ll_lat _pyngl.mpLeftCornerLatF = self.ll_lat
_pyngl.mpRightCornerLonF = self.ur_lon _pyngl.mpRightCornerLonF = self.ur_lon
@ -257,7 +257,7 @@ class LambertConformal(WrfProj):
def _cart_extents(self): def _cart_extents(self):
# Need to modify the extents for the new projection # Need to modify the extents for the new projection
pc = crs.PlateCarree() pc = crs.PlateCarree()
xs, ys, zs = self._cartopy.transform_points(pc, xs, ys, zs = self._cartopy().transform_points(pc,
np.array([self.ll_lon, self.ur_lon]), np.array([self.ll_lon, self.ur_lon]),
np.array([self.ll_lat, self.ur_lat])).T np.array([self.ll_lat, self.ur_lat])).T
@ -308,9 +308,9 @@ class Mercator(WrfProj):
return None return None
_pyngl = Resources() _pyngl = Resources()
_pyngl.mpProjection = "Mercator" _pyngl.mpProjection = bytes("Mercator")
_pyngl.mpDataBaseVersion = "MediumRes" _pyngl.mpDataBaseVersion = bytes("MediumRes")
_pyngl.mpLimitMode = "Corners" _pyngl.mpLimitMode = bytes("Corners")
_pyngl.mpLeftCornerLonF = self.ll_lon _pyngl.mpLeftCornerLonF = self.ll_lon
_pyngl.mpLeftCornerLatF = self.ll_lat _pyngl.mpLeftCornerLatF = self.ll_lat
_pyngl.mpRightCornerLonF = self.ur_lon _pyngl.mpRightCornerLonF = self.ur_lon
@ -361,7 +361,7 @@ class Mercator(WrfProj):
# Need to modify the extents for the new projection # Need to modify the extents for the new projection
pc = crs.PlateCarree() pc = crs.PlateCarree()
xs, ys, zs = self._cartopy.transform_points(pc, xs, ys, zs = self._cartopy().transform_points(pc,
np.array([self.ll_lon, self.ur_lon]), np.array([self.ll_lon, self.ur_lon]),
np.array([self.ll_lat, self.ur_lat])).T np.array([self.ll_lat, self.ur_lat])).T
@ -409,9 +409,9 @@ class PolarStereographic(WrfProj):
return None return None
_pyngl = Resources() _pyngl = Resources()
_pyngl.mpProjection = "Stereographic" _pyngl.mpProjection = bytes("Stereographic")
_pyngl.mpDataBaseVersion = "MediumRes" _pyngl.mpDataBaseVersion = bytes("MediumRes")
_pyngl.mpLimitMode = "Corners" _pyngl.mpLimitMode = bytes("Corners")
_pyngl.mpLeftCornerLonF = self.ll_lon _pyngl.mpLeftCornerLonF = self.ll_lon
_pyngl.mpLeftCornerLatF = self.ll_lat _pyngl.mpLeftCornerLatF = self.ll_lat
_pyngl.mpRightCornerLonF = self.ur_lon _pyngl.mpRightCornerLonF = self.ur_lon
@ -458,7 +458,7 @@ class PolarStereographic(WrfProj):
def _cart_extents(self): def _cart_extents(self):
# Need to modify the extents for the new projection # Need to modify the extents for the new projection
pc = crs.PlateCarree() pc = crs.PlateCarree()
xs, ys, zs = self._cartopy.transform_points(pc, xs, ys, zs = self._cartopy().transform_points(pc,
np.array([self.ll_lon, self.ur_lon]), np.array([self.ll_lon, self.ur_lon]),
np.array([self.ll_lat, self.ur_lat])).T np.array([self.ll_lat, self.ur_lat])).T
@ -499,9 +499,9 @@ class LatLon(WrfProj):
return None return None
_pyngl = Resources() _pyngl = Resources()
_pyngl.mpProjection = "CylindricalEquidistant" _pyngl.mpProjection = bytes("CylindricalEquidistant")
_pyngl.mpDataBaseVersion = "MediumRes" _pyngl.mpDataBaseVersion = bytes("MediumRes")
_pyngl.mpLimitMode = "Corners" _pyngl.mpLimitMode = bytes("Corners")
_pyngl.mpLeftCornerLonF = self.ll_lon _pyngl.mpLeftCornerLonF = self.ll_lon
_pyngl.mpLeftCornerLatF = self.ll_lat _pyngl.mpLeftCornerLatF = self.ll_lat
_pyngl.mpRightCornerLonF = self.ur_lon _pyngl.mpRightCornerLonF = self.ur_lon
@ -647,9 +647,9 @@ class RotatedLatLon(WrfProj):
return None return None
_pyngl = Resources() _pyngl = Resources()
_pyngl.mpProjection = "CylindricalEquidistant" _pyngl.mpProjection = bytes("CylindricalEquidistant")
_pyngl.mpDataBaseVersion = "MediumRes" _pyngl.mpDataBaseVersion = bytes("MediumRes")
_pyngl.mpLimitMode = "Corners" _pyngl.mpLimitMode = bytes("Corners")
_pyngl.mpLeftCornerLonF = self.ll_lon _pyngl.mpLeftCornerLonF = self.ll_lon
_pyngl.mpLeftCornerLatF = self.ll_lat _pyngl.mpLeftCornerLatF = self.ll_lat
_pyngl.mpRightCornerLonF = self.ur_lon _pyngl.mpRightCornerLonF = self.ur_lon
@ -693,7 +693,7 @@ class RotatedLatLon(WrfProj):
def _cart_extents(self): def _cart_extents(self):
# Need to modify the extents for the new projection # Need to modify the extents for the new projection
pc = crs.PlateCarree() pc = crs.PlateCarree()
xs, ys, zs = self._cartopy.transform_points(pc, xs, ys, zs = self._cartopy().transform_points(pc,
np.array([self.ll_lon, self.ur_lon]), np.array([self.ll_lon, self.ur_lon]),
np.array([self.ll_lat, self.ur_lat])).T np.array([self.ll_lat, self.ur_lat])).T

15
test/projtest.py

@ -32,6 +32,7 @@ from wrf.projection import getproj, RotatedLatLon, PolarStereographic
FILE_DIR = "/Users/ladwig/Documents/wrf_files/" FILE_DIR = "/Users/ladwig/Documents/wrf_files/"
WRF_FILES = [ WRF_FILES = [
join(FILE_DIR, "norway", "geo_em.d01.nc"),
join(FILE_DIR, "rotated_pole", "EAS_geo_em.d01.nc"), join(FILE_DIR, "rotated_pole", "EAS_geo_em.d01.nc"),
join(FILE_DIR, "rotated_pole", "EUR_geo_em.d01.nc"), join(FILE_DIR, "rotated_pole", "EUR_geo_em.d01.nc"),
join(FILE_DIR,"wrfout_d01_2016-02-25_18_00_00"), join(FILE_DIR,"wrfout_d01_2016-02-25_18_00_00"),
@ -55,7 +56,7 @@ def nz_proj():
"POLE_LAT" : 48.185131, "POLE_LAT" : 48.185131,
"POLE_LON" : 0.0} "POLE_LON" : 0.0}
return lats, lons, RotLatLonProj(lats=lats, lons=lons, **params) return lats, lons, RotatedLatLon(lats=lats, lons=lons, **params)
def argentina_proj(): def argentina_proj():
lats = np.array([[-57.144064, -57.144064], lats = np.array([[-57.144064, -57.144064],
@ -73,7 +74,7 @@ def argentina_proj():
"POLE_LAT" : 90 + -39.222954, "POLE_LAT" : 90 + -39.222954,
"POLE_LON" : 0.0} "POLE_LON" : 0.0}
return lats, lons, RotLatLonProj(lats=lats, lons=lons, **params) return lats, lons, RotatedLatLon(lats=lats, lons=lons, **params)
def south_polar_proj(): def south_polar_proj():
lats = np.array([[-30.0,-30.0], lats = np.array([[-30.0,-30.0],
@ -88,7 +89,7 @@ def south_polar_proj():
"MOAD_CEN_LAT" : -90.0, "MOAD_CEN_LAT" : -90.0,
"STAND_LON" : 0} "STAND_LON" : 0}
return lats, lons, PolarStereographicProj(lats=lats, lons=lons, **params) return lats, lons, PolarStereographic(lats=lats, lons=lons, **params)
def north_polar_proj(): def north_polar_proj():
lats = np.array([[30.0,30.0], lats = np.array([[30.0,30.0],
@ -103,7 +104,7 @@ def north_polar_proj():
"MOAD_CEN_LAT" : 90.0, "MOAD_CEN_LAT" : 90.0,
"STAND_LON" : 10} "STAND_LON" : 10}
return lats, lons, PolarStereographicProj(lats=lats, lons=lons, **params) return lats, lons, PolarStereographic(lats=lats, lons=lons, **params)
def dateline_rot_proj(): def dateline_rot_proj():
@ -121,7 +122,7 @@ def dateline_rot_proj():
"STAND_LON" : 173.143792, "STAND_LON" : 173.143792,
"POLE_LAT" : 90.0 - 66.335764, "POLE_LAT" : 90.0 - 66.335764,
"POLE_LON" : 180.0} "POLE_LON" : 180.0}
return lats, lons, RotLatLonProj(lats=lats, lons=lons, **params) return lats, lons, RotatedLatLon(lats=lats, lons=lons, **params)
class WRFProjTest(ut.TestCase): class WRFProjTest(ut.TestCase):
longMessage = True longMessage = True
@ -148,8 +149,8 @@ def make_test(wrf_file=None, fixed_case=None):
print ("wrf proj4: {}".format(proj.proj4())) print ("wrf proj4: {}".format(proj.proj4()))
if PYNGL: if PYNGL:
# PyNGL plotting # PyNGL plotting
wks_type = "png" wks_type = bytes("png")
wks = Ngl.open_wks(wks_type,"pyngl_{}".format(name_suffix)) wks = Ngl.open_wks(wks_type,bytes("pyngl_{}".format(name_suffix)))
mpres = proj.pyngl() mpres = proj.pyngl()
map = Ngl.map(wks,mpres) map = Ngl.map(wks,mpres)

Loading…
Cancel
Save