ERA5土壤含水率处理

最近被要求处理ERA5数据,记录一下整个过程。包括API下载,nc转tif,重投影和重采样。
并尝试上传到好久不用的博客上面

  • API下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import cdsapi

# 初始化CDS API客户端
client = cdsapi.Client()

# 定义数据集和请求参数
dataset = 'reanalysis-era5-land'
request = {
'variable': [
'volumetric_soil_water_layer_1',
'volumetric_soil_water_layer_2',
'volumetric_soil_water_layer_3',
'volumetric_soil_water_layer_4',
],
'year': ['2022'],
'month': ['09'],
'day': [
'01', '02', '03', '04', '05',
'06', '07', '08', '09', '10',
],
'time': [
'00:00', '01:00', '02:00', '03:00', '04:00', '05:00',
'06:00', '07:00', '08:00', '09:00', '10:00', '11:00',
'12:00', '13:00', '14:00', '15:00', '16:00', '17:00',
'18:00', '19:00', '20:00', '21:00', '22:00', '23:00',
],
'area': [30.5, 101, 28.5, 103], # [北, 西, 南, 东]
'format': 'netcdf', # 输出格式为NetCDF
}

# 指定输出文件路径
output_file = 'era5_land_soil_moisture_2022_luding.nc'

# 提交下载请求
client.retrieve(dataset, request, output_file)

print(f"数据已下载至 {output_file}")
2025-04-23 22:51:47,413 INFO [2024-09-26T00:00:00] Watch our [Forum](https://forum.ecmwf.int/) for Announcements, news and other discussed topics.
2025-04-23 22:51:47,413 WARNING [2024-06-16T00:00:00] CDS API syntax is changed and some keys or parameter names may have also changed. To avoid requests failing, please use the "Show API request code" tool on the dataset Download Form to check you are using the correct syntax for your API request.
2025-04-23 22:51:48,894 INFO Request ID is c53b2027-1503-4416-adb2-9b78a28a2df9
2025-04-23 22:51:49,167 INFO status has been updated to accepted
2025-04-23 22:52:03,788 INFO status has been updated to running
2025-04-23 22:52:12,035 INFO status has been updated to successful



d1d6058e5fbb3e8b362ef33a256c849e.zip:   0%|          | 0.00/588k [00:00<?, ?B/s]


数据已下载至 era5_land_soil_moisture_2022_luding.nc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import os
import netCDF4 as nc
import numpy as np
import rasterio
from rasterio.transform import from_bounds
from datetime import datetime, timedelta

# Input NetCDF file
nc_file = r'E:\zjh\spring2025\ERA5_Land\luding\html\data_0.nc'
# nc_file = 'era5_land_soil_moisture_2022_luding.nc'

# Output directory for GeoTIFF files
output_dir = 'output_tifs'
os.makedirs(output_dir, exist_ok=True)

# Step 1: Inspect NetCDF file and print variables
def print_nc_variables(nc_file):
try:
with nc.Dataset(nc_file) as ds:
print("NetCDF File Variables and Metadata:")
print("=" * 50)
for var_name in ds.variables:
var = ds.variables[var_name]
print(f"Variable: {var_name}")
print(f" Dimensions: {var.dimensions}")
print(f" Shape: {var.shape}")
print(f" Attributes: {var.ncattrs()}")
for attr in var.ncattrs():
print(f" {attr}: {var.getncattr(attr)}")
print("-" * 50)
except Exception as e:
print(f"Error reading NetCDF file: {e}")

# Step 2: Convert to GeoTIFF
def save_to_geotiff(data, lon, lat, output_path, time_str, var_name):
# Define WGS84 coordinate system (EPSG:4326)
crs = 'EPSG:4326'

# Get bounds (lon: 101 to 103, lat: 30.5 to 28.5)
west, east = lon.min(), lon.max()
north, south = lat.max(), lat.min()

# Calculate transform (assumes regular grid)
transform = from_bounds(west, south, east, north, data.shape[1], data.shape[0])

# Define metadata for GeoTIFF
profile = {
'driver': 'GTiff',
'height': data.shape[0],
'width': data.shape[1],
'count': 1,
'dtype': data.dtype,
'crs': crs,
'transform': transform,
'nodata': -9999, # Define nodata value
}

# Write GeoTIFF
with rasterio.open(output_path, 'w', **profile) as dst:
dst.write(data, 1)
dst.update_tags(
variable=var_name,
time=time_str,
description=f'ERA5-Land {var_name} at {time_str}'
)

# Main processing
def process_netcdf_to_geotiff(nc_file, output_dir):
try:
with nc.Dataset(nc_file) as ds:
# Get coordinates
lon = ds.variables['longitude'][:]
lat = ds.variables['latitude'][:]

# Get time variable and convert to datetime
time_var = ds.variables['valid_time']
time_units = time_var.units # e.g., 'hours since 1900-01-01 00:00:00.0'
time_values = time_var[:]

# Convert time using netCDF4.num2date
time_datetimes = nc.num2date(time_values, units=time_units, calendar='gregorian')

# Define variables to process
# swvl2
variables = ['swvl1', 'swvl2', 'swvl3', 'swvl4']

# Process each variable
for var_name in variables:
var_data = ds.variables[var_name][:] # Shape: (time, lat, lon)
var_short = var_name.replace('volumetric_soil_water_layer_', 'swvl')

# Create subdirectory for each variable
var_dir = os.path.join(output_dir, var_short)
os.makedirs(var_dir, exist_ok=True)

# Process each time step
for t, time_dt in enumerate(time_datetimes):
# Extract data for this time step
data = var_data[t, :, :] # Shape: (lat, lon)

# Replace invalid/missing values with nodata
data = np.where(data.mask, -9999, data) if np.ma.is_masked(data) else data

# Format time for filename (ensure string format)
time_str = time_dt.strftime('%Y%m%d_%H%M')

# Define output GeoTIFF path
output_path = os.path.join(var_dir, f'{var_short}_{time_str}.tif')

# Save to GeoTIFF
save_to_geotiff(data, lon, lat, output_path, time_str, var_name)
print(f'Saved: {output_path}')
except Exception as e:
print(f"Error processing NetCDF file: {e}")

1
print_nc_variables(nc_file)
输出内容1
NetCDF File Variables and Metadata:
==================================================
Variable: number
  Dimensions: ()
  Shape: ()
  Attributes: ['long_name', 'units', 'standard_name']
    long_name: ensemble member numerical id
    units: 1
    standard_name: realization
--------------------------------------------------
Variable: valid_time
  Dimensions: ('valid_time',)
  Shape: (240,)
  Attributes: ['long_name', 'standard_name', 'units', 'calendar']
    long_name: time
    standard_name: time
    units: seconds since 1970-01-01
    calendar: proleptic_gregorian
--------------------------------------------------
Variable: latitude
  Dimensions: ('latitude',)
  Shape: (21,)
  Attributes: ['_FillValue', 'units', 'standard_name', 'long_name', 'stored_direction']
    _FillValue: nan
    units: degrees_north
    standard_name: latitude
    long_name: latitude
    stored_direction: decreasing
--------------------------------------------------
Variable: longitude
  Dimensions: ('longitude',)
  Shape: (21,)
  Attributes: ['_FillValue', 'units', 'standard_name', 'long_name']
    _FillValue: nan
    units: degrees_east
    standard_name: longitude
    long_name: longitude
--------------------------------------------------
Variable: expver
  Dimensions: ('valid_time',)
  Shape: (240,)
  Attributes: []
--------------------------------------------------
Variable: swvl1
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 39
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl1
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 1
    GRIB_shortName: swvl1
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 1
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 0.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
Variable: swvl2
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 40
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl2
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 2
    GRIB_shortName: swvl2
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 2
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 7.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
Variable: swvl3
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 41
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl3
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 3
    GRIB_shortName: swvl3
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 3
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 28.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
Variable: swvl4
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 42
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl4
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 4
    GRIB_shortName: swvl4
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 4
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 100.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
1
2
3
# Process to GeoTIFF
process_netcdf_to_geotiff(nc_file, output_dir)
print("Processing complete. GeoTIFF files saved in:", output_dir)
Error processing NetCDF file: The WKT could not be parsed. OGR Error code 6
Processing complete. GeoTIFF files saved in: output_tifs

分界线

  • 处理nc文件至tif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import os
import netCDF4 as nc
import numpy as np
from osgeo import gdal, osr

# Input NetCDF file
nc_file = r'E:\zjh\spring2025\ERA5_Land\luding\html\data_0.nc'

# Output directory for GeoTIFF files
output_dir = 'output_tifs'
os.makedirs(output_dir, exist_ok=True)

# Step 1: Inspect NetCDF file and print variables
def print_nc_variables(nc_file):
try:
with nc.Dataset(nc_file) as ds:
print("NetCDF File Variables and Metadata:")
print("=" * 50)
for var_name in ds.variables:
var = ds.variables[var_name]
print(f"Variable: {var_name}")
print(f" Dimensions: {var.dimensions}")
print(f" Shape: {var.shape}")
print(f" Attributes: {var.ncattrs()}")
for attr in var.ncattrs():
print(f" {attr}: {var.getncattr(attr)}")
print("-" * 50)
except Exception as e:
print(f"Error reading NetCDF file: {e}")

# Step 2: Convert to GeoTIFF using GDAL
def save_to_geotiff(data, lon, lat, output_path, time_str, var_name):
try:
# Get dimensions
rows, cols = data.shape

# Create GDAL GeoTIFF driver
driver = gdal.GetDriverByName('GTiff')
if driver is None:
raise ValueError("GDAL GeoTIFF driver not available")

# Create output dataset
dst_ds = driver.Create(
output_path,
cols,
rows,
1,
gdal.GDT_Float32,
options=['COMPRESS=LZW'] # Optional compression
)
if dst_ds is None:
raise ValueError(f"Failed to create GeoTIFF: {output_path}")

# Set geotransform (lon: 101 to 103, lat: 30.5 to 28.5)
lon_min, lon_max = lon.min(), lon.max()
lat_min, lat_max = lat.min(), lat.max()
lon_res = (lon_max - lon_min) / (cols - 1)
lat_res = (lat_max - lat_min) / (rows - 1) # Negative for decreasing latitude
geotransform = (lon_min, lon_res, 0, lat_max, 0, -lat_res)
dst_ds.SetGeoTransform(geotransform)

# Set WGS84 projection
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326) # WGS84
dst_ds.SetProjection(srs.ExportToWkt())

# Write data to band
band = dst_ds.GetRasterBand(1)
band.SetNoDataValue(-9999)
band.WriteArray(data)

# Set metadata
dst_ds.SetMetadata({
'variable': var_name,
'time': time_str,
'description': f'ERA5-Land {var_name} at {time_str}'
})

# Flush and close
band.FlushCache()
dst_ds.FlushCache()
dst_ds = None
print(f'Saved: {output_path}')
except Exception as e:
print(f"Error saving GeoTIFF {output_path}: {e}")

# Main processing
def process_netcdf_to_geotiff(nc_file, output_dir):
try:
with nc.Dataset(nc_file) as ds:
# Get coordinates
lon = ds.variables['longitude'][:]
lat = ds.variables['latitude'][:]

# Get time variable and convert to datetime
time_var = ds.variables['valid_time']
time_units = time_var.units # e.g., 'seconds since 1970-01-01'
time_values = time_var[:]

# Convert time using netCDF4.num2date
time_datetimes = nc.num2date(time_values, units=time_units, calendar='proleptic_gregorian')

# Define variables to process
variables = ['swvl1', 'swvl2', 'swvl3', 'swvl4']

# Process each variable
for var_name in variables:
var_data = ds.variables[var_name][:] # Shape: (valid_time, lat, lon)
var_short = var_name # Already short (swvl1, swvl2, etc.)

# Get missing value attributes
missing_value = ds.variables[var_name].getncattr('GRIB_missingValue') if 'GRIB_missingValue' in ds.variables[var_name].ncattrs() else None
fill_value = ds.variables[var_name].getncattr('_FillValue') if '_FillValue' in ds.variables[var_name].ncattrs() else None

# Create subdirectory for each variable
var_dir = os.path.join(output_dir, var_short)
os.makedirs(var_dir, exist_ok=True)

# Process each time step
for t, time_dt in enumerate(time_datetimes):
# Extract data for this time step
data = var_data[t, :, :] # Shape: (lat, lon)

# Handle missing values
if np.ma.is_masked(data):
data = np.where(data.mask, -9999, data)
else:
if missing_value is not None:
data = np.where(data == missing_value, -9999, data)
if fill_value is not None and not np.isnan(fill_value):
data = np.where(data == fill_value, -9999, data)
# Handle NaN explicitly
data = np.where(np.isnan(data), -9999, data)

# Format time for filename
time_str = time_dt.strftime('%Y%m%d_%H%M')

# Define output GeoTIFF path
output_path = os.path.join(var_dir, f'{var_short}_{time_str}.tif')

# Save to GeoTIFF using GDAL
save_to_geotiff(data, lon, lat, output_path, time_str, var_name)
except Exception as e:
print(f"Error processing NetCDF file: {e}")

1
2
3
4
# Enable GDAL exceptions for better error reporting
gdal.UseExceptions()
# Print variables
print_nc_variables(nc_file)
输出内容2
NetCDF File Variables and Metadata:
==================================================
Variable: number
  Dimensions: ()
  Shape: ()
  Attributes: ['long_name', 'units', 'standard_name']
    long_name: ensemble member numerical id
    units: 1
    standard_name: realization
--------------------------------------------------
Variable: valid_time
  Dimensions: ('valid_time',)
  Shape: (240,)
  Attributes: ['long_name', 'standard_name', 'units', 'calendar']
    long_name: time
    standard_name: time
    units: seconds since 1970-01-01
    calendar: proleptic_gregorian
--------------------------------------------------
Variable: latitude
  Dimensions: ('latitude',)
  Shape: (21,)
  Attributes: ['_FillValue', 'units', 'standard_name', 'long_name', 'stored_direction']
    _FillValue: nan
    units: degrees_north
    standard_name: latitude
    long_name: latitude
    stored_direction: decreasing
--------------------------------------------------
Variable: longitude
  Dimensions: ('longitude',)
  Shape: (21,)
  Attributes: ['_FillValue', 'units', 'standard_name', 'long_name']
    _FillValue: nan
    units: degrees_east
    standard_name: longitude
    long_name: longitude
--------------------------------------------------
Variable: expver
  Dimensions: ('valid_time',)
  Shape: (240,)
  Attributes: []
--------------------------------------------------
Variable: swvl1
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 39
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl1
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 1
    GRIB_shortName: swvl1
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 1
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 0.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
Variable: swvl2
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 40
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl2
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 2
    GRIB_shortName: swvl2
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 2
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 7.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
Variable: swvl3
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 41
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl3
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 3
    GRIB_shortName: swvl3
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 3
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 28.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
Variable: swvl4
  Dimensions: ('valid_time', 'latitude', 'longitude')
  Shape: (240, 21, 21)
  Attributes: ['_FillValue', 'GRIB_paramId', 'GRIB_dataType', 'GRIB_numberOfPoints', 'GRIB_typeOfLevel', 'GRIB_stepUnits', 'GRIB_stepType', 'GRIB_gridType', 'GRIB_uvRelativeToGrid', 'GRIB_NV', 'GRIB_Nx', 'GRIB_Ny', 'GRIB_cfName', 'GRIB_cfVarName', 'GRIB_gridDefinitionDescription', 'GRIB_iDirectionIncrementInDegrees', 'GRIB_iScansNegatively', 'GRIB_jDirectionIncrementInDegrees', 'GRIB_jPointsAreConsecutive', 'GRIB_jScansPositively', 'GRIB_latitudeOfFirstGridPointInDegrees', 'GRIB_latitudeOfLastGridPointInDegrees', 'GRIB_longitudeOfFirstGridPointInDegrees', 'GRIB_longitudeOfLastGridPointInDegrees', 'GRIB_missingValue', 'GRIB_name', 'GRIB_shortName', 'GRIB_totalNumber', 'GRIB_units', 'long_name', 'units', 'standard_name', 'GRIB_depthBelowLandLayer', 'coordinates']
    _FillValue: nan
    GRIB_paramId: 42
    GRIB_dataType: an
    GRIB_numberOfPoints: 441
    GRIB_typeOfLevel: depthBelowLandLayer
    GRIB_stepUnits: 1
    GRIB_stepType: instant
    GRIB_gridType: regular_ll
    GRIB_uvRelativeToGrid: 0
    GRIB_NV: 0
    GRIB_Nx: 21
    GRIB_Ny: 21
    GRIB_cfName: unknown
    GRIB_cfVarName: swvl4
    GRIB_gridDefinitionDescription: Latitude/Longitude Grid
    GRIB_iDirectionIncrementInDegrees: 0.1
    GRIB_iScansNegatively: 0
    GRIB_jDirectionIncrementInDegrees: 0.1
    GRIB_jPointsAreConsecutive: 0
    GRIB_jScansPositively: 0
    GRIB_latitudeOfFirstGridPointInDegrees: 30.5
    GRIB_latitudeOfLastGridPointInDegrees: 28.5
    GRIB_longitudeOfFirstGridPointInDegrees: 101.0
    GRIB_longitudeOfLastGridPointInDegrees: 103.0
    GRIB_missingValue: 3.4028234663852886e+38
    GRIB_name: Volumetric soil water layer 4
    GRIB_shortName: swvl4
    GRIB_totalNumber: 0
    GRIB_units: m**3 m**-3
    long_name: Volumetric soil water layer 4
    units: m**3 m**-3
    standard_name: unknown
    GRIB_depthBelowLandLayer: 100.0
    coordinates: number valid_time latitude longitude expver
--------------------------------------------------
1
2
3
# Process to GeoTIFF
process_netcdf_to_geotiff(nc_file, output_dir)
print("Processing complete. GeoTIFF files saved in:", output_dir)
输出内容3
Saved: output_tifs\swvl1\swvl1_20220901_0000.tif
Saved: output_tifs\swvl1\swvl1_20220901_0100.tif
Saved: output_tifs\swvl1\swvl1_20220901_0200.tif
Saved: output_tifs\swvl1\swvl1_20220901_0300.tif
Saved: output_tifs\swvl1\swvl1_20220901_0400.tif
Saved: output_tifs\swvl1\swvl1_20220901_0500.tif
Saved: output_tifs\swvl1\swvl1_20220901_0600.tif
Saved: output_tifs\swvl1\swvl1_20220901_0700.tif
Saved: output_tifs\swvl1\swvl1_20220901_0800.tif
Saved: output_tifs\swvl1\swvl1_20220901_0900.tif
Saved: output_tifs\swvl1\swvl1_20220901_1000.tif
Saved: output_tifs\swvl1\swvl1_20220901_1100.tif
Saved: output_tifs\swvl1\swvl1_20220901_1200.tif
Saved: output_tifs\swvl1\swvl1_20220901_1300.tif
Saved: output_tifs\swvl1\swvl1_20220901_1400.tif
Saved: output_tifs\swvl1\swvl1_20220901_1500.tif
Saved: output_tifs\swvl1\swvl1_20220901_1600.tif
Saved: output_tifs\swvl1\swvl1_20220901_1700.tif
Saved: output_tifs\swvl1\swvl1_20220901_1800.tif
Saved: output_tifs\swvl1\swvl1_20220901_1900.tif
Saved: output_tifs\swvl1\swvl1_20220901_2000.tif
Saved: output_tifs\swvl1\swvl1_20220901_2100.tif
Saved: output_tifs\swvl1\swvl1_20220901_2200.tif
Saved: output_tifs\swvl1\swvl1_20220901_2300.tif
Saved: output_tifs\swvl1\swvl1_20220902_0000.tif
Saved: output_tifs\swvl1\swvl1_20220902_0100.tif
Saved: output_tifs\swvl1\swvl1_20220902_0200.tif
Saved: output_tifs\swvl1\swvl1_20220902_0300.tif
Saved: output_tifs\swvl1\swvl1_20220902_0400.tif
Saved: output_tifs\swvl1\swvl1_20220902_0500.tif
Saved: output_tifs\swvl1\swvl1_20220902_0600.tif
Saved: output_tifs\swvl1\swvl1_20220902_0700.tif
Saved: output_tifs\swvl1\swvl1_20220902_0800.tif
Saved: output_tifs\swvl1\swvl1_20220902_0900.tif
Saved: output_tifs\swvl1\swvl1_20220902_1000.tif
Saved: output_tifs\swvl1\swvl1_20220902_1100.tif
Saved: output_tifs\swvl1\swvl1_20220902_1200.tif
Saved: output_tifs\swvl1\swvl1_20220902_1300.tif
Saved: output_tifs\swvl1\swvl1_20220902_1400.tif
Saved: output_tifs\swvl1\swvl1_20220902_1500.tif
Saved: output_tifs\swvl1\swvl1_20220902_1600.tif
Saved: output_tifs\swvl1\swvl1_20220902_1700.tif
Saved: output_tifs\swvl1\swvl1_20220902_1800.tif
Saved: output_tifs\swvl1\swvl1_20220902_1900.tif
Saved: output_tifs\swvl1\swvl1_20220902_2000.tif
Saved: output_tifs\swvl1\swvl1_20220902_2100.tif
Saved: output_tifs\swvl1\swvl1_20220902_2200.tif
Saved: output_tifs\swvl1\swvl1_20220902_2300.tif
Saved: output_tifs\swvl1\swvl1_20220903_0000.tif
Saved: output_tifs\swvl1\swvl1_20220903_0100.tif
Saved: output_tifs\swvl1\swvl1_20220903_0200.tif
Saved: output_tifs\swvl1\swvl1_20220903_0300.tif
Saved: output_tifs\swvl1\swvl1_20220903_0400.tif
Saved: output_tifs\swvl1\swvl1_20220903_0500.tif
Saved: output_tifs\swvl1\swvl1_20220903_0600.tif
Saved: output_tifs\swvl1\swvl1_20220903_0700.tif
Saved: output_tifs\swvl1\swvl1_20220903_0800.tif
Saved: output_tifs\swvl1\swvl1_20220903_0900.tif
Saved: output_tifs\swvl1\swvl1_20220903_1000.tif
Saved: output_tifs\swvl1\swvl1_20220903_1100.tif
Saved: output_tifs\swvl1\swvl1_20220903_1200.tif
Saved: output_tifs\swvl1\swvl1_20220903_1300.tif
Saved: output_tifs\swvl1\swvl1_20220903_1400.tif
Saved: output_tifs\swvl1\swvl1_20220903_1500.tif
Saved: output_tifs\swvl1\swvl1_20220903_1600.tif
Saved: output_tifs\swvl1\swvl1_20220903_1700.tif
Saved: output_tifs\swvl1\swvl1_20220903_1800.tif
Saved: output_tifs\swvl1\swvl1_20220903_1900.tif
Saved: output_tifs\swvl1\swvl1_20220903_2000.tif
Saved: output_tifs\swvl1\swvl1_20220903_2100.tif
Saved: output_tifs\swvl1\swvl1_20220903_2200.tif
Saved: output_tifs\swvl1\swvl1_20220903_2300.tif
Saved: output_tifs\swvl1\swvl1_20220904_0000.tif
Saved: output_tifs\swvl1\swvl1_20220904_0100.tif
Saved: output_tifs\swvl1\swvl1_20220904_0200.tif
Saved: output_tifs\swvl1\swvl1_20220904_0300.tif
Saved: output_tifs\swvl1\swvl1_20220904_0400.tif
Saved: output_tifs\swvl1\swvl1_20220904_0500.tif
Saved: output_tifs\swvl1\swvl1_20220904_0600.tif
Saved: output_tifs\swvl1\swvl1_20220904_0700.tif
Saved: output_tifs\swvl1\swvl1_20220904_0800.tif
Saved: output_tifs\swvl1\swvl1_20220904_0900.tif
Saved: output_tifs\swvl1\swvl1_20220904_1000.tif
Saved: output_tifs\swvl1\swvl1_20220904_1100.tif
Saved: output_tifs\swvl1\swvl1_20220904_1200.tif
Saved: output_tifs\swvl1\swvl1_20220904_1300.tif
Saved: output_tifs\swvl1\swvl1_20220904_1400.tif
Saved: output_tifs\swvl1\swvl1_20220904_1500.tif
Saved: output_tifs\swvl1\swvl1_20220904_1600.tif
Saved: output_tifs\swvl1\swvl1_20220904_1700.tif
Saved: output_tifs\swvl1\swvl1_20220904_1800.tif
Saved: output_tifs\swvl1\swvl1_20220904_1900.tif
Saved: output_tifs\swvl1\swvl1_20220904_2000.tif
Saved: output_tifs\swvl1\swvl1_20220904_2100.tif
Saved: output_tifs\swvl1\swvl1_20220904_2200.tif
Saved: output_tifs\swvl1\swvl1_20220904_2300.tif
Saved: output_tifs\swvl1\swvl1_20220905_0000.tif
Saved: output_tifs\swvl1\swvl1_20220905_0100.tif
Saved: output_tifs\swvl1\swvl1_20220905_0200.tif
Saved: output_tifs\swvl1\swvl1_20220905_0300.tif
Saved: output_tifs\swvl1\swvl1_20220905_0400.tif
Saved: output_tifs\swvl1\swvl1_20220905_0500.tif
Saved: output_tifs\swvl1\swvl1_20220905_0600.tif
Saved: output_tifs\swvl1\swvl1_20220905_0700.tif
Saved: output_tifs\swvl1\swvl1_20220905_0800.tif
Saved: output_tifs\swvl1\swvl1_20220905_0900.tif
Saved: output_tifs\swvl1\swvl1_20220905_1000.tif
Saved: output_tifs\swvl1\swvl1_20220905_1100.tif
Saved: output_tifs\swvl1\swvl1_20220905_1200.tif
Saved: output_tifs\swvl1\swvl1_20220905_1300.tif
Saved: output_tifs\swvl1\swvl1_20220905_1400.tif
Saved: output_tifs\swvl1\swvl1_20220905_1500.tif
Saved: output_tifs\swvl1\swvl1_20220905_1600.tif
Saved: output_tifs\swvl1\swvl1_20220905_1700.tif
Saved: output_tifs\swvl1\swvl1_20220905_1800.tif
Saved: output_tifs\swvl1\swvl1_20220905_1900.tif
Saved: output_tifs\swvl1\swvl1_20220905_2000.tif
Saved: output_tifs\swvl1\swvl1_20220905_2100.tif
Saved: output_tifs\swvl1\swvl1_20220905_2200.tif
Saved: output_tifs\swvl1\swvl1_20220905_2300.tif
Saved: output_tifs\swvl1\swvl1_20220906_0000.tif
Saved: output_tifs\swvl1\swvl1_20220906_0100.tif
Saved: output_tifs\swvl1\swvl1_20220906_0200.tif
Saved: output_tifs\swvl1\swvl1_20220906_0300.tif
Saved: output_tifs\swvl1\swvl1_20220906_0400.tif
Saved: output_tifs\swvl1\swvl1_20220906_0500.tif
Saved: output_tifs\swvl1\swvl1_20220906_0600.tif
Saved: output_tifs\swvl1\swvl1_20220906_0700.tif
Saved: output_tifs\swvl1\swvl1_20220906_0800.tif
Saved: output_tifs\swvl1\swvl1_20220906_0900.tif
Saved: output_tifs\swvl1\swvl1_20220906_1000.tif
Saved: output_tifs\swvl1\swvl1_20220906_1100.tif
Saved: output_tifs\swvl1\swvl1_20220906_1200.tif
Saved: output_tifs\swvl1\swvl1_20220906_1300.tif
Saved: output_tifs\swvl1\swvl1_20220906_1400.tif
Saved: output_tifs\swvl1\swvl1_20220906_1500.tif
Saved: output_tifs\swvl1\swvl1_20220906_1600.tif
Saved: output_tifs\swvl1\swvl1_20220906_1700.tif
Saved: output_tifs\swvl1\swvl1_20220906_1800.tif
Saved: output_tifs\swvl1\swvl1_20220906_1900.tif
Saved: output_tifs\swvl1\swvl1_20220906_2000.tif
Saved: output_tifs\swvl1\swvl1_20220906_2100.tif
Saved: output_tifs\swvl1\swvl1_20220906_2200.tif
Saved: output_tifs\swvl1\swvl1_20220906_2300.tif
Saved: output_tifs\swvl1\swvl1_20220907_0000.tif
Saved: output_tifs\swvl1\swvl1_20220907_0100.tif
Saved: output_tifs\swvl1\swvl1_20220907_0200.tif
Saved: output_tifs\swvl1\swvl1_20220907_0300.tif
Saved: output_tifs\swvl1\swvl1_20220907_0400.tif
Saved: output_tifs\swvl1\swvl1_20220907_0500.tif
Saved: output_tifs\swvl1\swvl1_20220907_0600.tif
Saved: output_tifs\swvl1\swvl1_20220907_0700.tif
Saved: output_tifs\swvl1\swvl1_20220907_0800.tif
Saved: output_tifs\swvl1\swvl1_20220907_0900.tif
Saved: output_tifs\swvl1\swvl1_20220907_1000.tif
Saved: output_tifs\swvl1\swvl1_20220907_1100.tif
Saved: output_tifs\swvl1\swvl1_20220907_1200.tif
Saved: output_tifs\swvl1\swvl1_20220907_1300.tif
Saved: output_tifs\swvl1\swvl1_20220907_1400.tif
Saved: output_tifs\swvl1\swvl1_20220907_1500.tif
Saved: output_tifs\swvl1\swvl1_20220907_1600.tif
Saved: output_tifs\swvl1\swvl1_20220907_1700.tif
Saved: output_tifs\swvl1\swvl1_20220907_1800.tif
Saved: output_tifs\swvl1\swvl1_20220907_1900.tif
Saved: output_tifs\swvl1\swvl1_20220907_2000.tif
Saved: output_tifs\swvl1\swvl1_20220907_2100.tif
Saved: output_tifs\swvl1\swvl1_20220907_2200.tif
Saved: output_tifs\swvl1\swvl1_20220907_2300.tif
Saved: output_tifs\swvl1\swvl1_20220908_0000.tif
Saved: output_tifs\swvl1\swvl1_20220908_0100.tif
Saved: output_tifs\swvl1\swvl1_20220908_0200.tif
Saved: output_tifs\swvl1\swvl1_20220908_0300.tif
Saved: output_tifs\swvl1\swvl1_20220908_0400.tif
Saved: output_tifs\swvl1\swvl1_20220908_0500.tif
Saved: output_tifs\swvl1\swvl1_20220908_0600.tif
Saved: output_tifs\swvl1\swvl1_20220908_0700.tif
Saved: output_tifs\swvl1\swvl1_20220908_0800.tif
Saved: output_tifs\swvl1\swvl1_20220908_0900.tif
Saved: output_tifs\swvl1\swvl1_20220908_1000.tif
Saved: output_tifs\swvl1\swvl1_20220908_1100.tif
Saved: output_tifs\swvl1\swvl1_20220908_1200.tif
Saved: output_tifs\swvl1\swvl1_20220908_1300.tif
Saved: output_tifs\swvl1\swvl1_20220908_1400.tif
Saved: output_tifs\swvl1\swvl1_20220908_1500.tif
Saved: output_tifs\swvl1\swvl1_20220908_1600.tif
Saved: output_tifs\swvl1\swvl1_20220908_1700.tif
Saved: output_tifs\swvl1\swvl1_20220908_1800.tif
Saved: output_tifs\swvl1\swvl1_20220908_1900.tif
Saved: output_tifs\swvl1\swvl1_20220908_2000.tif
Saved: output_tifs\swvl1\swvl1_20220908_2100.tif
Saved: output_tifs\swvl1\swvl1_20220908_2200.tif
Saved: output_tifs\swvl1\swvl1_20220908_2300.tif
Saved: output_tifs\swvl1\swvl1_20220909_0000.tif
Saved: output_tifs\swvl1\swvl1_20220909_0100.tif
Saved: output_tifs\swvl1\swvl1_20220909_0200.tif
Saved: output_tifs\swvl1\swvl1_20220909_0300.tif
Saved: output_tifs\swvl1\swvl1_20220909_0400.tif
Saved: output_tifs\swvl1\swvl1_20220909_0500.tif
Saved: output_tifs\swvl1\swvl1_20220909_0600.tif
Saved: output_tifs\swvl1\swvl1_20220909_0700.tif
Saved: output_tifs\swvl1\swvl1_20220909_0800.tif
Saved: output_tifs\swvl1\swvl1_20220909_0900.tif
Saved: output_tifs\swvl1\swvl1_20220909_1000.tif
Saved: output_tifs\swvl1\swvl1_20220909_1100.tif
Saved: output_tifs\swvl1\swvl1_20220909_1200.tif
Saved: output_tifs\swvl1\swvl1_20220909_1300.tif
Saved: output_tifs\swvl1\swvl1_20220909_1400.tif
Saved: output_tifs\swvl1\swvl1_20220909_1500.tif
Saved: output_tifs\swvl1\swvl1_20220909_1600.tif
Saved: output_tifs\swvl1\swvl1_20220909_1700.tif
Saved: output_tifs\swvl1\swvl1_20220909_1800.tif
Saved: output_tifs\swvl1\swvl1_20220909_1900.tif
Saved: output_tifs\swvl1\swvl1_20220909_2000.tif
Saved: output_tifs\swvl1\swvl1_20220909_2100.tif
Saved: output_tifs\swvl1\swvl1_20220909_2200.tif
Saved: output_tifs\swvl1\swvl1_20220909_2300.tif
Saved: output_tifs\swvl1\swvl1_20220910_0000.tif
Saved: output_tifs\swvl1\swvl1_20220910_0100.tif
Saved: output_tifs\swvl1\swvl1_20220910_0200.tif
Saved: output_tifs\swvl1\swvl1_20220910_0300.tif
Saved: output_tifs\swvl1\swvl1_20220910_0400.tif
Saved: output_tifs\swvl1\swvl1_20220910_0500.tif
Saved: output_tifs\swvl1\swvl1_20220910_0600.tif
Saved: output_tifs\swvl1\swvl1_20220910_0700.tif
Saved: output_tifs\swvl1\swvl1_20220910_0800.tif
Saved: output_tifs\swvl1\swvl1_20220910_0900.tif
Saved: output_tifs\swvl1\swvl1_20220910_1000.tif
Saved: output_tifs\swvl1\swvl1_20220910_1100.tif
Saved: output_tifs\swvl1\swvl1_20220910_1200.tif
Saved: output_tifs\swvl1\swvl1_20220910_1300.tif
Saved: output_tifs\swvl1\swvl1_20220910_1400.tif
Saved: output_tifs\swvl1\swvl1_20220910_1500.tif
Saved: output_tifs\swvl1\swvl1_20220910_1600.tif
Saved: output_tifs\swvl1\swvl1_20220910_1700.tif
Saved: output_tifs\swvl1\swvl1_20220910_1800.tif
Saved: output_tifs\swvl1\swvl1_20220910_1900.tif
Saved: output_tifs\swvl1\swvl1_20220910_2000.tif
Saved: output_tifs\swvl1\swvl1_20220910_2100.tif
Saved: output_tifs\swvl1\swvl1_20220910_2200.tif
Saved: output_tifs\swvl1\swvl1_20220910_2300.tif
Saved: output_tifs\swvl2\swvl2_20220901_0000.tif
Saved: output_tifs\swvl2\swvl2_20220901_0100.tif
Saved: output_tifs\swvl2\swvl2_20220901_0200.tif
Saved: output_tifs\swvl2\swvl2_20220901_0300.tif
Saved: output_tifs\swvl2\swvl2_20220901_0400.tif
Saved: output_tifs\swvl2\swvl2_20220901_0500.tif
Saved: output_tifs\swvl2\swvl2_20220901_0600.tif
Saved: output_tifs\swvl2\swvl2_20220901_0700.tif
Saved: output_tifs\swvl2\swvl2_20220901_0800.tif
Saved: output_tifs\swvl2\swvl2_20220901_0900.tif
Saved: output_tifs\swvl2\swvl2_20220901_1000.tif
Saved: output_tifs\swvl2\swvl2_20220901_1100.tif
Saved: output_tifs\swvl2\swvl2_20220901_1200.tif
Saved: output_tifs\swvl2\swvl2_20220901_1300.tif
Saved: output_tifs\swvl2\swvl2_20220901_1400.tif
Saved: output_tifs\swvl2\swvl2_20220901_1500.tif
Saved: output_tifs\swvl2\swvl2_20220901_1600.tif
Saved: output_tifs\swvl2\swvl2_20220901_1700.tif
Saved: output_tifs\swvl2\swvl2_20220901_1800.tif
Saved: output_tifs\swvl2\swvl2_20220901_1900.tif
Saved: output_tifs\swvl2\swvl2_20220901_2000.tif
Saved: output_tifs\swvl2\swvl2_20220901_2100.tif
Saved: output_tifs\swvl2\swvl2_20220901_2200.tif
Saved: output_tifs\swvl2\swvl2_20220901_2300.tif
Saved: output_tifs\swvl2\swvl2_20220902_0000.tif
Saved: output_tifs\swvl2\swvl2_20220902_0100.tif
Saved: output_tifs\swvl2\swvl2_20220902_0200.tif
Saved: output_tifs\swvl2\swvl2_20220902_0300.tif
Saved: output_tifs\swvl2\swvl2_20220902_0400.tif
Saved: output_tifs\swvl2\swvl2_20220902_0500.tif
Saved: output_tifs\swvl2\swvl2_20220902_0600.tif
Saved: output_tifs\swvl2\swvl2_20220902_0700.tif
Saved: output_tifs\swvl2\swvl2_20220902_0800.tif
Saved: output_tifs\swvl2\swvl2_20220902_0900.tif
Saved: output_tifs\swvl2\swvl2_20220902_1000.tif
Saved: output_tifs\swvl2\swvl2_20220902_1100.tif
Saved: output_tifs\swvl2\swvl2_20220902_1200.tif
Saved: output_tifs\swvl2\swvl2_20220902_1300.tif
Saved: output_tifs\swvl2\swvl2_20220902_1400.tif
Saved: output_tifs\swvl2\swvl2_20220902_1500.tif
Saved: output_tifs\swvl2\swvl2_20220902_1600.tif
Saved: output_tifs\swvl2\swvl2_20220902_1700.tif
Saved: output_tifs\swvl2\swvl2_20220902_1800.tif
Saved: output_tifs\swvl2\swvl2_20220902_1900.tif
Saved: output_tifs\swvl2\swvl2_20220902_2000.tif
Saved: output_tifs\swvl2\swvl2_20220902_2100.tif
Saved: output_tifs\swvl2\swvl2_20220902_2200.tif
Saved: output_tifs\swvl2\swvl2_20220902_2300.tif
Saved: output_tifs\swvl2\swvl2_20220903_0000.tif
Saved: output_tifs\swvl2\swvl2_20220903_0100.tif
Saved: output_tifs\swvl2\swvl2_20220903_0200.tif
Saved: output_tifs\swvl2\swvl2_20220903_0300.tif
Saved: output_tifs\swvl2\swvl2_20220903_0400.tif
Saved: output_tifs\swvl2\swvl2_20220903_0500.tif
Saved: output_tifs\swvl2\swvl2_20220903_0600.tif
Saved: output_tifs\swvl2\swvl2_20220903_0700.tif
Saved: output_tifs\swvl2\swvl2_20220903_0800.tif
Saved: output_tifs\swvl2\swvl2_20220903_0900.tif
Saved: output_tifs\swvl2\swvl2_20220903_1000.tif
Saved: output_tifs\swvl2\swvl2_20220903_1100.tif
Saved: output_tifs\swvl2\swvl2_20220903_1200.tif
Saved: output_tifs\swvl2\swvl2_20220903_1300.tif
Saved: output_tifs\swvl2\swvl2_20220903_1400.tif
Saved: output_tifs\swvl2\swvl2_20220903_1500.tif
Saved: output_tifs\swvl2\swvl2_20220903_1600.tif
Saved: output_tifs\swvl2\swvl2_20220903_1700.tif
Saved: output_tifs\swvl2\swvl2_20220903_1800.tif
Saved: output_tifs\swvl2\swvl2_20220903_1900.tif
Saved: output_tifs\swvl2\swvl2_20220903_2000.tif
Saved: output_tifs\swvl2\swvl2_20220903_2100.tif
Saved: output_tifs\swvl2\swvl2_20220903_2200.tif
Saved: output_tifs\swvl2\swvl2_20220903_2300.tif
Saved: output_tifs\swvl2\swvl2_20220904_0000.tif
Saved: output_tifs\swvl2\swvl2_20220904_0100.tif
Saved: output_tifs\swvl2\swvl2_20220904_0200.tif
Saved: output_tifs\swvl2\swvl2_20220904_0300.tif
Saved: output_tifs\swvl2\swvl2_20220904_0400.tif
Saved: output_tifs\swvl2\swvl2_20220904_0500.tif
Saved: output_tifs\swvl2\swvl2_20220904_0600.tif
Saved: output_tifs\swvl2\swvl2_20220904_0700.tif
Saved: output_tifs\swvl2\swvl2_20220904_0800.tif
Saved: output_tifs\swvl2\swvl2_20220904_0900.tif
Saved: output_tifs\swvl2\swvl2_20220904_1000.tif
Saved: output_tifs\swvl2\swvl2_20220904_1100.tif
Saved: output_tifs\swvl2\swvl2_20220904_1200.tif
Saved: output_tifs\swvl2\swvl2_20220904_1300.tif
Saved: output_tifs\swvl2\swvl2_20220904_1400.tif
Saved: output_tifs\swvl2\swvl2_20220904_1500.tif
Saved: output_tifs\swvl2\swvl2_20220904_1600.tif
Saved: output_tifs\swvl2\swvl2_20220904_1700.tif
Saved: output_tifs\swvl2\swvl2_20220904_1800.tif
Saved: output_tifs\swvl2\swvl2_20220904_1900.tif
Saved: output_tifs\swvl2\swvl2_20220904_2000.tif
Saved: output_tifs\swvl2\swvl2_20220904_2100.tif
Saved: output_tifs\swvl2\swvl2_20220904_2200.tif
Saved: output_tifs\swvl2\swvl2_20220904_2300.tif
Saved: output_tifs\swvl2\swvl2_20220905_0000.tif
Saved: output_tifs\swvl2\swvl2_20220905_0100.tif
Saved: output_tifs\swvl2\swvl2_20220905_0200.tif
Saved: output_tifs\swvl2\swvl2_20220905_0300.tif
Saved: output_tifs\swvl2\swvl2_20220905_0400.tif
Saved: output_tifs\swvl2\swvl2_20220905_0500.tif
Saved: output_tifs\swvl2\swvl2_20220905_0600.tif
Saved: output_tifs\swvl2\swvl2_20220905_0700.tif
Saved: output_tifs\swvl2\swvl2_20220905_0800.tif
Saved: output_tifs\swvl2\swvl2_20220905_0900.tif
Saved: output_tifs\swvl2\swvl2_20220905_1000.tif
Saved: output_tifs\swvl2\swvl2_20220905_1100.tif
Saved: output_tifs\swvl2\swvl2_20220905_1200.tif
Saved: output_tifs\swvl2\swvl2_20220905_1300.tif
Saved: output_tifs\swvl2\swvl2_20220905_1400.tif
Saved: output_tifs\swvl2\swvl2_20220905_1500.tif
Saved: output_tifs\swvl2\swvl2_20220905_1600.tif
Saved: output_tifs\swvl2\swvl2_20220905_1700.tif
Saved: output_tifs\swvl2\swvl2_20220905_1800.tif
Saved: output_tifs\swvl2\swvl2_20220905_1900.tif
Saved: output_tifs\swvl2\swvl2_20220905_2000.tif
Saved: output_tifs\swvl2\swvl2_20220905_2100.tif
Saved: output_tifs\swvl2\swvl2_20220905_2200.tif
Saved: output_tifs\swvl2\swvl2_20220905_2300.tif
Saved: output_tifs\swvl2\swvl2_20220906_0000.tif
Saved: output_tifs\swvl2\swvl2_20220906_0100.tif
Saved: output_tifs\swvl2\swvl2_20220906_0200.tif
Saved: output_tifs\swvl2\swvl2_20220906_0300.tif
Saved: output_tifs\swvl2\swvl2_20220906_0400.tif
Saved: output_tifs\swvl2\swvl2_20220906_0500.tif
Saved: output_tifs\swvl2\swvl2_20220906_0600.tif
Saved: output_tifs\swvl2\swvl2_20220906_0700.tif
Saved: output_tifs\swvl2\swvl2_20220906_0800.tif
Saved: output_tifs\swvl2\swvl2_20220906_0900.tif
Saved: output_tifs\swvl2\swvl2_20220906_1000.tif
Saved: output_tifs\swvl2\swvl2_20220906_1100.tif
Saved: output_tifs\swvl2\swvl2_20220906_1200.tif
Saved: output_tifs\swvl2\swvl2_20220906_1300.tif
Saved: output_tifs\swvl2\swvl2_20220906_1400.tif
Saved: output_tifs\swvl2\swvl2_20220906_1500.tif
Saved: output_tifs\swvl2\swvl2_20220906_1600.tif
Saved: output_tifs\swvl2\swvl2_20220906_1700.tif
Saved: output_tifs\swvl2\swvl2_20220906_1800.tif
Saved: output_tifs\swvl2\swvl2_20220906_1900.tif
Saved: output_tifs\swvl2\swvl2_20220906_2000.tif
Saved: output_tifs\swvl2\swvl2_20220906_2100.tif
Saved: output_tifs\swvl2\swvl2_20220906_2200.tif
Saved: output_tifs\swvl2\swvl2_20220906_2300.tif
Saved: output_tifs\swvl2\swvl2_20220907_0000.tif
Saved: output_tifs\swvl2\swvl2_20220907_0100.tif
Saved: output_tifs\swvl2\swvl2_20220907_0200.tif
Saved: output_tifs\swvl2\swvl2_20220907_0300.tif
Saved: output_tifs\swvl2\swvl2_20220907_0400.tif
Saved: output_tifs\swvl2\swvl2_20220907_0500.tif
Saved: output_tifs\swvl2\swvl2_20220907_0600.tif
Saved: output_tifs\swvl2\swvl2_20220907_0700.tif
Saved: output_tifs\swvl2\swvl2_20220907_0800.tif
Saved: output_tifs\swvl2\swvl2_20220907_0900.tif
Saved: output_tifs\swvl2\swvl2_20220907_1000.tif
Saved: output_tifs\swvl2\swvl2_20220907_1100.tif
Saved: output_tifs\swvl2\swvl2_20220907_1200.tif
Saved: output_tifs\swvl2\swvl2_20220907_1300.tif
Saved: output_tifs\swvl2\swvl2_20220907_1400.tif
Saved: output_tifs\swvl2\swvl2_20220907_1500.tif
Saved: output_tifs\swvl2\swvl2_20220907_1600.tif
Saved: output_tifs\swvl2\swvl2_20220907_1700.tif
Saved: output_tifs\swvl2\swvl2_20220907_1800.tif
Saved: output_tifs\swvl2\swvl2_20220907_1900.tif
Saved: output_tifs\swvl2\swvl2_20220907_2000.tif
Saved: output_tifs\swvl2\swvl2_20220907_2100.tif
Saved: output_tifs\swvl2\swvl2_20220907_2200.tif
Saved: output_tifs\swvl2\swvl2_20220907_2300.tif
Saved: output_tifs\swvl2\swvl2_20220908_0000.tif
Saved: output_tifs\swvl2\swvl2_20220908_0100.tif
Saved: output_tifs\swvl2\swvl2_20220908_0200.tif
Saved: output_tifs\swvl2\swvl2_20220908_0300.tif
Saved: output_tifs\swvl2\swvl2_20220908_0400.tif
Saved: output_tifs\swvl2\swvl2_20220908_0500.tif
Saved: output_tifs\swvl2\swvl2_20220908_0600.tif
Saved: output_tifs\swvl2\swvl2_20220908_0700.tif
Saved: output_tifs\swvl2\swvl2_20220908_0800.tif
Saved: output_tifs\swvl2\swvl2_20220908_0900.tif
Saved: output_tifs\swvl2\swvl2_20220908_1000.tif
Saved: output_tifs\swvl2\swvl2_20220908_1100.tif
Saved: output_tifs\swvl2\swvl2_20220908_1200.tif
Saved: output_tifs\swvl2\swvl2_20220908_1300.tif
Saved: output_tifs\swvl2\swvl2_20220908_1400.tif
Saved: output_tifs\swvl2\swvl2_20220908_1500.tif
Saved: output_tifs\swvl2\swvl2_20220908_1600.tif
Saved: output_tifs\swvl2\swvl2_20220908_1700.tif
Saved: output_tifs\swvl2\swvl2_20220908_1800.tif
Saved: output_tifs\swvl2\swvl2_20220908_1900.tif
Saved: output_tifs\swvl2\swvl2_20220908_2000.tif
Saved: output_tifs\swvl2\swvl2_20220908_2100.tif
Saved: output_tifs\swvl2\swvl2_20220908_2200.tif
Saved: output_tifs\swvl2\swvl2_20220908_2300.tif
Saved: output_tifs\swvl2\swvl2_20220909_0000.tif
Saved: output_tifs\swvl2\swvl2_20220909_0100.tif
Saved: output_tifs\swvl2\swvl2_20220909_0200.tif
Saved: output_tifs\swvl2\swvl2_20220909_0300.tif
Saved: output_tifs\swvl2\swvl2_20220909_0400.tif
Saved: output_tifs\swvl2\swvl2_20220909_0500.tif
Saved: output_tifs\swvl2\swvl2_20220909_0600.tif
Saved: output_tifs\swvl2\swvl2_20220909_0700.tif
Saved: output_tifs\swvl2\swvl2_20220909_0800.tif
Saved: output_tifs\swvl2\swvl2_20220909_0900.tif
Saved: output_tifs\swvl2\swvl2_20220909_1000.tif
Saved: output_tifs\swvl2\swvl2_20220909_1100.tif
Saved: output_tifs\swvl2\swvl2_20220909_1200.tif
Saved: output_tifs\swvl2\swvl2_20220909_1300.tif
Saved: output_tifs\swvl2\swvl2_20220909_1400.tif
Saved: output_tifs\swvl2\swvl2_20220909_1500.tif
Saved: output_tifs\swvl2\swvl2_20220909_1600.tif
Saved: output_tifs\swvl2\swvl2_20220909_1700.tif
Saved: output_tifs\swvl2\swvl2_20220909_1800.tif
Saved: output_tifs\swvl2\swvl2_20220909_1900.tif
Saved: output_tifs\swvl2\swvl2_20220909_2000.tif
Saved: output_tifs\swvl2\swvl2_20220909_2100.tif
Saved: output_tifs\swvl2\swvl2_20220909_2200.tif
Saved: output_tifs\swvl2\swvl2_20220909_2300.tif
Saved: output_tifs\swvl2\swvl2_20220910_0000.tif
Saved: output_tifs\swvl2\swvl2_20220910_0100.tif
Saved: output_tifs\swvl2\swvl2_20220910_0200.tif
Saved: output_tifs\swvl2\swvl2_20220910_0300.tif
Saved: output_tifs\swvl2\swvl2_20220910_0400.tif
Saved: output_tifs\swvl2\swvl2_20220910_0500.tif
Saved: output_tifs\swvl2\swvl2_20220910_0600.tif
Saved: output_tifs\swvl2\swvl2_20220910_0700.tif
Saved: output_tifs\swvl2\swvl2_20220910_0800.tif
Saved: output_tifs\swvl2\swvl2_20220910_0900.tif
Saved: output_tifs\swvl2\swvl2_20220910_1000.tif
Saved: output_tifs\swvl2\swvl2_20220910_1100.tif
Saved: output_tifs\swvl2\swvl2_20220910_1200.tif
Saved: output_tifs\swvl2\swvl2_20220910_1300.tif
Saved: output_tifs\swvl2\swvl2_20220910_1400.tif
Saved: output_tifs\swvl2\swvl2_20220910_1500.tif
Saved: output_tifs\swvl2\swvl2_20220910_1600.tif
Saved: output_tifs\swvl2\swvl2_20220910_1700.tif
Saved: output_tifs\swvl2\swvl2_20220910_1800.tif
Saved: output_tifs\swvl2\swvl2_20220910_1900.tif
Saved: output_tifs\swvl2\swvl2_20220910_2000.tif
Saved: output_tifs\swvl2\swvl2_20220910_2100.tif
Saved: output_tifs\swvl2\swvl2_20220910_2200.tif
Saved: output_tifs\swvl2\swvl2_20220910_2300.tif
Saved: output_tifs\swvl3\swvl3_20220901_0000.tif
Saved: output_tifs\swvl3\swvl3_20220901_0100.tif
Saved: output_tifs\swvl3\swvl3_20220901_0200.tif
Saved: output_tifs\swvl3\swvl3_20220901_0300.tif
Saved: output_tifs\swvl3\swvl3_20220901_0400.tif
Saved: output_tifs\swvl3\swvl3_20220901_0500.tif
Saved: output_tifs\swvl3\swvl3_20220901_0600.tif
Saved: output_tifs\swvl3\swvl3_20220901_0700.tif
Saved: output_tifs\swvl3\swvl3_20220901_0800.tif
Saved: output_tifs\swvl3\swvl3_20220901_0900.tif
Saved: output_tifs\swvl3\swvl3_20220901_1000.tif
Saved: output_tifs\swvl3\swvl3_20220901_1100.tif
Saved: output_tifs\swvl3\swvl3_20220901_1200.tif
Saved: output_tifs\swvl3\swvl3_20220901_1300.tif
Saved: output_tifs\swvl3\swvl3_20220901_1400.tif
Saved: output_tifs\swvl3\swvl3_20220901_1500.tif
Saved: output_tifs\swvl3\swvl3_20220901_1600.tif
Saved: output_tifs\swvl3\swvl3_20220901_1700.tif
Saved: output_tifs\swvl3\swvl3_20220901_1800.tif
Saved: output_tifs\swvl3\swvl3_20220901_1900.tif
Saved: output_tifs\swvl3\swvl3_20220901_2000.tif
Saved: output_tifs\swvl3\swvl3_20220901_2100.tif
Saved: output_tifs\swvl3\swvl3_20220901_2200.tif
Saved: output_tifs\swvl3\swvl3_20220901_2300.tif
Saved: output_tifs\swvl3\swvl3_20220902_0000.tif
Saved: output_tifs\swvl3\swvl3_20220902_0100.tif
Saved: output_tifs\swvl3\swvl3_20220902_0200.tif
Saved: output_tifs\swvl3\swvl3_20220902_0300.tif
Saved: output_tifs\swvl3\swvl3_20220902_0400.tif
Saved: output_tifs\swvl3\swvl3_20220902_0500.tif
Saved: output_tifs\swvl3\swvl3_20220902_0600.tif
Saved: output_tifs\swvl3\swvl3_20220902_0700.tif
Saved: output_tifs\swvl3\swvl3_20220902_0800.tif
Saved: output_tifs\swvl3\swvl3_20220902_0900.tif
Saved: output_tifs\swvl3\swvl3_20220902_1000.tif
Saved: output_tifs\swvl3\swvl3_20220902_1100.tif
Saved: output_tifs\swvl3\swvl3_20220902_1200.tif
Saved: output_tifs\swvl3\swvl3_20220902_1300.tif
Saved: output_tifs\swvl3\swvl3_20220902_1400.tif
Saved: output_tifs\swvl3\swvl3_20220902_1500.tif
Saved: output_tifs\swvl3\swvl3_20220902_1600.tif
Saved: output_tifs\swvl3\swvl3_20220902_1700.tif
Saved: output_tifs\swvl3\swvl3_20220902_1800.tif
Saved: output_tifs\swvl3\swvl3_20220902_1900.tif
Saved: output_tifs\swvl3\swvl3_20220902_2000.tif
Saved: output_tifs\swvl3\swvl3_20220902_2100.tif
Saved: output_tifs\swvl3\swvl3_20220902_2200.tif
Saved: output_tifs\swvl3\swvl3_20220902_2300.tif
Saved: output_tifs\swvl3\swvl3_20220903_0000.tif
Saved: output_tifs\swvl3\swvl3_20220903_0100.tif
Saved: output_tifs\swvl3\swvl3_20220903_0200.tif
Saved: output_tifs\swvl3\swvl3_20220903_0300.tif
Saved: output_tifs\swvl3\swvl3_20220903_0400.tif
Saved: output_tifs\swvl3\swvl3_20220903_0500.tif
Saved: output_tifs\swvl3\swvl3_20220903_0600.tif
Saved: output_tifs\swvl3\swvl3_20220903_0700.tif
Saved: output_tifs\swvl3\swvl3_20220903_0800.tif
Saved: output_tifs\swvl3\swvl3_20220903_0900.tif
Saved: output_tifs\swvl3\swvl3_20220903_1000.tif
Saved: output_tifs\swvl3\swvl3_20220903_1100.tif
Saved: output_tifs\swvl3\swvl3_20220903_1200.tif
Saved: output_tifs\swvl3\swvl3_20220903_1300.tif
Saved: output_tifs\swvl3\swvl3_20220903_1400.tif
Saved: output_tifs\swvl3\swvl3_20220903_1500.tif
Saved: output_tifs\swvl3\swvl3_20220903_1600.tif
Saved: output_tifs\swvl3\swvl3_20220903_1700.tif
Saved: output_tifs\swvl3\swvl3_20220903_1800.tif
Saved: output_tifs\swvl3\swvl3_20220903_1900.tif
Saved: output_tifs\swvl3\swvl3_20220903_2000.tif
Saved: output_tifs\swvl3\swvl3_20220903_2100.tif
Saved: output_tifs\swvl3\swvl3_20220903_2200.tif
Saved: output_tifs\swvl3\swvl3_20220903_2300.tif
Saved: output_tifs\swvl3\swvl3_20220904_0000.tif
Saved: output_tifs\swvl3\swvl3_20220904_0100.tif
Saved: output_tifs\swvl3\swvl3_20220904_0200.tif
Saved: output_tifs\swvl3\swvl3_20220904_0300.tif
Saved: output_tifs\swvl3\swvl3_20220904_0400.tif
Saved: output_tifs\swvl3\swvl3_20220904_0500.tif
Saved: output_tifs\swvl3\swvl3_20220904_0600.tif
Saved: output_tifs\swvl3\swvl3_20220904_0700.tif
Saved: output_tifs\swvl3\swvl3_20220904_0800.tif
Saved: output_tifs\swvl3\swvl3_20220904_0900.tif
Saved: output_tifs\swvl3\swvl3_20220904_1000.tif
Saved: output_tifs\swvl3\swvl3_20220904_1100.tif
Saved: output_tifs\swvl3\swvl3_20220904_1200.tif
Saved: output_tifs\swvl3\swvl3_20220904_1300.tif
Saved: output_tifs\swvl3\swvl3_20220904_1400.tif
Saved: output_tifs\swvl3\swvl3_20220904_1500.tif
Saved: output_tifs\swvl3\swvl3_20220904_1600.tif
Saved: output_tifs\swvl3\swvl3_20220904_1700.tif
Saved: output_tifs\swvl3\swvl3_20220904_1800.tif
Saved: output_tifs\swvl3\swvl3_20220904_1900.tif
Saved: output_tifs\swvl3\swvl3_20220904_2000.tif
Saved: output_tifs\swvl3\swvl3_20220904_2100.tif
Saved: output_tifs\swvl3\swvl3_20220904_2200.tif
Saved: output_tifs\swvl3\swvl3_20220904_2300.tif
Saved: output_tifs\swvl3\swvl3_20220905_0000.tif
Saved: output_tifs\swvl3\swvl3_20220905_0100.tif
Saved: output_tifs\swvl3\swvl3_20220905_0200.tif
Saved: output_tifs\swvl3\swvl3_20220905_0300.tif
Saved: output_tifs\swvl3\swvl3_20220905_0400.tif
Saved: output_tifs\swvl3\swvl3_20220905_0500.tif
Saved: output_tifs\swvl3\swvl3_20220905_0600.tif
Saved: output_tifs\swvl3\swvl3_20220905_0700.tif
Saved: output_tifs\swvl3\swvl3_20220905_0800.tif
Saved: output_tifs\swvl3\swvl3_20220905_0900.tif
Saved: output_tifs\swvl3\swvl3_20220905_1000.tif
Saved: output_tifs\swvl3\swvl3_20220905_1100.tif
Saved: output_tifs\swvl3\swvl3_20220905_1200.tif
Saved: output_tifs\swvl3\swvl3_20220905_1300.tif
Saved: output_tifs\swvl3\swvl3_20220905_1400.tif
Saved: output_tifs\swvl3\swvl3_20220905_1500.tif
Saved: output_tifs\swvl3\swvl3_20220905_1600.tif
Saved: output_tifs\swvl3\swvl3_20220905_1700.tif
Saved: output_tifs\swvl3\swvl3_20220905_1800.tif
Saved: output_tifs\swvl3\swvl3_20220905_1900.tif
Saved: output_tifs\swvl3\swvl3_20220905_2000.tif
Saved: output_tifs\swvl3\swvl3_20220905_2100.tif
Saved: output_tifs\swvl3\swvl3_20220905_2200.tif
Saved: output_tifs\swvl3\swvl3_20220905_2300.tif
Saved: output_tifs\swvl3\swvl3_20220906_0000.tif
Saved: output_tifs\swvl3\swvl3_20220906_0100.tif
Saved: output_tifs\swvl3\swvl3_20220906_0200.tif
Saved: output_tifs\swvl3\swvl3_20220906_0300.tif
Saved: output_tifs\swvl3\swvl3_20220906_0400.tif
Saved: output_tifs\swvl3\swvl3_20220906_0500.tif
Saved: output_tifs\swvl3\swvl3_20220906_0600.tif
Saved: output_tifs\swvl3\swvl3_20220906_0700.tif
Saved: output_tifs\swvl3\swvl3_20220906_0800.tif
Saved: output_tifs\swvl3\swvl3_20220906_0900.tif
Saved: output_tifs\swvl3\swvl3_20220906_1000.tif
Saved: output_tifs\swvl3\swvl3_20220906_1100.tif
Saved: output_tifs\swvl3\swvl3_20220906_1200.tif
Saved: output_tifs\swvl3\swvl3_20220906_1300.tif
Saved: output_tifs\swvl3\swvl3_20220906_1400.tif
Saved: output_tifs\swvl3\swvl3_20220906_1500.tif
Saved: output_tifs\swvl3\swvl3_20220906_1600.tif
Saved: output_tifs\swvl3\swvl3_20220906_1700.tif
Saved: output_tifs\swvl3\swvl3_20220906_1800.tif
Saved: output_tifs\swvl3\swvl3_20220906_1900.tif
Saved: output_tifs\swvl3\swvl3_20220906_2000.tif
Saved: output_tifs\swvl3\swvl3_20220906_2100.tif
Saved: output_tifs\swvl3\swvl3_20220906_2200.tif
Saved: output_tifs\swvl3\swvl3_20220906_2300.tif
Saved: output_tifs\swvl3\swvl3_20220907_0000.tif
Saved: output_tifs\swvl3\swvl3_20220907_0100.tif
Saved: output_tifs\swvl3\swvl3_20220907_0200.tif
Saved: output_tifs\swvl3\swvl3_20220907_0300.tif
Saved: output_tifs\swvl3\swvl3_20220907_0400.tif
Saved: output_tifs\swvl3\swvl3_20220907_0500.tif
Saved: output_tifs\swvl3\swvl3_20220907_0600.tif
Saved: output_tifs\swvl3\swvl3_20220907_0700.tif
Saved: output_tifs\swvl3\swvl3_20220907_0800.tif
Saved: output_tifs\swvl3\swvl3_20220907_0900.tif
Saved: output_tifs\swvl3\swvl3_20220907_1000.tif
Saved: output_tifs\swvl3\swvl3_20220907_1100.tif
Saved: output_tifs\swvl3\swvl3_20220907_1200.tif
Saved: output_tifs\swvl3\swvl3_20220907_1300.tif
Saved: output_tifs\swvl3\swvl3_20220907_1400.tif
Saved: output_tifs\swvl3\swvl3_20220907_1500.tif
Saved: output_tifs\swvl3\swvl3_20220907_1600.tif
Saved: output_tifs\swvl3\swvl3_20220907_1700.tif
Saved: output_tifs\swvl3\swvl3_20220907_1800.tif
Saved: output_tifs\swvl3\swvl3_20220907_1900.tif
Saved: output_tifs\swvl3\swvl3_20220907_2000.tif
Saved: output_tifs\swvl3\swvl3_20220907_2100.tif
Saved: output_tifs\swvl3\swvl3_20220907_2200.tif
Saved: output_tifs\swvl3\swvl3_20220907_2300.tif
Saved: output_tifs\swvl3\swvl3_20220908_0000.tif
Saved: output_tifs\swvl3\swvl3_20220908_0100.tif
Saved: output_tifs\swvl3\swvl3_20220908_0200.tif
Saved: output_tifs\swvl3\swvl3_20220908_0300.tif
Saved: output_tifs\swvl3\swvl3_20220908_0400.tif
Saved: output_tifs\swvl3\swvl3_20220908_0500.tif
Saved: output_tifs\swvl3\swvl3_20220908_0600.tif
Saved: output_tifs\swvl3\swvl3_20220908_0700.tif
Saved: output_tifs\swvl3\swvl3_20220908_0800.tif
Saved: output_tifs\swvl3\swvl3_20220908_0900.tif
Saved: output_tifs\swvl3\swvl3_20220908_1000.tif
Saved: output_tifs\swvl3\swvl3_20220908_1100.tif
Saved: output_tifs\swvl3\swvl3_20220908_1200.tif
Saved: output_tifs\swvl3\swvl3_20220908_1300.tif
Saved: output_tifs\swvl3\swvl3_20220908_1400.tif
Saved: output_tifs\swvl3\swvl3_20220908_1500.tif
Saved: output_tifs\swvl3\swvl3_20220908_1600.tif
Saved: output_tifs\swvl3\swvl3_20220908_1700.tif
Saved: output_tifs\swvl3\swvl3_20220908_1800.tif
Saved: output_tifs\swvl3\swvl3_20220908_1900.tif
Saved: output_tifs\swvl3\swvl3_20220908_2000.tif
Saved: output_tifs\swvl3\swvl3_20220908_2100.tif
Saved: output_tifs\swvl3\swvl3_20220908_2200.tif
Saved: output_tifs\swvl3\swvl3_20220908_2300.tif
Saved: output_tifs\swvl3\swvl3_20220909_0000.tif
Saved: output_tifs\swvl3\swvl3_20220909_0100.tif
Saved: output_tifs\swvl3\swvl3_20220909_0200.tif
Saved: output_tifs\swvl3\swvl3_20220909_0300.tif
Saved: output_tifs\swvl3\swvl3_20220909_0400.tif
Saved: output_tifs\swvl3\swvl3_20220909_0500.tif
Saved: output_tifs\swvl3\swvl3_20220909_0600.tif
Saved: output_tifs\swvl3\swvl3_20220909_0700.tif
Saved: output_tifs\swvl3\swvl3_20220909_0800.tif
Saved: output_tifs\swvl3\swvl3_20220909_0900.tif
Saved: output_tifs\swvl3\swvl3_20220909_1000.tif
Saved: output_tifs\swvl3\swvl3_20220909_1100.tif
Saved: output_tifs\swvl3\swvl3_20220909_1200.tif
Saved: output_tifs\swvl3\swvl3_20220909_1300.tif
Saved: output_tifs\swvl3\swvl3_20220909_1400.tif
Saved: output_tifs\swvl3\swvl3_20220909_1500.tif
Saved: output_tifs\swvl3\swvl3_20220909_1600.tif
Saved: output_tifs\swvl3\swvl3_20220909_1700.tif
Saved: output_tifs\swvl3\swvl3_20220909_1800.tif
Saved: output_tifs\swvl3\swvl3_20220909_1900.tif
Saved: output_tifs\swvl3\swvl3_20220909_2000.tif
Saved: output_tifs\swvl3\swvl3_20220909_2100.tif
Saved: output_tifs\swvl3\swvl3_20220909_2200.tif
Saved: output_tifs\swvl3\swvl3_20220909_2300.tif
Saved: output_tifs\swvl3\swvl3_20220910_0000.tif
Saved: output_tifs\swvl3\swvl3_20220910_0100.tif
Saved: output_tifs\swvl3\swvl3_20220910_0200.tif
Saved: output_tifs\swvl3\swvl3_20220910_0300.tif
Saved: output_tifs\swvl3\swvl3_20220910_0400.tif
Saved: output_tifs\swvl3\swvl3_20220910_0500.tif
Saved: output_tifs\swvl3\swvl3_20220910_0600.tif
Saved: output_tifs\swvl3\swvl3_20220910_0700.tif
Saved: output_tifs\swvl3\swvl3_20220910_0800.tif
Saved: output_tifs\swvl3\swvl3_20220910_0900.tif
Saved: output_tifs\swvl3\swvl3_20220910_1000.tif
Saved: output_tifs\swvl3\swvl3_20220910_1100.tif
Saved: output_tifs\swvl3\swvl3_20220910_1200.tif
Saved: output_tifs\swvl3\swvl3_20220910_1300.tif
Saved: output_tifs\swvl3\swvl3_20220910_1400.tif
Saved: output_tifs\swvl3\swvl3_20220910_1500.tif
Saved: output_tifs\swvl3\swvl3_20220910_1600.tif
Saved: output_tifs\swvl3\swvl3_20220910_1700.tif
Saved: output_tifs\swvl3\swvl3_20220910_1800.tif
Saved: output_tifs\swvl3\swvl3_20220910_1900.tif
Saved: output_tifs\swvl3\swvl3_20220910_2000.tif
Saved: output_tifs\swvl3\swvl3_20220910_2100.tif
Saved: output_tifs\swvl3\swvl3_20220910_2200.tif
Saved: output_tifs\swvl3\swvl3_20220910_2300.tif
Saved: output_tifs\swvl4\swvl4_20220901_0000.tif
Saved: output_tifs\swvl4\swvl4_20220901_0100.tif
Saved: output_tifs\swvl4\swvl4_20220901_0200.tif
Saved: output_tifs\swvl4\swvl4_20220901_0300.tif
Saved: output_tifs\swvl4\swvl4_20220901_0400.tif
Saved: output_tifs\swvl4\swvl4_20220901_0500.tif
Saved: output_tifs\swvl4\swvl4_20220901_0600.tif
Saved: output_tifs\swvl4\swvl4_20220901_0700.tif
Saved: output_tifs\swvl4\swvl4_20220901_0800.tif
Saved: output_tifs\swvl4\swvl4_20220901_0900.tif
Saved: output_tifs\swvl4\swvl4_20220901_1000.tif
Saved: output_tifs\swvl4\swvl4_20220901_1100.tif
Saved: output_tifs\swvl4\swvl4_20220901_1200.tif
Saved: output_tifs\swvl4\swvl4_20220901_1300.tif
Saved: output_tifs\swvl4\swvl4_20220901_1400.tif
Saved: output_tifs\swvl4\swvl4_20220901_1500.tif
Saved: output_tifs\swvl4\swvl4_20220901_1600.tif
Saved: output_tifs\swvl4\swvl4_20220901_1700.tif
Saved: output_tifs\swvl4\swvl4_20220901_1800.tif
Saved: output_tifs\swvl4\swvl4_20220901_1900.tif
Saved: output_tifs\swvl4\swvl4_20220901_2000.tif
Saved: output_tifs\swvl4\swvl4_20220901_2100.tif
Saved: output_tifs\swvl4\swvl4_20220901_2200.tif
Saved: output_tifs\swvl4\swvl4_20220901_2300.tif
Saved: output_tifs\swvl4\swvl4_20220902_0000.tif
Saved: output_tifs\swvl4\swvl4_20220902_0100.tif
Saved: output_tifs\swvl4\swvl4_20220902_0200.tif
Saved: output_tifs\swvl4\swvl4_20220902_0300.tif
Saved: output_tifs\swvl4\swvl4_20220902_0400.tif
Saved: output_tifs\swvl4\swvl4_20220902_0500.tif
Saved: output_tifs\swvl4\swvl4_20220902_0600.tif
Saved: output_tifs\swvl4\swvl4_20220902_0700.tif
Saved: output_tifs\swvl4\swvl4_20220902_0800.tif
Saved: output_tifs\swvl4\swvl4_20220902_0900.tif
Saved: output_tifs\swvl4\swvl4_20220902_1000.tif
Saved: output_tifs\swvl4\swvl4_20220902_1100.tif
Saved: output_tifs\swvl4\swvl4_20220902_1200.tif
Saved: output_tifs\swvl4\swvl4_20220902_1300.tif
Saved: output_tifs\swvl4\swvl4_20220902_1400.tif
Saved: output_tifs\swvl4\swvl4_20220902_1500.tif
Saved: output_tifs\swvl4\swvl4_20220902_1600.tif
Saved: output_tifs\swvl4\swvl4_20220902_1700.tif
Saved: output_tifs\swvl4\swvl4_20220902_1800.tif
Saved: output_tifs\swvl4\swvl4_20220902_1900.tif
Saved: output_tifs\swvl4\swvl4_20220902_2000.tif
Saved: output_tifs\swvl4\swvl4_20220902_2100.tif
Saved: output_tifs\swvl4\swvl4_20220902_2200.tif
Saved: output_tifs\swvl4\swvl4_20220902_2300.tif
Saved: output_tifs\swvl4\swvl4_20220903_0000.tif
Saved: output_tifs\swvl4\swvl4_20220903_0100.tif
Saved: output_tifs\swvl4\swvl4_20220903_0200.tif
Saved: output_tifs\swvl4\swvl4_20220903_0300.tif
Saved: output_tifs\swvl4\swvl4_20220903_0400.tif
Saved: output_tifs\swvl4\swvl4_20220903_0500.tif
Saved: output_tifs\swvl4\swvl4_20220903_0600.tif
Saved: output_tifs\swvl4\swvl4_20220903_0700.tif
Saved: output_tifs\swvl4\swvl4_20220903_0800.tif
Saved: output_tifs\swvl4\swvl4_20220903_0900.tif
Saved: output_tifs\swvl4\swvl4_20220903_1000.tif
Saved: output_tifs\swvl4\swvl4_20220903_1100.tif
Saved: output_tifs\swvl4\swvl4_20220903_1200.tif
Saved: output_tifs\swvl4\swvl4_20220903_1300.tif
Saved: output_tifs\swvl4\swvl4_20220903_1400.tif
Saved: output_tifs\swvl4\swvl4_20220903_1500.tif
Saved: output_tifs\swvl4\swvl4_20220903_1600.tif
Saved: output_tifs\swvl4\swvl4_20220903_1700.tif
Saved: output_tifs\swvl4\swvl4_20220903_1800.tif
Saved: output_tifs\swvl4\swvl4_20220903_1900.tif
Saved: output_tifs\swvl4\swvl4_20220903_2000.tif
Saved: output_tifs\swvl4\swvl4_20220903_2100.tif
Saved: output_tifs\swvl4\swvl4_20220903_2200.tif
Saved: output_tifs\swvl4\swvl4_20220903_2300.tif
Saved: output_tifs\swvl4\swvl4_20220904_0000.tif
Saved: output_tifs\swvl4\swvl4_20220904_0100.tif
Saved: output_tifs\swvl4\swvl4_20220904_0200.tif
Saved: output_tifs\swvl4\swvl4_20220904_0300.tif
Saved: output_tifs\swvl4\swvl4_20220904_0400.tif
Saved: output_tifs\swvl4\swvl4_20220904_0500.tif
Saved: output_tifs\swvl4\swvl4_20220904_0600.tif
Saved: output_tifs\swvl4\swvl4_20220904_0700.tif
Saved: output_tifs\swvl4\swvl4_20220904_0800.tif
Saved: output_tifs\swvl4\swvl4_20220904_0900.tif
Saved: output_tifs\swvl4\swvl4_20220904_1000.tif
Saved: output_tifs\swvl4\swvl4_20220904_1100.tif
Saved: output_tifs\swvl4\swvl4_20220904_1200.tif
Saved: output_tifs\swvl4\swvl4_20220904_1300.tif
Saved: output_tifs\swvl4\swvl4_20220904_1400.tif
Saved: output_tifs\swvl4\swvl4_20220904_1500.tif
Saved: output_tifs\swvl4\swvl4_20220904_1600.tif
Saved: output_tifs\swvl4\swvl4_20220904_1700.tif
Saved: output_tifs\swvl4\swvl4_20220904_1800.tif
Saved: output_tifs\swvl4\swvl4_20220904_1900.tif
Saved: output_tifs\swvl4\swvl4_20220904_2000.tif
Saved: output_tifs\swvl4\swvl4_20220904_2100.tif
Saved: output_tifs\swvl4\swvl4_20220904_2200.tif
Saved: output_tifs\swvl4\swvl4_20220904_2300.tif
Saved: output_tifs\swvl4\swvl4_20220905_0000.tif
Saved: output_tifs\swvl4\swvl4_20220905_0100.tif
Saved: output_tifs\swvl4\swvl4_20220905_0200.tif
Saved: output_tifs\swvl4\swvl4_20220905_0300.tif
Saved: output_tifs\swvl4\swvl4_20220905_0400.tif
Saved: output_tifs\swvl4\swvl4_20220905_0500.tif
Saved: output_tifs\swvl4\swvl4_20220905_0600.tif
Saved: output_tifs\swvl4\swvl4_20220905_0700.tif
Saved: output_tifs\swvl4\swvl4_20220905_0800.tif
Saved: output_tifs\swvl4\swvl4_20220905_0900.tif
Saved: output_tifs\swvl4\swvl4_20220905_1000.tif
Saved: output_tifs\swvl4\swvl4_20220905_1100.tif
Saved: output_tifs\swvl4\swvl4_20220905_1200.tif
Saved: output_tifs\swvl4\swvl4_20220905_1300.tif
Saved: output_tifs\swvl4\swvl4_20220905_1400.tif
Saved: output_tifs\swvl4\swvl4_20220905_1500.tif
Saved: output_tifs\swvl4\swvl4_20220905_1600.tif
Saved: output_tifs\swvl4\swvl4_20220905_1700.tif
Saved: output_tifs\swvl4\swvl4_20220905_1800.tif
Saved: output_tifs\swvl4\swvl4_20220905_1900.tif
Saved: output_tifs\swvl4\swvl4_20220905_2000.tif
Saved: output_tifs\swvl4\swvl4_20220905_2100.tif
Saved: output_tifs\swvl4\swvl4_20220905_2200.tif
Saved: output_tifs\swvl4\swvl4_20220905_2300.tif
Saved: output_tifs\swvl4\swvl4_20220906_0000.tif
Saved: output_tifs\swvl4\swvl4_20220906_0100.tif
Saved: output_tifs\swvl4\swvl4_20220906_0200.tif
Saved: output_tifs\swvl4\swvl4_20220906_0300.tif
Saved: output_tifs\swvl4\swvl4_20220906_0400.tif
Saved: output_tifs\swvl4\swvl4_20220906_0500.tif
Saved: output_tifs\swvl4\swvl4_20220906_0600.tif
Saved: output_tifs\swvl4\swvl4_20220906_0700.tif
Saved: output_tifs\swvl4\swvl4_20220906_0800.tif
Saved: output_tifs\swvl4\swvl4_20220906_0900.tif
Saved: output_tifs\swvl4\swvl4_20220906_1000.tif
Saved: output_tifs\swvl4\swvl4_20220906_1100.tif
Saved: output_tifs\swvl4\swvl4_20220906_1200.tif
Saved: output_tifs\swvl4\swvl4_20220906_1300.tif
Saved: output_tifs\swvl4\swvl4_20220906_1400.tif
Saved: output_tifs\swvl4\swvl4_20220906_1500.tif
Saved: output_tifs\swvl4\swvl4_20220906_1600.tif
Saved: output_tifs\swvl4\swvl4_20220906_1700.tif
Saved: output_tifs\swvl4\swvl4_20220906_1800.tif
Saved: output_tifs\swvl4\swvl4_20220906_1900.tif
Saved: output_tifs\swvl4\swvl4_20220906_2000.tif
Saved: output_tifs\swvl4\swvl4_20220906_2100.tif
Saved: output_tifs\swvl4\swvl4_20220906_2200.tif
Saved: output_tifs\swvl4\swvl4_20220906_2300.tif
Saved: output_tifs\swvl4\swvl4_20220907_0000.tif
Saved: output_tifs\swvl4\swvl4_20220907_0100.tif
Saved: output_tifs\swvl4\swvl4_20220907_0200.tif
Saved: output_tifs\swvl4\swvl4_20220907_0300.tif
Saved: output_tifs\swvl4\swvl4_20220907_0400.tif
Saved: output_tifs\swvl4\swvl4_20220907_0500.tif
Saved: output_tifs\swvl4\swvl4_20220907_0600.tif
Saved: output_tifs\swvl4\swvl4_20220907_0700.tif
Saved: output_tifs\swvl4\swvl4_20220907_0800.tif
Saved: output_tifs\swvl4\swvl4_20220907_0900.tif
Saved: output_tifs\swvl4\swvl4_20220907_1000.tif
Saved: output_tifs\swvl4\swvl4_20220907_1100.tif
Saved: output_tifs\swvl4\swvl4_20220907_1200.tif
Saved: output_tifs\swvl4\swvl4_20220907_1300.tif
Saved: output_tifs\swvl4\swvl4_20220907_1400.tif
Saved: output_tifs\swvl4\swvl4_20220907_1500.tif
Saved: output_tifs\swvl4\swvl4_20220907_1600.tif
Saved: output_tifs\swvl4\swvl4_20220907_1700.tif
Saved: output_tifs\swvl4\swvl4_20220907_1800.tif
Saved: output_tifs\swvl4\swvl4_20220907_1900.tif
Saved: output_tifs\swvl4\swvl4_20220907_2000.tif
Saved: output_tifs\swvl4\swvl4_20220907_2100.tif
Saved: output_tifs\swvl4\swvl4_20220907_2200.tif
Saved: output_tifs\swvl4\swvl4_20220907_2300.tif
Saved: output_tifs\swvl4\swvl4_20220908_0000.tif
Saved: output_tifs\swvl4\swvl4_20220908_0100.tif
Saved: output_tifs\swvl4\swvl4_20220908_0200.tif
Saved: output_tifs\swvl4\swvl4_20220908_0300.tif
Saved: output_tifs\swvl4\swvl4_20220908_0400.tif
Saved: output_tifs\swvl4\swvl4_20220908_0500.tif
Saved: output_tifs\swvl4\swvl4_20220908_0600.tif
Saved: output_tifs\swvl4\swvl4_20220908_0700.tif
Saved: output_tifs\swvl4\swvl4_20220908_0800.tif
Saved: output_tifs\swvl4\swvl4_20220908_0900.tif
Saved: output_tifs\swvl4\swvl4_20220908_1000.tif
Saved: output_tifs\swvl4\swvl4_20220908_1100.tif
Saved: output_tifs\swvl4\swvl4_20220908_1200.tif
Saved: output_tifs\swvl4\swvl4_20220908_1300.tif
Saved: output_tifs\swvl4\swvl4_20220908_1400.tif
Saved: output_tifs\swvl4\swvl4_20220908_1500.tif
Saved: output_tifs\swvl4\swvl4_20220908_1600.tif
Saved: output_tifs\swvl4\swvl4_20220908_1700.tif
Saved: output_tifs\swvl4\swvl4_20220908_1800.tif
Saved: output_tifs\swvl4\swvl4_20220908_1900.tif
Saved: output_tifs\swvl4\swvl4_20220908_2000.tif
Saved: output_tifs\swvl4\swvl4_20220908_2100.tif
Saved: output_tifs\swvl4\swvl4_20220908_2200.tif
Saved: output_tifs\swvl4\swvl4_20220908_2300.tif
Saved: output_tifs\swvl4\swvl4_20220909_0000.tif
Saved: output_tifs\swvl4\swvl4_20220909_0100.tif
Saved: output_tifs\swvl4\swvl4_20220909_0200.tif
Saved: output_tifs\swvl4\swvl4_20220909_0300.tif
Saved: output_tifs\swvl4\swvl4_20220909_0400.tif
Saved: output_tifs\swvl4\swvl4_20220909_0500.tif
Saved: output_tifs\swvl4\swvl4_20220909_0600.tif
Saved: output_tifs\swvl4\swvl4_20220909_0700.tif
Saved: output_tifs\swvl4\swvl4_20220909_0800.tif
Saved: output_tifs\swvl4\swvl4_20220909_0900.tif
Saved: output_tifs\swvl4\swvl4_20220909_1000.tif
Saved: output_tifs\swvl4\swvl4_20220909_1100.tif
Saved: output_tifs\swvl4\swvl4_20220909_1200.tif
Saved: output_tifs\swvl4\swvl4_20220909_1300.tif
Saved: output_tifs\swvl4\swvl4_20220909_1400.tif
Saved: output_tifs\swvl4\swvl4_20220909_1500.tif
Saved: output_tifs\swvl4\swvl4_20220909_1600.tif
Saved: output_tifs\swvl4\swvl4_20220909_1700.tif
Saved: output_tifs\swvl4\swvl4_20220909_1800.tif
Saved: output_tifs\swvl4\swvl4_20220909_1900.tif
Saved: output_tifs\swvl4\swvl4_20220909_2000.tif
Saved: output_tifs\swvl4\swvl4_20220909_2100.tif
Saved: output_tifs\swvl4\swvl4_20220909_2200.tif
Saved: output_tifs\swvl4\swvl4_20220909_2300.tif
Saved: output_tifs\swvl4\swvl4_20220910_0000.tif
Saved: output_tifs\swvl4\swvl4_20220910_0100.tif
Saved: output_tifs\swvl4\swvl4_20220910_0200.tif
Saved: output_tifs\swvl4\swvl4_20220910_0300.tif
Saved: output_tifs\swvl4\swvl4_20220910_0400.tif
Saved: output_tifs\swvl4\swvl4_20220910_0500.tif
Saved: output_tifs\swvl4\swvl4_20220910_0600.tif
Saved: output_tifs\swvl4\swvl4_20220910_0700.tif
Saved: output_tifs\swvl4\swvl4_20220910_0800.tif
Saved: output_tifs\swvl4\swvl4_20220910_0900.tif
Saved: output_tifs\swvl4\swvl4_20220910_1000.tif
Saved: output_tifs\swvl4\swvl4_20220910_1100.tif
Saved: output_tifs\swvl4\swvl4_20220910_1200.tif
Saved: output_tifs\swvl4\swvl4_20220910_1300.tif
Saved: output_tifs\swvl4\swvl4_20220910_1400.tif
Saved: output_tifs\swvl4\swvl4_20220910_1500.tif
Saved: output_tifs\swvl4\swvl4_20220910_1600.tif
Saved: output_tifs\swvl4\swvl4_20220910_1700.tif
Saved: output_tifs\swvl4\swvl4_20220910_1800.tif
Saved: output_tifs\swvl4\swvl4_20220910_1900.tif
Saved: output_tifs\swvl4\swvl4_20220910_2000.tif
Saved: output_tifs\swvl4\swvl4_20220910_2100.tif
Saved: output_tifs\swvl4\swvl4_20220910_2200.tif
Saved: output_tifs\swvl4\swvl4_20220910_2300.tif
Processing complete. GeoTIFF files saved in: output_tifs

尝试重投影 重采样

  • 读取指定tif文件,查看其源数据地理信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from osgeo import gdal, osr

# Input reference TIFF file
fault_tif = r'E:\zjh\luding\georesultfile\tif\fault.tif'

def inspect_tif_metadata(tif_file):
try:
# Open the TIFF file
ds = gdal.Open(tif_file)
if ds is None:
raise ValueError(f"Failed to open {tif_file}")

# Get geotransform
geotransform = ds.GetGeoTransform()
pixel_width = geotransform[1]
pixel_height = abs(geotransform[5]) # Absolute value for height
x_min = geotransform[0]
y_max = geotransform[3]
cols = ds.RasterXSize
rows = ds.RasterYSize
x_max = x_min + cols * pixel_width
y_min = y_max - rows * pixel_height

# Get projection
srs = osr.SpatialReference()
srs.ImportFromWkt(ds.GetProjection())
epsg_code = srs.GetAuthorityCode(None) if srs.GetAuthorityName(None) == 'EPSG' else 'Unknown'
proj_wkt = srs.ExportToWkt()

# Print metadata
print(f"Metadata for {tif_file}:")
print("=" * 50)
print(f"CRS: EPSG:{epsg_code}")
print(f"Projection WKT: {proj_wkt}")
print(f"Pixel Size: {pixel_width} × {pixel_height} meters")
print(f"Extent (xmin, ymin, xmax, ymax): ({x_min}, {y_min}, {x_max}, {y_max})")
print(f"Raster Size: {cols} columns × {rows} rows")
print(f"Number of Bands: {ds.RasterCount}")
print(f"NoData Value: {ds.GetRasterBand(1).GetNoDataValue()}")

ds = None
except Exception as e:
print(f"Error reading {tif_file}: {e}")
1
2
gdal.UseExceptions()
inspect_tif_metadata(fault_tif)
Metadata for E:\zjh\luding\georesultfile\tif\fault.tif:
==================================================
CRS: EPSG:32662
Projection WKT: PROJCS["WGS 84 / Plate Carree",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Equirectangular"],PARAMETER["standard_parallel_1",0],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32662"]]
Pixel Size: 30.0 × 30.0 meters
Extent (xmin, ymin, xmax, ymax): (11298917.826947343, 3228233.2632888057, 11410277.826947343, 3339593.2632888057)
Raster Size: 3712 columns × 3712 rows
Number of Bands: 1
NoData Value: -3.4028230607370965e+38
  • 投影、重采样至30*30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os
import glob
from osgeo import gdal

# Input and output directories
input_dir = 'output_tifs_new' # 修改此路径
output_dir = 'output_tifs_reprojected'

# Target CRS and resolution
target_epsg = 'EPSG:32662' # WGS 84 / Plate Carree
target_resolution = (30, 30) # 30m x 30m

def reproject_geotiff(input_tif, output_tif, target_epsg, target_resolution):
try:
# Open input TIFF
src_ds = gdal.Open(input_tif)
if src_ds is None:
raise ValueError(f"Failed to open {input_tif}")

# Set warp options
warp_options = gdal.WarpOptions(
dstSRS=target_epsg,
xRes=target_resolution[0],
yRes=target_resolution[1],
resampleAlg='bilinear', # Suitable for soil moisture
outputType=gdal.GDT_Float32,
dstNodata=-9999,
srcNodata=-9999,
creationOptions=['COMPRESS=LZW'],
multithread=True
)

# Create output directory if it doesn't exist
os.makedirs(os.path.dirname(output_tif), exist_ok=True)

# Perform reprojection
gdal.Warp(
output_tif,
src_ds,
options=warp_options
)

print(f'Reprojected: {output_tif}')

src_ds = None
except Exception as e:
print(f"Error reprojecting {input_tif}: {e}")

def reproject_all_tiffs(input_dir, output_dir, target_epsg, target_resolution):
try:
# Find all TIFF files in input_dir
tiff_files = []
for root, _, files in os.walk(input_dir):
for file in files:
if file.endswith('.tif'):
tiff_files.append(os.path.join(root, file))

if not tiff_files:
print(f"No TIFF files found in {input_dir}")
return

print(f"Found {len(tiff_files)} TIFF files to reproject")

# Process each TIFF
for input_tif in tiff_files:
# Compute output path
rel_path = os.path.relpath(input_tif, input_dir)
output_tif = os.path.join(output_dir, rel_path)

# Reproject
reproject_geotiff(input_tif, output_tif, target_epsg, target_resolution)

except Exception as e:
print(f"Error processing TIFF files: {e}")


1
2
3
gdal.UseExceptions()
reproject_all_tiffs(input_dir, output_dir, target_epsg, target_resolution)
print("Reprojection complete. Reprojected GeoTIFF files saved in:", output_dir)
输出内容4
Found 96 TIFF files to reproject
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0000.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0100.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0200.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0300.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0400.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0500.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0600.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0700.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0800.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_0900.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1000.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1100.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1200.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1300.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1400.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1500.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1600.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1700.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1800.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_1900.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_2000.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_2100.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_2200.tif
Reprojected: output_tifs_reprojected\swvl1\swvl1_20220905_2300.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0000.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0100.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0200.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0300.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0400.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0500.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0600.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0700.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0800.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_0900.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1000.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1100.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1200.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1300.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1400.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1500.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1600.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1700.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1800.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_1900.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_2000.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_2100.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_2200.tif
Reprojected: output_tifs_reprojected\swvl2\swvl2_20220905_2300.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0000.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0100.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0200.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0300.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0400.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0500.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0600.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0700.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0800.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_0900.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1000.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1100.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1200.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1300.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1400.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1500.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1600.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1700.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1800.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_1900.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_2000.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_2100.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_2200.tif
Reprojected: output_tifs_reprojected\swvl3\swvl3_20220905_2300.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0000.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0100.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0200.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0300.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0400.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0500.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0600.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0700.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0800.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_0900.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1000.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1100.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1200.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1300.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1400.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1500.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1600.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1700.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1800.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_1900.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_2000.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_2100.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_2200.tif
Reprojected: output_tifs_reprojected\swvl4\swvl4_20220905_2300.tif
Reprojection complete. Reprojected GeoTIFF files saved in: output_tifs_reprojected
  • ipynb转md
1
jupyter nbconvert --to markdown filename.ipynb

在控制台输入命令:

hexo cl; hexo s

确认blog无误推送的话:

hexo cl; hexo g; hexo d