在sf中使用PROJ7执行栅格坐标转换失败,除调用sf_proj_network(TRUE)外还需哪些操作?
解决sf中EPSG:27572到EPSG:2154栅格转换未生效的问题
看起来问题在于st_transform没有自动选用你找到的带栅格的高精度转换管线,即使已经开启了在线栅格支持。以下是几个可行的解决方案:
1. 手动指定高精度转换管线
从sf_proj_pipelines的输出中,你已经得到了包含xyzgridshift(栅格转换)的完整管线定义。直接将这个管线字符串传给st_transform的crs参数,强制使用该转换:
# 复制sf_proj_pipelines返回的高精度管线定义 high_precision_pipeline <- "+proj=pipeline +step +inv +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=clrk80ign +pm=paris +step +proj=push +v_3 +step +proj=cart +ellps=clrk80ign +step +proj=xyzgridshift +grids=fr_ign_gr3df97a.tif +grid_ref=output_crs +ellps=GRS80 +step +inv +proj=cart +ellps=GRS80 +step +proj=pop +v_3 +step +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80" # 使用指定管线执行转换 ptSf_2154_grid <- st_transform(ptSf_27572, crs = high_precision_pipeline) # 再次验证距离 st_distance(ptSf_2154_grid, ptSf_2154)
这样应该会使用栅格文件进行转换,结果误差会趋近于0。
2. 确认栅格文件已成功下载
sf_proj_network(TRUE)允许从PROJ的CDN下载栅格,但有时候可能因为网络问题未完成下载。PROJ会把栅格文件存储在用户的本地目录:
- Linux/macOS:
~/.proj/ - Windows:
C:\Users\<你的用户名>\.proj\
检查该目录下是否存在fr_ign_gr3df97a.tif文件。如果没有,可以手动下载该文件并放到这个目录,然后重新运行转换。
3. 检查PROJ和sf版本
较旧版本的PROJ可能对栅格转换支持有限,建议确保你使用的是PROJ 7.0及以上版本,同时sf包也是最新版本。可以用以下命令检查版本:
sf::sf_extSoftVersion()
如果版本过低,更新sf包(会自动更新依赖的PROJ库,取决于你的安装方式)。
4. 验证PROJ的栅格支持配置
运行sf_proj_info(type = "grid")查看PROJ已加载的栅格列表,确认fr_ign_gr3df97a.tif在其中。如果不在,可能需要检查PROJ的环境变量配置,确保它能找到本地栅格目录。
内容的提问来源于stack exchange,提问作者Jean-Luc Dupouey
相关产品推荐
相关产品推荐

