You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决一维数组经纬度映射问题并在QGIS中可视化?

解决AQI数据经纬度映射与QGIS可视化问题

看起来你在把一维AQI数据转成带经纬度的CSV时踩了几个小坑,咱们一步步梳理问题并修正:

核心问题分析

首先明确两个关键前提:

  • QGIS默认使用的WGS84坐标系(EPSG:4326)是**[-180,180]经度范围**,[180,-180]的反向映射极少用到,优先考虑前者。
  • 你的代码直接从-180开始累加经度,但原数据是0-360的范围,这会导致经纬度和AQI数据的对应关系完全错位。

你的代码存在的具体问题

  1. 经度生成逻辑错误:你直接从-180开始递增,但原数据的经度是0-360,正确的做法应该先生成0-360的原始经度,再转换为[-180,180]。
  2. 文件写入效率极低:每次循环都打开/关闭文件,不仅慢,还可能导致数据写入异常。
  3. 缺少表头:CSV没有表头的话,QGIS导入时容易识别错字段。

修正后的代码

import csv

# 替换成你的一维AQI数据数组,长度应为316*544=172904
aqi_data = [...]

# 初始化参数(用公式计算步长,更直观)
lat_start = -90
lat_step = 180 / 316  # 等价于你写的0.5727848101265823
lon_start = 0
lon_step = 360 / 544  # 等价于你写的0.6617647058823529

# 一次性打开文件写入,避免重复IO操作
with open('pollution.csv', 'w', newline='') as fp:
    writer = csv.writer(fp, delimiter=',')
    # 先写入表头,方便QGIS识别字段
    writer.writerow(['index', 'latitude', 'longitude', 'aqi'])
    
    count = 0
    # 先遍历纬度(从南到北)
    for lat_idx in range(316):
        current_lat = lat_start + lat_idx * lat_step
        # 再遍历经度(从0到360,再转成[-180,180])
        for lon_idx in range(544):
            # 生成原始0-360经度
            original_lon = lon_start + lon_idx * lon_step
            # 转换为WGS84的[-180,180]经度
            converted_lon = original_lon - 360 if original_lon > 180 else original_lon
            
            aqi = aqi_data[count]
            count += 1
            
            if float(aqi) == 0:
                continue
            # 写入单条数据
            writer.writerow([count, current_lat, converted_lon, aqi])

额外排查建议

  1. 验证经纬度对应关系:先打印几个关键点位的结果,比如:
    • 原始经度0 → 转换后0
    • 原始经度180 → 转换后180
    • 原始经度270 → 转换后-90
      确认这些点位和你预期的地理位置一致。
  2. 检查数据顺序:如果导入QGIS后位置还是不对,大概率是你的一维数组aqi_data的排列顺序和循环顺序不匹配——比如原数据是先遍历纬度再经度,还是先经度再纬度?如果是后者,需要调换循环的嵌套顺序。
  3. 尝试反向映射(万不得已):如果确认[-180,180]不对,可以把经度转换逻辑改成converted_lon = 180 - original_lon,这会把0-360转成180到-180的范围,再导入QGIS测试。

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:43:16