@@ -383,6 +383,7 @@ def _extract_extent(ds, variable):
383
383
return ll_x ,ur_x ,ll_y ,ur_y
384
384
except KeyError :
385
385
pass
386
+ logger .warning (f"Fail to detect dimmension names from hardcoded values. Try to find dim names from variable" )
386
387
dim_names = _find_dim_names (ds , variable )
387
388
try :
388
389
ll_x = min (ds [variable ].coords [dim_names [0 ]].data )
@@ -396,7 +397,6 @@ def _extract_extent(ds, variable):
396
397
raise HTTPError (response_code = '500 Internal Server Error' , response = f"Could not recognize coords for { variable } . Valid for this service are { x_l } and { y_l } or { dim_names } (found in dataset)." )
397
398
398
399
def _find_dim_names (ds , variable ):
399
- logger .warning (f"Fail to detect from hardcode. Try to find dim names from variable" )
400
400
dims = ds [variable ].dims
401
401
dim_names = []
402
402
for dim in reversed (dims [1 :]):
@@ -557,6 +557,7 @@ def _generate_getcapabilities(layer, ds, variable, grid_mapping_cache, netcdf_fi
557
557
logger .debug (f"wms_title { wms_title } " )
558
558
layer .metadata .set ("wms_title" , f"{ wms_title } " )
559
559
560
+ ll_x , ll_y , ur_x , ur_y = _adjust_extent_to_units (ds , variable , grid_mapping_cache , grid_mapping_name , ll_x , ll_y , ur_x , ur_y )
560
561
layer .metadata .set ("wms_extent" , f"{ ll_x } { ll_y } { ur_x } { ur_y } " )
561
562
dims_list = []
562
563
if 'time' not in ds [variable ].dims :
@@ -637,6 +638,23 @@ def _generate_getcapabilities(layer, ds, variable, grid_mapping_cache, netcdf_fi
637
638
style1 .maxcolor = mapscript .colorObj (red = 255 , green = 255 , blue = 255 )
638
639
return True
639
640
641
+ def _adjust_extent_to_units (ds , variable , grid_mapping_cache , grid_mapping_name , ll_x , ll_y , ur_x , ur_y ):
642
+ dim_name = _find_dim_names (ds , variable )
643
+ try :
644
+ if "units=m" in grid_mapping_cache [grid_mapping_name ]:
645
+ if ds [variable ].coords [dim_name [0 ]].attrs ['units' ] == 'km' :
646
+ logger .debug (f"adjust extent to units VARIBLE: { variable } { dim_name [0 ]} from km to m" )
647
+ ll_x *= 1000
648
+ ur_x *= 1000
649
+ if ds [variable ].coords [dim_name [1 ]].attrs ['units' ] == 'km' :
650
+ logger .debug (f"adjust extent to units VARIBLE: { variable } { dim_name [1 ]} from km to m" )
651
+ ll_y *= 1000
652
+ ur_y *= 1000
653
+ except (KeyError , AttributeError , IndexError ):
654
+ logger .warning (f"Could not find units for variable { variable } dimension { dim_name } " )
655
+ pass
656
+ return ll_x , ll_y , ur_x , ur_y
657
+
640
658
def _generate_getcapabilities_vector (layer , ds , variable , grid_mapping_cache , netcdf_file , direction_speed = False , last_ds = None , netcdf_files = [], product_config = None ):
641
659
"""Generate getcapabilities for vector fiels for the netcdf file."""
642
660
logger .debug ("ADDING vector" )
@@ -675,6 +693,7 @@ def _generate_getcapabilities_vector(layer, ds, variable, grid_mapping_cache, ne
675
693
layer .name = f'{ vector_variable_name } _vector_from_direction_and_speed'
676
694
layer .metadata .set ("wms_title" , f'{ vector_variable_name } vector from direction and speed' )
677
695
layer .setConnectionType (mapscript .MS_CONTOUR , "" )
696
+ ll_x , ll_y , ur_x , ur_y = _adjust_extent_to_units (ds , variable , grid_mapping_cache , grid_mapping_name , ll_x , ll_y , ur_x , ur_y )
678
697
layer .metadata .set ("wms_extent" , f"{ ll_x } { ll_y } { ur_x } { ur_y } " )
679
698
dims_list = []
680
699
if 'time' not in ds [variable ].dims :
@@ -980,6 +999,7 @@ def _generate_layer(layer, ds, grid_mapping_cache, netcdf_file, qp, map_obj, pro
980
999
981
1000
set_scale_processing_key = False
982
1001
layer .setProjection (grid_mapping_cache [grid_mapping_name ])
1002
+
983
1003
if "units=km" in grid_mapping_cache [grid_mapping_name ]:
984
1004
layer .units = mapscript .MS_KILOMETERS
985
1005
elif "units=m" in grid_mapping_cache [grid_mapping_name ]:
@@ -1263,6 +1283,7 @@ def _generate_layer(layer, ds, grid_mapping_cache, netcdf_file, qp, map_obj, pro
1263
1283
optimal_bb_area = None
1264
1284
else :
1265
1285
ll_x , ur_x , ll_y , ur_y = _extract_extent (ds , actual_variable )
1286
+ ll_x , ll_y , ur_x , ur_y = _adjust_extent_to_units (ds , actual_variable , grid_mapping_cache , grid_mapping_name , ll_x , ll_y , ur_x , ur_y )
1266
1287
logger .debug (f"ll ur { ll_x } { ll_y } { ur_x } { ur_y } " )
1267
1288
layer .metadata .set ("wms_extent" , f"{ ll_x } { ll_y } { ur_x } { ur_y } " )
1268
1289
0 commit comments