2024版R安装sf包遇GDAL依赖问题,求欧洲地图绘制方案
解决Debian非root源码R环境下sf包安装问题及替代绘图方案
一、解决sf包的依赖安装问题
你遇到的gdal-config not found错误,本质是系统GDAL库的路径未被R识别,或者非root环境下依赖未正确安装。以下是两种可行方案:
方案1:有sudo权限时补全系统依赖
如果你的账号有sudo权限,之前的命令缺少了sf必需的libgeos-dev和libproj-dev,执行完整的系统依赖安装:
sudo apt-get update && sudo apt-get install libudunits2-dev libgdal-dev libgeos-dev libproj-dev gdal-bin
安装完成后,重新在R中执行:
install.packages("sf")
方案2:无sudo权限时编译依赖到用户目录
如果无法使用sudo,需要手动编译GDAL、GEOS、PROJ到用户本地目录,再让R指向这些依赖:
- 创建本地安装目录:
mkdir -p ~/local
- 依次编译安装GEOS、PROJ、GDAL:
# 安装GEOS wget https://download.osgeo.org/geos/geos-3.12.1.tar.gz tar xzf geos-3.12.1.tar.gz cd geos-3.12.1 ./configure --prefix=$HOME/local make && make install cd .. # 安装PROJ wget https://download.osgeo.org/proj/proj-9.3.1.tar.gz tar xzf proj-9.3.1.tar.gz cd proj-9.3.1 ./configure --prefix=$HOME/local --with-geos=$HOME/local/bin/geos-config make && make install cd .. # 安装GDAL wget https://download.osgeo.org/gdal/3.8.4/gdal-3.8.4.tar.gz tar xzf gdal-3.8.4.tar.gz cd gdal-3.8.4 ./configure --prefix=$HOME/local --with-proj=$HOME/local --with-geos=$HOME/local/bin/geos-config make && make install cd ..
- 在R中设置环境变量并安装sf:
# 设置路径让R找到本地依赖 Sys.setenv(PATH = paste0(Sys.getenv("PATH"), ":", Sys.getenv("HOME"), "/local/bin")) Sys.setenv(LD_LIBRARY_PATH = paste0(Sys.getenv("LD_LIBRARY_PATH"), ":", Sys.getenv("HOME"), "/local/lib")) Sys.setenv(CPPFLAGS = paste0("-I", Sys.getenv("HOME"), "/local/include")) Sys.setenv(LDFLAGS = paste0("-L", Sys.getenv("HOME"), "/local/lib")) # 安装sf install.packages("sf")
二、无需sf包的欧洲地图绘制方案
如果仍无法安装sf,推荐两种轻量方案:
方案1:使用maps + mapdata包(零系统依赖)
这两个纯R包无需GDAL等库,安装简单,适合快速绘图:
install.packages(c("maps", "mapdata")) library(maps) library(mapdata) # 绘制高精度欧洲地图 map("worldHires", regions = c("Europe", "Austria", "Belgium", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Germany", "Greece", "Hungary", "Ireland", "Italy", "Latvia", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Poland", "Portugal", "Romania", "Slovakia", "Slovenia", "Spain", "Sweden", "United Kingdom"), fill = TRUE, col = "lightgray", border = "white") # 叠加经纬度点(示例:柏林、巴黎) points(x = c(13.4050, 2.3522), y = c(52.5200, 48.8566), pch = 19, col = "red", cex = 1.2)
方案2:使用ggplot2 + rnaturalearth包
若偏好ggplot2风格,可使用rnaturalearth获取地图数据,无需sf时用sp格式:
install.packages(c("ggplot2", "rnaturalearth")) library(ggplot2) library(rnaturalearth) # 获取欧洲国家数据(sp格式,无需sf) europe_sp <- ne_countries(continent = "europe", returnclass = "sp") europe_df <- fortify(europe_sp) # 绘制地图并叠加坐标点 ggplot(europe_df, aes(long, lat, group = group)) + geom_polygon(fill = "lightgray", color = "white") + geom_point(aes(x = c(13.4050, 2.3522), y = c(52.5200, 48.8566)), color = "red", size = 3) + coord_map() + theme_minimal()
内容的提问来源于stack exchange,提问作者dpk
相关产品推荐
相关产品推荐

