@@ -319,9 +319,9 @@ def albers_conical_equal_area_from_cf(self, crs):
319319 iter (kwargs ['standard_parallels' ])
320320 except TypeError :
321321 kwargs ['standard_parallels' ] = [kwargs ['standard_parallels' ]]
322- if getattr (crs , 'false_easting' ):
322+ if getattr (crs , 'false_easting' , None ):
323323 kwargs ['false_easting' ] = crs .false_easting
324- if getattr (crs , 'false_northing' ):
324+ if getattr (crs , 'false_northing' , None ):
325325 kwargs ['false_northing' ] = crs .false_northing
326326 return ccrs .AlbersEqualArea (** kwargs )
327327
@@ -330,9 +330,9 @@ def azimuthal_equidistant_from_cf(self, crs):
330330 central_longitude = crs .longitude_of_projection_origin ,
331331 central_latitude = crs .latitude_of_projection_origin ,
332332 )
333- if getattr (crs , 'false_easting' ):
333+ if getattr (crs , 'false_easting' , None ):
334334 kwargs ['false_easting' ] = crs .false_easting
335- if getattr (crs , 'false_northing' ):
335+ if getattr (crs , 'false_northing' , None ):
336336 kwargs ['false_northing' ] = crs .false_northing
337337 return ccrs .AzimuthalEquidistant (** kwargs )
338338
@@ -342,9 +342,9 @@ def geostationary_from_cf(self, crs):
342342 satellite_height = crs .perspective_point_height ,
343343 sweep_axis = crs .sweep_angle_axis ,
344344 )
345- if getattr (crs , 'false_easting' ):
345+ if getattr (crs , 'false_easting' , None ):
346346 kwargs ['false_easting' ] = crs .false_easting
347- if getattr (crs , 'false_northing' ):
347+ if getattr (crs , 'false_northing' , None ):
348348 kwargs ['false_northing' ] = crs .false_northing
349349 return ccrs .Geostationary (** kwargs )
350350
@@ -353,9 +353,9 @@ def lambert_azimuthal_equal_area_from_cf(self, crs):
353353 central_longitude = crs .longitude_of_projection_origin ,
354354 central_latitude = crs .latitude_of_projection_origin ,
355355 )
356- if getattr (crs , 'false_easting' ):
356+ if getattr (crs , 'false_easting' , None ):
357357 kwargs ['false_easting' ] = crs .false_easting
358- if getattr (crs , 'false_northing' ):
358+ if getattr (crs , 'false_northing' , None ):
359359 kwargs ['false_northing' ] = crs .false_northing
360360 return ccrs .LambertAzimuthalEqualArea (** kwargs )
361361
@@ -369,9 +369,9 @@ def lambert_conformal_conic_from_cf(self, crs):
369369 iter (kwargs ['standard_parallels' ])
370370 except TypeError :
371371 kwargs ['standard_parallels' ] = [kwargs ['standard_parallels' ]]
372- if getattr (crs , 'false_easting' ):
372+ if getattr (crs , 'false_easting' , None ):
373373 kwargs ['false_easting' ] = crs .false_easting
374- if getattr (crs , 'false_northing' ):
374+ if getattr (crs , 'false_northing' , None ):
375375 kwargs ['false_northing' ] = crs .false_northing
376376 return ccrs .LambertConformal (** kwargs )
377377
@@ -390,9 +390,9 @@ def mercator_from_cf(self, crs):
390390 )
391391 if hasattr (crs , 'scale_factor_at_projection_origin' ):
392392 kwargs ['scale_factor' ] = crs .scale_factor_at_projection_origin
393- if getattr (crs , 'false_easting' ):
393+ if getattr (crs , 'false_easting' , None ):
394394 kwargs ['false_easting' ] = crs .false_easting
395- if getattr (crs , 'false_northing' ):
395+ if getattr (crs , 'false_northing' , None ):
396396 kwargs ['false_northing' ] = crs .false_northing
397397 return ccrs .Mercator (** kwargs )
398398
@@ -427,9 +427,9 @@ def sinusoidal_from_cf(self, crs):
427427 kwargs = dict (
428428 central_longitude = crs .longitude_of_central_meridian ,
429429 )
430- if getattr (crs , 'false_easting' ):
430+ if getattr (crs , 'false_easting' , None ):
431431 kwargs ['false_easting' ] = crs .false_easting
432- if getattr (crs , 'false_northing' ):
432+ if getattr (crs , 'false_northing' , None ):
433433 kwargs ['false_northing' ] = crs .false_northing
434434 return ccrs .Sinusoidal (** kwargs )
435435
@@ -439,9 +439,9 @@ def stereographic_from_cf(self, crs):
439439 central_longitude = crs .longitude_of_projection_origin ,
440440 scale_factor = crs .scale_factor_at_projection_origin
441441 )
442- if getattr (crs , 'false_easting' ):
442+ if getattr (crs , 'false_easting' , None ):
443443 kwargs ['false_easting' ] = crs .false_easting
444- if getattr (crs , 'false_northing' ):
444+ if getattr (crs , 'false_northing' , None ):
445445 kwargs ['false_northing' ] = crs .false_northing
446446 return ccrs .Stereographic (** kwargs )
447447
@@ -451,9 +451,9 @@ def transverse_mercator_from_cf(self, crs):
451451 central_latitude = crs .latitude_of_projection_origin ,
452452 scale_factor = crs .scale_factor_at_central_meridian ,
453453 )
454- if getattr (crs , 'false_easting' ):
454+ if getattr (crs , 'false_easting' , None ):
455455 kwargs ['false_easting' ] = crs .false_easting
456- if getattr (crs , 'false_northing' ):
456+ if getattr (crs , 'false_northing' , None ):
457457 kwargs ['false_northing' ] = crs .false_northing
458458 return ccrs .TransverseMercator (** kwargs )
459459
@@ -2047,10 +2047,6 @@ class MapPlotter(psyps.Base2D):
20472047 """Base plotter for visualizing data on a map
20482048 """
20492049
2050- #: Boolean that is True if coordinates with units in radian should be
2051- #: converted to degrees
2052- convert_radian = True
2053-
20542050 _rcparams_string = ['plotter.maps.' ]
20552051
20562052 background = MapBackground ('background' )
@@ -2093,6 +2089,37 @@ def ax(self):
20932089 def ax (self , value ):
20942090 self ._ax = value
20952091
2092+ @docstrings .dedent
2093+ def convert_coordinate (self , coord , * variables ):
2094+ """Convert a coordinate from radian to degree.
2095+
2096+ This method checks if the coordinate or one of the given variables has
2097+ units in radian. If yes, the given `coord` is converted to degree.
2098+
2099+ Parameters
2100+ ----------
2101+ %(Formatoption.convert_coordinate.parameters)s
2102+
2103+ Returns
2104+ -------
2105+ %(Formatoption.convert_coordinate.returns)s
2106+ """
2107+
2108+ def in_rad (var ):
2109+ return var .attrs .get ('units' , '' ).startswith ('radian' )
2110+
2111+ def in_km (var ):
2112+ return var .attrs .get ('units' , '' ) == "km"
2113+
2114+ if any (map (in_rad , chain ([coord ], variables ))):
2115+ coord = coord .copy (data = coord * 180. / np .pi )
2116+ coord .attrs ["units" ] = "degrees"
2117+ elif any (map (in_km , chain ([coord ], variables ))):
2118+ coord = coord .copy (data = coord * 1000 )
2119+ coord .attrs ["units" ] = "m"
2120+
2121+ return coord
2122+
20962123
20972124class FieldPlotter (psyps .Simple2DBase , MapPlotter , psyps .BasePlotter ):
20982125 """Plotter for 2D scalar fields on a map
0 commit comments