@@ -119,8 +119,37 @@ def execute(self, **kwargs):
119
119
"missing_value" ,
120
120
):
121
121
setattr (out_dimension_variable , attribute , getattr (in_dimension_variable , attribute ))
122
+
123
+ for ncattr in in_dimension_variable .ncattrs ():
124
+ out_dimension_variable .setncattr (ncattr , in_dimension_variable .getncattr (ncattr ))
125
+
122
126
out_dimension_variable [:] = in_dimension_variable [:]
123
127
128
+ # Discover CRS metadata (ESRI and CF)
129
+ esri_pe = None
130
+ grid_mapping = None
131
+ for variable in dim_dataset .variables .values ():
132
+ if "esri_pe_string" in variable .ncattrs ():
133
+ esri_pe = variable .getncattr ("esri_pe_string" )
134
+ if "grid_mapping" in variable .ncattrs ():
135
+ grid_mapping_name = variable .getncattr ("grid_mapping" )
136
+ if grid_mapping_name in dim_dataset .variables :
137
+ grid_mapping = grid_mapping_name
138
+ grid_mapping_in = dim_dataset .variables [grid_mapping ]
139
+
140
+ for dimension in grid_mapping_in .dimensions :
141
+ if dimension not in dataset .dimensions :
142
+ dataset .createDimension (dimension , dim_dataset .dimensions [dimension ].size )
143
+
144
+ grid_mapping_out = dataset .createVariable (
145
+ grid_mapping , grid_mapping_in .dtype , grid_mapping_in .dimensions
146
+ )
147
+
148
+ for ncattr in grid_mapping_in .ncattrs ():
149
+ grid_mapping_out .setncattr (ncattr , grid_mapping_in .getncattr (ncattr ))
150
+
151
+ break
152
+
124
153
mask = numpy .copy (arrays [0 ].mask )
125
154
for arr in arrays [1 :]:
126
155
mask |= arr .mask
@@ -136,4 +165,10 @@ def execute(self, **kwargs):
136
165
)
137
166
variable [:] = numpy .ma .MaskedArray (command .result .data , mask )
138
167
168
+ # Apply CRS metadata
169
+ if esri_pe :
170
+ variable .setncattr ("esri_pe_string" , esri_pe )
171
+ if grid_mapping :
172
+ variable .setncattr ("grid_mapping" , grid_mapping )
173
+
139
174
return True
0 commit comments