【问题标题】:R geo: from points to SpatialPolygonsDataFrameR geo:从点到 SpatialPolygonsDataFrame
【发布时间】:2017-12-10 08:53:20
【问题描述】:

我正在尝试从带有点的 data.frame 开始创建 SpatialPolygonDataFrame,但我不确定方法。我成功获得了空间多边形列表,但未能将它们转换为SpatialPolygonsDataframe

这是我的数据结构:

               coordinates parcours_id   tm_cid         date_mesure tm_type tm_mnc tm_dbm
34268 (2.670962, 48.48172)             24680199 2017-07-04 01:38:36     lte      1   -113
34269 (2.670522, 48.48981)             24680199 2017-07-04 01:38:44     lte      1   -117
34270 (2.668994, 48.49398)             24657926 2017-07-04 01:38:59     lte      1   -116
34271 (2.668994, 48.49398)             24657926 2017-07-04 01:39:05     lte      1   -116
34272 (2.668069, 48.49653)             24657926 2017-07-04 01:39:17     lte      1   -116
34273  (2.667893, 48.5005)             24657926 2017-07-04 01:39:29     lte      1   -108

我想通过 tm_cid 创建多边形。我已经尝试关注?SpatialPolygons

    polygons=c()
    for (value in unique(mesures.sp$tm_cid)){
      sub=subset(mesures.sp,mesures.sp$tm_cid==value)
      x=Polygon(sub@coords)
      polygons=c(polygons,x)
    }

    polygons=as.list(polygons)
#polygons my srl (list with Polygon Class Objects)
    ID=unique(mesures.sp$tm_cid)
    all_poly=c()
    for(value in 1:length(polygons)){
    poly=Polygons(polygons[value], ID[value])
    all_poly=c(all_poly,poly)}

    all_poly=as.list(all_poly)  
#all_poly is my sr (list of object of class SpatialPolygons-class, shouldn't be a list but I failed to do otherwise)


    spatPoly=c()
    for(value in 1:length(polygons)){
      spol=SpatialPolygons(all_poly[value])
      spatPoly=c(spatPoly,spol)}

    ID=as.data.frame(ID)
    spdf=c()
    for(value in 1:length(polygons)){
      data=ID[value,1]
      df=SpatialPolygonsDataFrame(spatPoly[[value]],data=data)
      spdf=c(spdf,df)
    }

我收到此错误:

if (length(Sr@polygons) != nrow(data)) stop(paste("Object 长度不匹配:\n ", : 参数长度为零

有什么想法吗?

【问题讨论】:

  • 将您的答案添加为单独的答案,而不是编辑您的帖子!通过这种方式,您将帮助其他人解决同样的问题。
  • 我认为在编辑之前压制答案并不好。我的电脑死机了,我来这里是因为我失去了我所做的一切,我必须重做。我理解您的观点,但请下次在添加评论之前不要压制答案。你这样做的方式,它可以完成没有人得到答案。
  • 所有修改都已保存,您可以在这里查看stackoverflow.com/posts/44947371/revisions
  • 是的,我找到了。但我真的认为下次最好要求该人添加答案并进行编辑。更重要的是保持答案可见。顺便说一句,它还可以节省您的时间(我会自己完成编辑)。

标签: r spatial geo


【解决方案1】:
require(rgeos)
require(rgdal)
require(maptools)

(mesure.sp 是SpatialPontDataFrame

   polygons=c()
    for (value in unique(mesures.sp$tm_cid)){
      sub=subset(mesures.sp,mesures.sp$tm_cid==value)
      x=Polygon(sub@coords)
      polygons=c(polygons,x)
    }

    polygons=as.list(polygons)
#polygons my srl (list with Polygon Class Objects)
    ID=unique(mesures.sp$tm_cid)
    all_poly=c()
    for(value in 1:length(polygons)){
    poly=Polygons(polygons[value], ID[value])
    all_poly=c(all_poly,poly)}

    all_poly=as.list(all_poly)  
#all_poly is my sr (list of object of class SpatialPolygons-class, shouldn't be a list but I failed to do otherwise)


    spatPoly=c()
    for(value in 1:length(polygons)){
      spol=SpatialPolygons(all_poly[value])
      spol@proj4string=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
      spatPoly=c(spatPoly,spol)}

    spoly=spatPoly[[1]]
for(value in 2:length(spatPoly)){
  spoly=c(spoly,spatPoly[[value]])
}

    spoly=as.list(spoly)
spdf=c()
    for(value in 1:length(polygons)){
        data=as.data.frame(ID[value])
  row.names(data)=data$ID

      df=SpatialPolygonsDataFrame(spatPoly[[value]],data=data)
      spdf=c(spdf,df)
    }

    final_spdf=spdf[[1]]
for(value in 2:length(spdf)){
  final_spdf=spRbind(final_spdf,spdf[[value]])}

【讨论】:

    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 2018-04-04
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多