将数据帧转换为形状文件

时间:2017-11-02 23:51:38

标签: r gis shapefile rgdal

最初我从美国人口普查网站下载了一个TIGER形状文件。形状文件包含德克萨斯州哈里斯县的所有道路。它包含7个特征,1)识别号(FID),2)其形状(折线),3)线性id,4)街道名称,5)路线类型代码,6)MAF / TIGER要素类代码,7)每条道路的距离,以英尺为单位。

我将它导入R中,因此我可以根据要素类代码指定速度并计算每条道路上的行驶时间。我需要以形状文件的形式将其导入ArcGIS。

writeOGR(revised.data, "harris_shape_file", layer = "harris_travel_revised", driver = "ESRI Shapefile")

然而,这是一个错误,说“inherits(ojb,”Spatial“)不为TRUE”。现在我不经常使用形状文件,而且是GIS的新手。我正在寻找一些关于可能发生的事情的快速反馈/建议。显然R不会将数据框架识别为“空间”数据框架,但我不确定如何更改它。

我导入了数据文件,并使用

将属性转换为框架
roads.data <- readORG(dsn="harris_shape_file/")
roads <- roads.data@data

我修改了数据如下......

# mtfcc.codes are based off of unique mtfcc values, excluding parking lot 
# roads, government use, private roads, vehucular trails, bike paths and 
# pedestrian walkways.
mtfcc.codes <- c("S1400", "S1200", "S1100", "S1630", "S1730")

revised.data <- data.frame(matrix(nr=0, nc=6))
colnames(revised.data) <- c("LINEARID", "FULLNAME", "RTTYP", "MTFCC", "DISTANCE")

# assign speed limit based on mtfcc code
for(i in as.character(mtfcc.codes)){
  m.sub <- subset(roads, grepl(paste(i), roads[,4]))
  if(i == "S1400"){
    m.sub[,6] <- "25"
  }
  if(i == "S1200"){
    m.sub[,6] <- "45"
  }
  if(i == "S1100"){
    m.sub[,6] <- "65"
  }
  if(i == "S1630"){
    m.sub[,6] <- "25"
  }
  if(i == "S1730"){
    m.sub[,6] <- "15"
  }
  revised.data <- rbind(revised.data, m.sub)
  print(i)
}
colnames(revised.data)[6] <- "SPEED"

# calculate drive time on each route
revised.data[,5] <- as.numeric(as.character(revised.data[,5]))
revised.data[,6] <- as.numeric(revised.data[,6])

for(i in 1:nrow(revised.data)){
  revised.data[i,7] = revised.data[i,5]*(60/revised.data[i,6])
  print(i)
}

colnames(revised.data)[7] <- "TIME"

0 个答案:

没有答案