将栅格转换为多边形时不需要的子几何
unwanted subgeometries when converting raster to polygons
我正在将许多栅格转换为多边形。但在很多情况下,我会看到意想不到的子几何图形,而且我似乎无法摆脱它们。
这是 R v3.3.3 和光栅包 v2.5-8。
这是一个应该重现我遇到的问题的示例。
你可以下载我使用的光栅here。
# first, read in raster and coarsen to something more manageable
library(raster)
library(rgeos)
env <- raster('adefi.tif')
env2 <-aggregate(env, 8)
# Reclassify such that cells are either 1 or NA
env2[!is.na(env2)] <- 1
# this is what the raster now looks like:
plot(env2)
# Now I convert to polygon, choosing to dissolve
p <- rasterToPolygons(env2, dissolve=T)
plot(p)
# I find that I can't get rid of these subgeometries
p <- gUnaryUnion(p) # identical result
gIsValid(p) # returns TRUE
我不确定问题出在哪里...是栅格包如何转换为像元多边形吗?或者是 rgeos 包如何将这些单元格多边形溶解在一起?
有解决方法吗?
看起来像是投影问题。这对我有用:
library(raster)
library(rgeos)
env <- raster(file.path(fp, "adefi.tif"))
env2 <- aggregate(env, 8)
env2[is.na(env2) == F] <- 1
# Project Raster
proj_env2 <- projectRaster(env2, crs = CRS("+init=epsg:3577"))
p <- rasterToPolygons(proj_env2, dissolve = T)
plot(p)
不确定为什么需要重新投影,因为 epsg:3577 看起来与原始投影相同,但我通常使用 proj4string() 或 spTransform() 确认投影以确保一切都对齐。
我正在将许多栅格转换为多边形。但在很多情况下,我会看到意想不到的子几何图形,而且我似乎无法摆脱它们。
这是 R v3.3.3 和光栅包 v2.5-8。
这是一个应该重现我遇到的问题的示例。
你可以下载我使用的光栅here。
# first, read in raster and coarsen to something more manageable
library(raster)
library(rgeos)
env <- raster('adefi.tif')
env2 <-aggregate(env, 8)
# Reclassify such that cells are either 1 or NA
env2[!is.na(env2)] <- 1
# this is what the raster now looks like:
plot(env2)
# Now I convert to polygon, choosing to dissolve
p <- rasterToPolygons(env2, dissolve=T)
plot(p)
# I find that I can't get rid of these subgeometries
p <- gUnaryUnion(p) # identical result
gIsValid(p) # returns TRUE
我不确定问题出在哪里...是栅格包如何转换为像元多边形吗?或者是 rgeos 包如何将这些单元格多边形溶解在一起? 有解决方法吗?
看起来像是投影问题。这对我有用:
library(raster)
library(rgeos)
env <- raster(file.path(fp, "adefi.tif"))
env2 <- aggregate(env, 8)
env2[is.na(env2) == F] <- 1
# Project Raster
proj_env2 <- projectRaster(env2, crs = CRS("+init=epsg:3577"))
p <- rasterToPolygons(proj_env2, dissolve = T)
plot(p)
不确定为什么需要重新投影,因为 epsg:3577 看起来与原始投影相同,但我通常使用 proj4string() 或 spTransform() 确认投影以确保一切都对齐。