fix: 动态查找 PROJ/GDAL 路径 + Warp 1 像素浮点舍入容错
**water_quality_gui_v2.py:** - 废弃硬编码 conda_env 路径 - 新增 _find_and_set_gdal_env(): 基于 sys.prefix 自动推断 Library/share/proj 和 Library/share/gdal,验证 proj.db 存在后 强设 PROJ_LIB 和 GDAL_DATA 环境变量 - 兼容 Windows (Library/share/...) 和 Linux/Mac (share/...) 路径 **preview_generator.py _warp_mask_to_image():** - 尺寸验证从严格相等改为 ±2 像素容差 - 新增 _snap_array_to_shape(): warp 输出与 target_shape 相差 ≤2px 时自动 slice(截断)或 pad(填充),不再回退到盲读模式 - 解决坐标系转换浮点舍入导致的 1048x522 vs 1047x521 问题
This commit is contained in:
@ -17,15 +17,57 @@ WaterQualityGUI 只负责窗口框架(标题栏、菜单栏、状态栏、QTab
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
# 强行切断系统环境变量的干扰,绑定到当前的 Conda 虚拟环境
|
||||
# 必须在 import gdal / import rasterio 等任何第三方库之前执行
|
||||
conda_env = r"D:\111\changyongruanjian\anconda\envs\WQ_GUI"
|
||||
|
||||
os.environ["PROJ_LIB"] = os.path.join(conda_env, "Library", "share", "proj")
|
||||
os.environ["GDAL_DATA"] = os.path.join(conda_env, "Library", "share", "gdal")
|
||||
|
||||
import sys
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# 动态推断当前 Conda 环境下的 GDAL/PROJ 数据路径
|
||||
# 必须在 import gdal / import rasterio 等任何第三方库之前执行
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
def _find_and_set_gdal_env():
|
||||
"""根据 sys.prefix 自动推断并强设 PROJ_LIB 和 GDAL_DATA 环境变量"""
|
||||
# sys.prefix 在 Conda 环境下通常为:
|
||||
# D:\...\anconda\envs\WQ_GUI
|
||||
# PROJ 和 GDAL 的数据文件位于:
|
||||
# {sys.prefix}\Library\share\proj (含 proj.db)
|
||||
# {sys.prefix}\Library\share\gdal
|
||||
prefix = sys.prefix
|
||||
candidates_proj = [
|
||||
os.path.join(prefix, "Library", "share", "proj"), # Windows Conda
|
||||
os.path.join(prefix, "share", "proj"), # Linux/Mac Conda
|
||||
]
|
||||
candidates_gdal = [
|
||||
os.path.join(prefix, "Library", "share", "gdal"),
|
||||
os.path.join(prefix, "share", "gdal"),
|
||||
]
|
||||
|
||||
proj_lib = None
|
||||
for path in candidates_proj:
|
||||
proj_db = os.path.join(path, "proj.db")
|
||||
if os.path.isfile(proj_db):
|
||||
proj_lib = path
|
||||
break
|
||||
|
||||
gdal_data = None
|
||||
for path in candidates_gdal:
|
||||
if os.path.isdir(path):
|
||||
gdal_data = path
|
||||
break
|
||||
|
||||
if proj_lib:
|
||||
os.environ["PROJ_LIB"] = proj_lib
|
||||
print(f"[ENV] PROJ_LIB → {proj_lib}")
|
||||
else:
|
||||
print("[ENV] ⚠ 未找到 proj.db,PROJ_LIB 保持系统默认,可能影响坐标转换")
|
||||
|
||||
if gdal_data:
|
||||
os.environ["GDAL_DATA"] = gdal_data
|
||||
print(f"[ENV] GDAL_DATA → {gdal_data}")
|
||||
else:
|
||||
print("[ENV] ⚠ 未找到 GDAL data 目录,GDAL_DATA 保持系统默认")
|
||||
|
||||
_find_and_set_gdal_env()
|
||||
|
||||
import ctypes
|
||||
import traceback
|
||||
import multiprocessing
|
||||
|
||||
Reference in New Issue
Block a user