gpt4 book ai didi

r - 尝试在 R 中使用 tmap 绘制 SpatialLinesDataFrame 时出错

转载 作者:行者123 更新时间:2023-12-04 15:41:38 25 4
gpt4 key购买 nike

我正在尝试使用 R 包 tmap 绘制 SpatialLinesDataFrame。但是我不断收到此错误消息:

Error in CPL_geos_is_empty(st_geometry(x)): Evaluation error: IllegalArgumentException: point array must contain 0 or >1 elements.

我首先尝试使用 tmap 绘制“sp”对象。然后我将 sp 对象转换为“sf”对象,但仍然收到相同的错误消息。我做了一些谷歌搜索,我认为这可能与 SpatialLinesDataFrame 中的线条并非完全连接这一事实有关。

因此,我将一组连接的线进行子集化,并使用 tmap 绘制得很好。

我将在这里使用的 shapefile 放在我的 Github 上.

EX1812_SPB_combined 是一个 shapefile,其中包含未连接的线,并且是不使用 tmap 绘制并给我上述错误的线。如果我使用 R 的基本 plot(),它的绘图就很好。

EX1812_SBP_combined_section 是我从包含连接线的前者子集的 shapefile。这个使用 tmap 绘制得很好。

这是我想做的:

尝试 1:尝试绘制 shapefile

library(tmap)
library(sf)
library(rgdal)
library(sp)

# read in shapefile as SpatialLinesDataFrame
sbp <- readOGR(dsn = "file/path", layer = "EX1812_SPB_combined")

# plot using tmap
# this does not work and gives me the aforementioned error
tm_shape(sbp) + tm_lines()

尝试 2:将 SpatialLinesDataFrame 转换为 sf 对象

# convert to sf 
sbp_sf <- st_as_sf(sbp) + st_set_crs(4326)

# plot using tmap
# this also does not work and gives me the same error
tm_shape(sbp_sf) + tm_lines()

尝试 3:读入连接线的 shapefile 并绘制

# read in shapefile as SpatialLinesDataFrame
sbp_connect <- readOGR(dsn = "file/path", layer = "EX1812_SBP_combined_section")

# plot using tmap
# this works
tm_shape(sbp_connect) + tm_lines()

我只想绘制整个 SpatialLinesDataFrame,即使线条断开也是如此。有没有办法使用 tmap 解决这个问题?还是我遗漏了一些更大的问题?

最佳答案

我对你的数据集只有一点了解,所以我无法确定。

但我建议使用以下代码;它基于通过使用来自 lwgeomst_make_valid() 调用来修复 sf 格式的无效几何体。包(各种科幻小说的同伴)。

如果不出意外,它会以一个看似合理的情节结束:

library(sf)
library(lwgeom)
library(dplyr)
library(tmap)

sbp <- sf::st_read("EX1812_SPB_combined.shp") %>%
lwgeom::st_make_valid() %>%
sf::st_set_crs(4326) # always a sensible default (WGS84)

tm_shape(sbp) + tm_lines()

a plausible looking line

关于r - 尝试在 R 中使用 tmap 绘制 SpatialLinesDataFrame 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com