我正在尝试使用rgdal包导入R中的openstreetmaps形状文件。 我下载的形状文件中有5个组件:
places.cpg
places.dbf
places.prj
places.shp
places.shx
可以在以下位置访问这些文件:
https://drive.google.com/open?id=0B1ITb_7lHh1EUFVfVWc4ekRfSnc
我必须做以下事情: 1)导入形状文件 2)在多边形的情况下,提取点的纬度/长度或形状的质心 3)将lat / long对连接到dbf文件以进行一些分析
我陷入导入的第一阶段,我正在运行以下代码:
shape1 <- readOGR(dsn = "try", layer = "places")
此处'try'是我工作目录中的文件夹,其中包含上述openstreetmaps中的所有5个'place'文件。
执行此操作时出现以下错误:
Error in readOGR(dsn = "try", layer = "places") : no features found
In addition: Warning message:
In ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv =
use_iconv, : ogrInfo: all features NULL
我需要这个导入的帮助。或者,如果有一种方法可以直接从其中一个位置形状文件中提取lat / long,我可以在excel中打开places.dbf文件并添加lat / long。
答案 0 :(得分:1)
使用readOGR()函数遇到麻烦时:另一种可能是使用maptools
包。它会创建SpatialXXXDataFrames
,因此您可以使用rgeos
等所有功能。
library(maptools)
setwd("/your/data/path/")
places <- readShapeSpatial("places")
# ... your geospatial functions, like
plot(places)
可能您需要调整空间数据的投影。对于OSM-Data,您需要在https://wiki.duraspace.org/display/DSDOC5x/Discovery#Discovery-DiscoverySolrIndexMaintenance找到WGS84(或EPSG:4326)的proj4string
。
因此,您可以在R中调整投影:
proj4string(places) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
有关多边形质心的计算/“提取”,请参阅spatialreference.org post。
答案 1 :(得分:0)
您需要使用shapefile(.shp
)作为DSN。将SpatialPointsDataFrame
变为&#34;正常&#34; data.frame
会给&#34; ugh&#34;列名
为lang&amp; lat,所以你可以重命名它们以使它们更有用:
library(sp)
library(rgdal)
places <- readOGR("places/places.shp", "places", verbose=FALSE, stringsAsFactors=FALSE)
places_df <- setNames(as.data.frame(places),
c("osm_id", "name", "type", "population", "longitude", "latitude"))
head(places_df)
## osm_id name type population longitude latitude
## 1 25431184 Stockertown village NA -75.26156 40.75446
## 2 25716549 Mechanicsburg village NA -77.00473 40.21020
## 3 25762119 Mansfield hamlet NA -77.07929 41.80569
## 4 25840249 New Columbia hamlet NA -76.87368 41.03368
## 5 25840585 Williamsport town 29381 -77.00277 41.24933
## 6 25930002 Hershey town 14257 -76.65060 40.28549
答案 2 :(得分:0)
我无法让这个包工作,但是“shapefile”包为我做了工作。它有一个read.shapefile函数,用于导入shapefile。