将shapefile从多边形转换为点? [英] Convert a shapefile from polygons to points?

查看:327
本文介绍了将shapefile从多边形转换为点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个不重叠的基于多边形的shapefile (.shp),具有很大的空间范围和许多关联的属性. shapefile投影在UTM中.我想将多边形转换为在30-m分辨率网格中隔开的点,其中每个点将保留其所在的多边形的属性.

I have a non-overlapping polygon-based shapefile (.shp) with a large spatial extent and many dozens of associated attributes. The shapefile is projected in UTMs. I would like to convert the polygons to points spaced out in a 30-m resolution grid, in which each point would retain the attributes of the polygon it is located within.

输出仅是点表:

X, Y, attribute1, attribute2, attribute 3,etc...

理想情况下,我想在R上执行此操作,或者(不太理想)我可以在Mac上运行的其他一些免费程序.

I would ideally like to do this operation in R, or (less ideally) some other free program I can run on a Mac.

推荐答案

注意:我在部分程度上讲这是为了了解是否有一种更优雅的方法来执行此操作.因此,请提供空间类型,并提出任何改进建议.

NOTE: I'm throwing this up in part to learn whether there's a more elegant way to do any of this. So, please, spatial types, pitch in with any suggestions for improvement.

(特别是在第2步中,它设置了一个"SpatialPoints"网格,其中将要提取值的点对我来说总是很痛苦的低级.)

(In particular, Step 2, which sets up a "SpatialPoints" grid with the points to which values will be extracted, always seems painfully low-level to me.)

这使用over()在为此目的而构造的"SpatialPoints"对象中包含的坐标处,从"SpatialPolygonDataFrame"提取属性.

This uses over() to extract attributes from a "SpatialPolygonDataFrame" at the coordinates contained in a "SpatialPoints" object constructed for just that purpose.

library(rgdal)

## (1) Read in an example shapefile
dsn <- system.file("vectors", package = "rgdal")[1]
scot_BNG <- readOGR(dsn=dsn, layer="scot_BNG")
scot_BNG <- scot_BNG[1:5,]  # Let's just use part of it

## (2) Set up a SpatialPoints object with the grid of points 
##     for which you want to extract values
res <- 10000            ## Distance between grid points (30 in OP's question) 
BB <- bbox(scot_BNG)
BB <- res*round(BB/res) ## Pretty up the bounding box
GT <- GridTopology(cellcentre.offset = BB[,1], 
                   cellsize = c(res, res),
                   cells.dim = (c(diff(BB[1,]), diff(BB[2,]))/res) + 1)
SP <- SpatialPoints(GT, proj4string = CRS(proj4string(scot_BNG)))

## (3) Extract the values
vals <- over(SP, scot_BNG)
res <- cbind(coordinates(SP), vals)

## Finally, have a look at a few of the points.
x <- res[!is.na(res$SP_ID),]
rbind(head(x,3), tail(x,3))[1:10]
#          x      y SP_ID       NAME ID_x COUNT   SMR  LONG  LAT    PY
# 4   230000 970000     0 Sutherland   12     5 279.3 58.06 4.64 37521
# 5   240000 970000     0 Sutherland   12     5 279.3 58.06 4.64 37521
# 25  220000 960000     0 Sutherland   12     5 279.3 58.06 4.64 37521
# 425 260000 780000     4   Bedenoch   17     2 186.9 57.06 4.09 27075
# 426 270000 780000     4   Bedenoch   17     2 186.9 57.06 4.09 27075
# 427 280000 780000     4   Bedenoch   17     2 186.9 57.06 4.09 27075

这篇关于将shapefile从多边形转换为点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆