rgdal精神崩溃

问题描述 投票:0回答:1

我正在使用 R 版本 4.3.2,并且我正在尝试使用 rgdal 包。

我想制作一个“KUD 图”(每个 KUD 从 95 到 5 的 ggplot)。这是没有海岸线的情节:

without any SPDF

为此,我需要在 geom_polygon 中使用 SpatialPolygonsDataFrame 将海岸线放置在地图中,所以我尝试这样做:

 Corsica <- getData('GADM', country='FRA', level=0)

这就是我得到的 TADAA

with the SPDF i have

我有一个形状文件(.shp),其几何形状:多边形。我想读一下。OGR

Corsica <- readOGR(dsn = "....", layer = ".....")

问题是我无法安装rgdal。我有这样的消息:

install.packages("rgdal")

Warning in install.packages :
  package ‘rgdal’ is not available for this version of R
A version of this package for your version of R might be available elsewhere,
see the ideas at
https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages

我尝试使用旧版本的 R 安装 rgdal,但它不起作用...

有谁知道如何解决这个问题吗?是否有其他函数可以替代 readOGR ?是否仍然可以安装 rgdal,如果可以,如何安装?

提前感谢您的帮助

祝你有美好的一天

克莱维

这是我的整个代码:

ggplot() +
  coord_sf(crs = 32632)+
  geom_sf(data = st_as_sf(ver95), color= NA, fill="#3B9AB2", alpha=0.5)+
  geom_sf(data = st_as_sf(ver90), color= NA, fill="#48A0B6", alpha=0.5)+
  geom_sf(data = st_as_sf(ver85), color= NA, fill="#56A6BA", alpha=0.5)+
  geom_sf(data = st_as_sf(ver80), color= NA, fill="#63ADBE", alpha=0.5)+
  geom_sf(data = st_as_sf(ver75), color= NA, fill="#71B3C2", alpha=0.5)+
  geom_sf(data = st_as_sf(ver70), color= NA, fill="#84B9B3", alpha=0.5)+
  geom_sf(data = st_as_sf(ver65), color= NA, fill="#9EBE91", alpha=0.5)+
  geom_sf(data = st_as_sf(ver60), color= NA, fill="#B7C26E", alpha=0.5)+
  geom_sf(data = st_as_sf(ver55), color= NA, fill="#D1C74C", alpha=0.5)+
  geom_sf(data = st_as_sf(ver50), color= NA, fill="#EBCC2A", alpha=0.5)+
  geom_sf(data = st_as_sf(ver45), color= NA, fill="#E8C520", alpha=0.5)+
  geom_sf(data = st_as_sf(ver40), color= NA, fill="#E6BF17", alpha=0.5)+
  geom_sf(data = st_as_sf(ver35), color= NA, fill="#E4B80E", alpha=0.5)+
  geom_sf(data = st_as_sf(ver30), color= NA, fill="#E2B204", alpha=0.5)+
  geom_sf(data = st_as_sf(ver25), color= NA, fill="#E29E00", alpha=0.5)+
  geom_sf(data = st_as_sf(ver20), color= NA, fill="#E67D00", alpha=0.5)+
  geom_sf(data = st_as_sf(ver15), color= NA, fill="#EA5C00", alpha=0.5)+
  geom_sf(data = st_as_sf(ver10), color= NA, fill="#EE3B00", alpha=0.5)+
  geom_sf(data = st_as_sf(ver05), color= NA, fill="#F21A00", alpha=0.5)+
  geom_sf(data = st_as_sf(mcp), color= "black", fill=NA, alpha=0.5)+
 geom_point(data = Stations, aes(x=station_longitude, y = station_latitude),
            shape=21, color="red", size = 2) +
  geom_point(data = COA, aes(x=Longitude.coa, y = Latitude.coa), shape=3, color="black", size = 1) + ### points COAs
  ylab("Latitude") +
  xlab("Longitude")+
  coord_sf(xlim = c(9.43, 9.55195), ylim = c(42.551657, 42.68), expand = FALSE)+   
  theme(legend.position = "none") +
  geom_polygon(data = Corsica , aes(x=long, y=lat))+

  ggtitle("KUD blue crab")+ theme_bw()
r maps polygon spatial rgdal
1个回答
0
投票

您遇到的问题是您需要为多边形设置

fill = FALSE
。这是因为默认的
ggplot2
行为是填充多边形。另外,我强烈建议在绘制空间数据时使用
geom_sf()
,因为使用其他几何选项 可能会导致问题

正如评论中提到的,

rgdal
已于 2023 年 10 月弃用。此代表使用
sf
包,大多数相关
rgdal
函数已迁移到该包。请注意,如果您之前安装过
rgdal
,它可能会 导致问题,因此您可能需要从库目录中删除它的所有痕迹。这包括
GDAL
GEOS
PROJ
绑定到的
rgdal
的版本。

我提供了四个数据集选项:两个内置于 R 包中,两个来自外部。在这四个中,来自 geodata 的数据似乎与示例图像中的数据最相似。

请注意,至少有两个 KUD 点似乎位于 Étang de Biguglia 内,因此您可以搜索科西嘉海岸线的更详细版本。我的科西嘉语和法语“有点生疏”,所以我的快速搜索没有找到比下面的选项更好的东西。

我不会打扰 OSM 数据,它是一个很大的数据集,并且不如地理数据选项详细。本示例中的四个数据集均被裁剪到示例中的 xlim/ylim 值之外。如果您需要更大的地图范围,请调整或省略

st_crop()
功能。

library(rnaturalearth) # 1.0.1
library(dplyr) # 1.1.4
library(sf) # 1.0.15
library(ggplot2) # 3.5.0

sf_use_s2(FALSE) # Needed for cropping full extent (global) S2 objects

# rnaturalearth
Corsica1 <- ne_countries(scale = "large", returnclass = 'sf') %>%
  st_set_crs(4326) %>%
  st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
  select(geometry) %>%
  mutate(source = "rnaturalearth")

# ggplot2
Corsica2 <- map_data("world") %>%
  st_as_sf(coords = c("long","lat")) %>%
  group_by(region, group) %>%
  summarise(geometry = st_combine(geometry), .groups = "drop") %>% 
  st_cast("POLYGON") %>%
  st_set_crs(4326) %>%
  ungroup() %>%
  st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
  select(geometry) %>%
  mutate(source = "ggplot2")

# https://osmdata.openstreetmap.de/download/coastlines-split-4326.zip
Corsica3 <- st_read("lines.shp") %>%
  st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
  st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
  select(geometry) %>%
  mutate(source = "osm")%>% 
  group_by(source) %>%
  summarise(geometry = st_combine(geometry), .groups = "drop")

# https://geodata.ucdavis.edu/gadm/gadm4.1/shp/gadm41_FRA_shp.zip
Corsica4 <- st_read("gadm41_FRA_0.shp") %>%
  st_crop(xmin = 9.40, ymin = 42, xmax = 9.6, ymax = 43) %>%
  select(geometry) %>%
  mutate(source = "geodata")

Corsica_all <- do.call(rbind, mget(ls(pattern = "^Corsica[0-9]")))

ggplot() +
  geom_sf(data = Corsica_all, aes(colour = source),
          fill = NA,
          linewidth = .5,
          show.legend = FALSE) +
  coord_sf(xlim = c(9.43, 9.55195),
           ylim = c(42.551657, 42.68),
           expand = FALSE) +
  theme(axis.text = element_text(size = 5),
        axis.text.x = element_text(angle = 90, hjust = 1)) +
  facet_wrap(~ source, nrow = 2)

© www.soinside.com 2019 - 2024. All rights reserved.