salem作为一个高贵的库,和众多module打架,鹤立鸡群,绝不同流合污。安装过程中会存在许许多多的困难,要么就是salem安装存在问题,要们就是安装完毕后和cartopy打架的问题。
我为这个库付出了太多,为了以后自己进所里给工位倒腾环境时能够省时省力,特写这篇文章。
salem是直接对nc文件裁剪/白化,它不改变原文件的大小,换句话说,源格点数据lat×lon是多少,输出后的数据的lat×lon就是多少。这个跟arcgis裁剪栅格文件略微有点不同,arcgis会改变源数据的大小。
文章目录
0 添加源
- 配置清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
- 修改conda配置信息
windows系统:在C:\Users\name路径下,找到.condarc文件,用记事本打开。
因为这个文件时隐藏的,点击查看,显示隐藏文件即可。
将里面的内容替换成下面的内容:
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
show_channel_urls: true
ssl_verify: false
保存退出即可。
1 Anaconda创建环境
conda create -n your_env_name python=x.x
建议下载3.9,3.11版本cartopy安装不了
2 安装依赖
2.1 一些基础包
创建完毕后,安装包,顺序参考salem官网
下载上面红色圈出来的包,都用conda install的方式下载(或加上coda-forge)
2.2 下载geopandas
- geopandas也有几个以来module,先去下载轮子
使用crtl+F搜索对应的包
- 使用pip install安装包
安装顺序:GDAL,Pyproj,Shapely,Fiona,geopandas
2.3 安装matplotlib(这个顺序无所谓)
conda install matplotlib
3 安装salem
conda install salem
一定要用conda install
4 最后安装cartopy
conda install cartopy
5 另附上代码
- 我一般是最后进行裁剪/白化的工作
- 如果有大批量的nc需要裁剪的话,不建议用salem一个个裁剪,可能会比较慢。我一般用的方法是:
- 先将源数据裁剪,保存为边界文件(代码见下)
- 最后所有的预处理工作都做完了,再读取边界文件,乘上0,得到edge
- 将要处理的大量nc文件加上edge即可
import numpy as np
import xarray as xr
import geopandas as geo
import salem
##使用shp文件进行裁剪
shp = geo.read_file("D:/paper/work/xx.shp") ##读取shp文件
data = xr.open_dataset("D:/paper/work/raw.nc") ##读取需要白化的数据
CNE = data.salem.roi(shape = shp) ##裁剪数据,直接对nc文件进行裁剪
CNE.to_netcdf(path = "D:/paper/work/bound.nc") ##保存边界文件