当前位置: 首页 > 知识库问答 >
问题:

R?中形状文件对象的形心提取

姜献
2023-03-14

我有一个形状文件,上传路径如下:

https://drive.google.com/open?id=0B1ITb_7lHh1EUFVfVWc4ekRfSnc

我使用“shapefiles”包中的“read.shapefiles”函数导入了数据:

landuse<- read.shapefile("landuse")

我现在需要提取landuse对象中所有形状的横向/纵向质心,并将其添加到landuse$dbf数据框中

我尝试了两件事:

lu_df<-coordinates(landuse)
lu_df<-SpatialPoints(landuse)

两者都给了我以下错误:

Error in coordinates(as.data.frame(obj)) : 
  error in evaluating the argument 'obj' in selecting a method for function 'coordinates': Error in data.frame(record = 1L, content.length = 80L, shape.type = 5L,  : 
  arguments imply differing number of rows: 1, 4, 7

我不知道如何进行。

共有1个答案

蓟安歌
2023-03-14

首先,我建议对空间数据使用rgdal包。函数readOGR和WriteOGR提供了很好的Shapefile处理(如投影的输入和输出等)。

UPDATE:因为@Shaz(请参阅注释中的错误)不起作用,所以使用了mapool函数readShapePoly()。也看到这篇文章。

解决您的问题:rgeos包提供了一个函数gCentroid(),用于计算多边形的质心。解决方案如下所示:

setwd("/path/to/your/shapefile/")

library(maptools)
library(rgeos)
landuse <- readShapePoly("landuse") 

centr <- gCentroid(landuse, byid = TRUE)

# create SpatialPointsDataFrame to export via writeOGR
# positive side effect: All data from landuse@data joined to centr@data
centr <- SpatialPointsDataFrame(centr, data= landuse@data) 

writeOGR(centr, ".", "landuse_centroids", driver = "ESRI Shapefile")
 类似资料:
  • 我的python3脚本创建了变量,其值是一个shapefiles列表,每个shapefiles都是一个多边形,表示一个地理区域 但它给出的结果是:AttributeError:“Shape”对象没有属性“union” 我看到了另一种方法,它涉及创建一个shapefilewriter对象,然后依次覆盖列表https://gis.stackexchange.com/questions/103033/u

  • 我目前正在尝试根据条件计算创建一个新的光栅或形状文件,需要根据光栅文件中的值对形状值中的每个值进行计算。我通常不使用光栅和形状文件,所以我对这里的元素很不熟悉。我是笼统地问这个问题,但以下是我使用的数据,希望它能让我更好地理解我试图实现的目标: 主要目标是取与shp_probs中的每个点(纬度和经度)相关的概率,并将其乘以对应于rast_norm中相同纬度和经度的值,以及之后的一些其他计算。如果我

  • 在中,有些操作以的形式返回,但有些操作返回。这将使矩阵乘法更加繁琐,因为需要显式

  • 我正在尝试使用over函数(rgeos)在两个多边形(“grd”和“range”)之间制作空间叠加。 此代码适用于所有文件,但有一个文件除外: 并获取此错误消息: 我知道在shapefile的某个地方有一个没有周围多边形的洞,但我不知道如何解决它。我可以简单地删除索引9处的孔吗?怎样如果您有一个解决方案来修复ArcGIS中的shapefile,这对我来说也很好。 提前非常感谢您的帮助!! 问候,卡

  • 在 Adobe Illustrator 中,可以使用工具和命令或应用效果和蒙版方便地修改对象的大小或形状。也可以方便地创建 3D 对象。

  • 问题内容: 进入时,某些操作会恢复原状,但有些会返回(R,)。由于需要显式运算,因此这会使矩阵乘法变得更加乏味。例如,给定一个矩阵M,如果我们想在, 哪里做R行数(当然,同样的问题也会逐列出现)。我们会得到错误,因为是在外形,但在形状(1, R)。 所以我的问题是: 什么形状之间的差异(R, 1)和(R,)。我从字面上知道是数字列表和列表列表,其中所有列表仅包含一个数字。只是想知道为什么不设计使其