如何在 R 中导入 openstreetmaps 形状文件并提取 lat/long 质心?

How do I import an openstreetmaps shape file in R and extract lat/long centroids?

我正在尝试使用 rgdal 包在 R 中导入一个 openstreetmaps 形状文件。 我下载的形状文件里面有5个组件:

places.cpg
places.dbf
places.prj
places.shp
places.shx

可以在以下位置访问这些文件:

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

我必须执行以下操作: 1)导入形状文件 2) 在多边形的情况下提取形状的点或质心的 lat/long 3) 将 lat/long 对附加到 dbf 文件以进行一些分析

我卡在导入本身的第一阶段,我是运行下面的代码:

shape1 <- readOGR(dsn = "try", layer = "places")

这里 'try' 是我工作目录中的文件夹,上面提到的来自 openstreetmaps 的所有 5 'places' 文件都位于其中。

执行此操作时出现以下错误:

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.

您需要使用 shapefile (.shp) 作为 DSN。将 SpatialPointsDataFrame 转换为 "normal" data.frame 将给出 "ugh" 列名称 对于 lang 和 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

我无法让这个包工作,但包 "shapefiles" 为我完成了工作。它具有导入 shapefile 的 read.shapefile 功能。

当您遇到 readOGR() 函数的问题时:另一种可能性是使用 maptools 包。它创建 SpatialXXXDataFrames 以便您可以使用 rgeos 等中的所有功能。

library(maptools)

setwd("/your/data/path/")

places <- readShapeSpatial("places")
# ... your geospatial functions, like
plot(places)

您可能需要调整空间数据的投影。对于 OSM-Data,您需要在 spatialreference.org 处找到 WGS84(或 EPSG:4326)的 proj4string

因此您可以在 R 中调整投影:

proj4string(places) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

对于多边形质心的计算/"extraction",请参阅 post。