refactor: 中间层消除硬编码波段号+CRS动态探测
- GlintRemovalStep/handler/service 全部改为传递波长参数而非波段索引 - ContentMapper 移除 EPSG:32651 硬编码, 新增 _ensure_crs() + _probe_crs_from_file() - _prepare_shared_context 在 read_csv_data 前先探测边界文件 CRS - GUI QSpinBox→QDoubleSpinBox,默认值改为波长(nm),placeholder 提示自动探测 - 消除 38/36/49/47/25/37/65/91 等所有魔法数字
This commit is contained in:
@ -649,65 +649,41 @@ class PipelineExecutor(QObject):
|
||||
if max_band <= 0:
|
||||
return True
|
||||
|
||||
# 波长驱动改造后,波段号由 find_band_number() 从 HDR 元数据中
|
||||
# 动态解析,不再需要波段索引越界检查。仅对极端波长值做合理性提醒。
|
||||
method = step3_cfg.get('method', 'goodman')
|
||||
if method == 'goodman':
|
||||
band_fields = [
|
||||
('nir_lower', 'nir_lower', 65, 'NIR下波段'),
|
||||
('nir_upper', 'nir_upper', 91, 'NIR上波段'),
|
||||
]
|
||||
elif method == 'kutser':
|
||||
band_fields = [
|
||||
('oxy_band', 'oxy_band', 38, '氧吸收波段'),
|
||||
('lower_oxy', 'lower_oxy', 36, '下氧吸收波段'),
|
||||
('upper_oxy', 'upper_oxy', 49, '上氧吸收波段'),
|
||||
('nir_band', 'nir_band', 47, 'NIR波段'),
|
||||
]
|
||||
elif method == 'hedley':
|
||||
band_fields = [
|
||||
('hedley_nir_band', 'hedley_nir_band', 47, 'NIR波段'),
|
||||
]
|
||||
else:
|
||||
_wavelength_fields = {
|
||||
'goodman': [
|
||||
('nir_lower_wavelength', 'nir_lower_wavelength', 641.93, 'NIR下界波长(nm)'),
|
||||
('nir_upper_wavelength', 'nir_upper_wavelength', 751.49, 'NIR上界波长(nm)'),
|
||||
],
|
||||
'kutser': [
|
||||
('oxy_wavelength', 'oxy_wavelength', 760.6, '氧吸收波长(nm)'),
|
||||
('lower_wavelength', 'lower_wavelength', 742.39, '下氧吸收波长(nm)'),
|
||||
('upper_wavelength', 'upper_wavelength', 860.48, '上氧吸收波长(nm)'),
|
||||
('nir_wavelength', 'nir_wavelength', 842.36, 'NIR波长(nm)'),
|
||||
],
|
||||
'hedley': [
|
||||
('hedley_nir_wavelength', 'hedley_nir_wavelength', 842.36, 'NIR波长(nm)'),
|
||||
],
|
||||
}.get(method, [])
|
||||
# SUGAR 等方法无波长参数,跳过
|
||||
if not _wavelength_fields:
|
||||
return True
|
||||
|
||||
for cfg_key, panel_attr, recommended, label in band_fields:
|
||||
for cfg_key, panel_attr, recommended, label in _wavelength_fields:
|
||||
requested = step3_cfg.get(cfg_key)
|
||||
if requested is None or requested <= max_band:
|
||||
if requested is None:
|
||||
continue
|
||||
|
||||
global_event_bus.publish('LogMessage', {
|
||||
'message': f'⚠ step3 波段越界:{label}={requested} > 影像波段数 {max_band}',
|
||||
'level': 'warning',
|
||||
})
|
||||
|
||||
dlg = BandConfirmDialog(
|
||||
self.parent(),
|
||||
requested_band=requested,
|
||||
max_band=max_band,
|
||||
recommended_band=recommended,
|
||||
method_label=label,
|
||||
)
|
||||
result = dlg.exec_()
|
||||
if result == QDialog.Rejected:
|
||||
# 波长驱动:仅对异常波长做软警告(find_band_number 会自动处理)
|
||||
if requested < 300 or requested > 3000:
|
||||
global_event_bus.publish('LogMessage', {
|
||||
'message': '✗ 用户取消运行(step3 波段越界未解决)',
|
||||
'message': f'⚠ step3 波长异常:{label}={requested}nm(合理范围 300-3000nm)',
|
||||
'level': 'warning',
|
||||
})
|
||||
return False
|
||||
|
||||
new_band = dlg.selected_band()
|
||||
try:
|
||||
spin = getattr(step3_panel, panel_attr)
|
||||
spin.setValue(new_band)
|
||||
except AttributeError:
|
||||
global_event_bus.publish('LogMessage', {
|
||||
'message': f'⚠ step3 panel 缺控件 {panel_attr},跳过回写',
|
||||
'level': 'warning',
|
||||
})
|
||||
continue
|
||||
|
||||
global_event_bus.publish('LogMessage', {
|
||||
'message': f'✓ {label}:{requested} → {new_band}(影像最多 {max_band} 波段)',
|
||||
'level': 'info',
|
||||
})
|
||||
continue
|
||||
|
||||
return True
|
||||
return True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user