【问题标题】:How do I import an openstreetmaps shape file in R and extract lat/long centroids?如何在 R 中导入 openstreetmaps 形状文件并提取纬度/经度质心?
【发布时间】:2016-04-16 20:45:42
【问题描述】:

我正在尝试使用 rgdal 包在 R 中导入一个 openstreetmaps 形状文件。 我下载的shape文件里面有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 个 '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

我需要有关此导入的帮助。或者,如果有一种方法可以直接从位置形状文件中提取纬度/经度,我可以在 excel 中打开 places.dbf 文件并添加纬度/经度。

【问题讨论】:

标签: r geospatial latitude-longitude shapefile rgdal


【解决方案1】:

当您在使用 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")

有关多边形质心的计算/“提取”,请参阅this 帖子。

【讨论】:

    【解决方案2】:

    您需要使用 shapefile (.shp) 作为 DSN。将SpatialPointsDataFrame 变成“正常”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
    

    【讨论】:

    • 我将工作目录更改为places形状文件所在的文件夹并运行以下代码shape1
    • @Shaz - 我遇到了同样的问题。你解决了吗?
    • 我不能...我按照下一篇文章的建议使用了 maptools
    【解决方案3】:

    我无法让这个包工作,但包“shapefiles”为我完成了工作。它有一个 read.shapefile 函数,可以导入 shapefile。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 2016-08-08
      • 1970-01-01
      • 2022-12-11
      • 2022-10-14
      • 1970-01-01
      • 2019-09-27
      相关资源
      最近更新 更多