如何基于指定经纬度范围生成CSV列构建ArcGIS可用的加拿大网格?
加拿大覆盖网格CSV生成方案
原有代码问题
你当前的代码通过zip配对经纬度生成的是一一对应的斜向点集,并非覆盖整个经纬度范围的网格点,同时变量名long和Python内置函数重名,也可能引发隐性问题,这是你后续写入CSV时报错的核心诱因之一。
实现代码
方案1:基于csv标准库实现
import csv import numpy as np # 可调整参数:步长越小网格越密 step = 0.01 # 生成经纬度数组 lat_arr = np.arange(42, 84, step) lng_arr = np.arange(-142, -52, step) # 生成全网格笛卡尔积 lat_grid, lng_grid = np.meshgrid(lat_arr, lng_arr) # 展平为一维数组后配对 lat_lng = list(zip(lat_grid.flatten(), lng_grid.flatten())) # 写入CSV with open('canada_grid.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 写入表头 writer.writerow(['lat', 'lng']) # 批量写入所有点 writer.writerows(lat_lng)
方案2:基于pandas实现(代码更简洁,性能更高)
import pandas as pd import numpy as np # 可调整参数 step = 0.01 lat_arr = np.arange(42, 84, step) lng_arr = np.arange(-142, -52, step) lat_grid, lng_grid = np.meshgrid(lat_arr, lng_arr) # 直接构造DataFrame导出 df = pd.DataFrame({ 'lat': lat_grid.flatten(), 'lng': lng_grid.flatten() }) df.to_csv('canada_grid.csv', index=False, encoding='utf-8')
参数调整说明
- 调整
step变量即可修改网格方格大小:比如设置为0.1代表生成0.1度间隔的网格,设置为1代表生成1度间隔的网格,数值越大网格越稀疏,生成速度越快 - 如需调整覆盖范围,直接修改
np.arange的起止数值即可
内容的提问来源于stack exchange,提问作者John_Muir
相关产品推荐
相关产品推荐

