从shapefile获取具有多边形id和Centroid(lat long)信息的数据框

时间:2015-09-14 18:58:08

标签: r shape spatial

我有一个多边形shapefile(可下载here),我想从中创建一个包含3列的data.frame

  1. Polygon id
  2. Centroid latitude
  3. Centroid Longitude
  4. 从这个答案here,我知道很容易将这些信息作为Formal Class SpatialPoints对象获取。当我将这个对象转换为data.frame时,我会丢失id信息。

    # Load Shapefile
      Legislative_areas <- readOGR(dsn = 'C:/Users/.../Downloads/Legislative2010UTM', layer ='Legislative2010UTM')
    
    # Get centroids
      cent <- gCentroid(Legislative_areas, byid=TRUE)
    
    # Convert to data.frame, but loose id info
      cent <- as.data.frame(cent)
    

    关于如何保存身份信息的任何想法?

1 个答案:

答案 0 :(得分:10)

library(rgdal)
library(rgeos)

# download w/o wasting bandwidth
URL <- "ftp://dnrftp.dnr.ne.gov/pub/data/state/Legislative2010UTM.zip"
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)

# unzip & get list of files
fils <- unzip(fil)

# find the shapefile in it
shp <- grep("shp$", fils, value=TRUE)

# get the first layer from it
lay <- ogrListLayers(shp)[1]

# read in the shapefile
leg <- readOGR(shp, lay)

# get the centroids and then convert them to a SpatialPointsDataFrame
leg_centers <- SpatialPointsDataFrame(gCentroid(leg, byid=TRUE), 
                                      leg@data, match.ID=FALSE)

只需保留原始shapefile中的@data插槽,然后从新的质心中创建SpatialPointsDataFrame

然后,您可以从中创建数据框,或直接在图表或其他Spatial…操作中使用它。

相关问题