无法在R中打印sf线条字符串:CPL_geos_中的错误为空(st_几何体(x))
我在QGIS中将飓风轨迹点转换为直线: 我已经将它们保存为shapefile,并使用无法在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
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")