在 shapefile 中创建网格
Create a grid inside a shapefile
我正在尝试在 shapefile 中创建一个网格,就像这样。但是,我无法生成这样的网格。我想知道是否有人知道如何实现这一点。
这是我的代码 -
WWWL.Shape<- readOGR("E:/Juan Arango", "WWL_Commerce_OK")
WWWL.Shape
plot(WWWL.Shape)
proj4string(WWWL.Shape)
bb <- bbox(WWWL.Shape)
cs <- c(3.28084, 3.28084)*6000 # cell size
cc <- bb[, 1] + (cs/2) # cell offset
cd <- ceiling(diff(t(bb))/cs) # number of cells per direction
grd <- GridTopology(cellcentre.offset=cc, cellsize=cs, cells.dim=cd)
grd
sp_grd <- SpatialGridDataFrame(grd,
data=data.frame(id=1:prod(cd)),
proj4string=CRS(proj4string(WWWL.Shape)))
plot(sp_grd)
WWL.Shape
的输出
class : SpatialPolygonsDataFrame
features : 1
extent : 334367, 334498.7, 4088915, 4089057 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=15 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
variables : 1
names : Id
min values : 0
max values : 0
sf
版本
请参阅下面的 rgdal
版本
首先,我们从一个 shapefile 开始。您可能会使用 st_read
.
从任何地理空间文件加载它
library(sf)
library(raster)
library(ggplot2)
# load some spatial data. Administrative Boundary
shp <- getData('GADM', country = 'aut', level = 0)
shp <- st_as_sf(shp)
# ggplot() +
# geom_sf(data = shp)
现在你唯一需要的是 st_make_grid
和 st_intersection
的组合:
grid <- shp %>%
st_make_grid(cellsize = 0.1, what = "centers") %>% # grid of points
st_intersection(shp) # only within the polygon
# ggplot() +
# geom_sf(data = shp) +
# geom_sf(data = grid)
rgdal
和版本
要创建像素网格,您可以使用 sp::makegrid
函数。
让我们从一个可重现的例子开始:
library(raster)
shp <- getData(country = "FRA", level = 0)
所以现在我们有了一个(多)多边形。让我们将其转换为公制坐标系(因为您的数据和单元格大小也是公制的):
shp <- spTransform(shp, CRSobj = "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
plot(shp)
之后,我们将在此多边形内创建一个具有您指定的像元大小的网格。
cs <- c(3.28084, 3.28084)*6000
grdpts <- makegrid(shp, cellsize = cs)
然后,我们将这个网格(基本上是中心点矩阵)转换为 SpatialPoints
对象:
spgrd <- SpatialPoints(grdpts, proj4string = CRS(proj4string(shp)))
然后可以将其转换为 SpatialPixels 对象。 (注意: 添加子集 [shp, ]
仅选择原始多边形内的点)
spgrdWithin <- SpatialPixels(spgrd[shp,])
plot(spgrdWithin, add = T)
如果您需要网格作为多边形或网格,您可以使用
spgrdWithin <- as(spgrdWithin, "SpatialPolygons")
# or
spgrdWithin <- as(spgrdWithin, "SpatialGrid")
我正在尝试在 shapefile 中创建一个网格,就像这样。但是,我无法生成这样的网格。我想知道是否有人知道如何实现这一点。
这是我的代码 -
WWWL.Shape<- readOGR("E:/Juan Arango", "WWL_Commerce_OK")
WWWL.Shape
plot(WWWL.Shape)
proj4string(WWWL.Shape)
bb <- bbox(WWWL.Shape)
cs <- c(3.28084, 3.28084)*6000 # cell size
cc <- bb[, 1] + (cs/2) # cell offset
cd <- ceiling(diff(t(bb))/cs) # number of cells per direction
grd <- GridTopology(cellcentre.offset=cc, cellsize=cs, cells.dim=cd)
grd
sp_grd <- SpatialGridDataFrame(grd,
data=data.frame(id=1:prod(cd)),
proj4string=CRS(proj4string(WWWL.Shape)))
plot(sp_grd)
WWL.Shape
的输出
class : SpatialPolygonsDataFrame
features : 1
extent : 334367, 334498.7, 4088915, 4089057 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=15 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
variables : 1
names : Id
min values : 0
max values : 0
sf
版本
请参阅下面的 rgdal
版本
首先,我们从一个 shapefile 开始。您可能会使用 st_read
.
library(sf)
library(raster)
library(ggplot2)
# load some spatial data. Administrative Boundary
shp <- getData('GADM', country = 'aut', level = 0)
shp <- st_as_sf(shp)
# ggplot() +
# geom_sf(data = shp)
现在你唯一需要的是 st_make_grid
和 st_intersection
的组合:
grid <- shp %>%
st_make_grid(cellsize = 0.1, what = "centers") %>% # grid of points
st_intersection(shp) # only within the polygon
# ggplot() +
# geom_sf(data = shp) +
# geom_sf(data = grid)
rgdal
和版本
要创建像素网格,您可以使用 sp::makegrid
函数。
让我们从一个可重现的例子开始:
library(raster)
shp <- getData(country = "FRA", level = 0)
所以现在我们有了一个(多)多边形。让我们将其转换为公制坐标系(因为您的数据和单元格大小也是公制的):
shp <- spTransform(shp, CRSobj = "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
plot(shp)
之后,我们将在此多边形内创建一个具有您指定的像元大小的网格。
cs <- c(3.28084, 3.28084)*6000
grdpts <- makegrid(shp, cellsize = cs)
然后,我们将这个网格(基本上是中心点矩阵)转换为 SpatialPoints
对象:
spgrd <- SpatialPoints(grdpts, proj4string = CRS(proj4string(shp)))
然后可以将其转换为 SpatialPixels 对象。 (注意: 添加子集 [shp, ]
仅选择原始多边形内的点)
spgrdWithin <- SpatialPixels(spgrd[shp,])
plot(spgrdWithin, add = T)
如果您需要网格作为多边形或网格,您可以使用
spgrdWithin <- as(spgrdWithin, "SpatialPolygons")
# or
spgrdWithin <- as(spgrdWithin, "SpatialGrid")