无法在R中打印sf线条字符串:CPL_geos_中的错误为空(st_几何体(x))

无法在R中打印sf线条字符串:CPL_geos_中的错误为空(st_几何体(x)),r,geometry,gis,qgis,sf,R,Geometry,Gis,Qgis,Sf,我在QGIS中将飓风轨迹点转换为直线: 我已经将它们保存为shapefile,并使用sf包将它们加载到R中。点将使用标准的plot()函数进行绘图,但线不会 我遇到了一个错误: plot(hurricane_paths) Error in CPL_geos_is_empty(st_geometry(x)) : Evaluation error: IllegalArgumentException: point array must contain 0 or >1 elemen

我在QGIS中将飓风轨迹点转换为直线:

我已经将它们保存为shapefile,并使用
sf
包将它们加载到R中。点将使用标准的
plot()
函数进行绘图,但线不会

我遇到了一个错误:

plot(hurricane_paths)
Error in CPL_geos_is_empty(st_geometry(x)) : 
     Evaluation error: IllegalArgumentException: point array must contain 0 or >1 elements.
当我使用
绘图(st_几何体(飓风路径))时,我也有同样的错误。

R肯定会在几何体中加载,但:

> hurricane_paths
Simple feature collection with 1410 features and 5 fields
geometry type:  LINESTRING
dimension:      XY
bbox:           xmin: -179.9 ymin: -4.9 xmax: 8 ymax: 70.7
epsg (SRID):    4269
proj4string:    +proj=longlat +datum=NAD83 +no_defs
First 10 features:
             N.A begin  end Year           N.A_1                       geometry
1  1976143N24271  <NA> <NA> 1976 SUBTROP:UNNAMED LINESTRING (-89 24, -89.6 2...
2  1976155N11265  <NA> <NA> 1976         ANNETTE LINESTRING (-95 11.4, -95.2...
3  1976159N27281  <NA> <NA> 1976         UNNAMED LINESTRING (-79 26.8, -78.5...
我已在“几何体”列中检查了NAs:

> which(is.na(hurricane_paths$geometry)==T)
integer(0)
plot\u sf()
不会返回任何错误消息,但它会在plots窗格中返回一个空白屏幕,因此这也是不允许的

但是ggplot2很棒,并且返回一个图形,没有问题:

> ggplot() + 
+   geom_sf(data = hurricane_paths)
Mapview也很好:
>Mapview::Mapview(飓风路径)

但是基本的
plot()
函数仍然很难实现。
有什么问题吗?

没有这些数据很难帮助。
st_长度(飓风路径)
是否显示任何零长度几何图形?如果您绘制一个子集,例如
plot(飓风路径[1:10,])
来绘制前十个呢

我可以通过创建一条只有一个点的直线来复制您的错误:

> Line = st_sfc(st_linestring(x = matrix(1, ncol=2, nrow=1), dim = "XYZ"))
> g = st_sf(data.frame(x=1, geom=Line))
> plot(g)
Error in CPL_geos_is_empty(st_geometry(x)) : 
  Evaluation error: IllegalArgumentException: point array must contain 0 or >1 elements.
我怀疑单坐标“线”在Simple Features规范下是无效的,应该真正转换为点几何体,或者可能通过添加第二个相同的坐标来固定,这样它仍然是一条线,但有两个点


您可以使用
st_is_valid
来检测这样的东西(它甚至涉及到一个点的线字符串),然后将它们转换为点,或者删除它们,或者根据您的分析对它们进行适当的处理。

我和您一样遇到了一个问题,问题似乎在于从点到线字符串的转换。按照线程中找到的解决方案,您可能必须使用

summarise(do_union = FALSE) %>%
st_cast("LINESTRING")
将点数据集转换为线字符串之前


希望有帮助。

嗨,谢谢你的回复。这是一个很好的建议,但是
st\u是有效的(飓风路径)
只返回我的数据集的
TRUE
值。可以在这里找到数据:您能更具体地说明哪一个数据集吗?你在QGIS里做了什么?你能通过一个共享站点把你读到R的QGIS的输出变成可用的吗?你有没有试着通过子集缩小它的范围?
summarise(do_union = FALSE) %>%
st_cast("LINESTRING")