溶解rasterToPolygons的输出

时间:2018-04-10 00:34:40

标签: geospatial spatial r-raster rgeo

rasterToPolygons包中使用raster时,符合公式标准的每个单元格都会成为自己的多边形:

library(raster)
r <- raster(nrow=18, ncol=36)
r[] <- runif(ncell(r)) * 10
r[r>8] <- NA
pol <- rasterToPolygons(r, fun=function(x){x>6})
plot(pol)
然而,我希望每个具有相邻边或角的多边形都是一个较大多边形的一部分,从而减少了多边形的总数。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:0)

OLD ANSWER:

您可以使用参数library(raster) r <- raster(nrow=18, ncol=36) r[] <- sample(2, ncell(r), replace=TRUE) pol <- rasterToPolygons(r, dissolve=TRUE) plot(pol)

library(raster)
r <- raster(nrow=18, ncol=36)
r[] <- runif(ncell(r)) * 10
r[r>8] <- NA

新答案

如果你不关心这些值,你可以做这样的事情

您的示例数据

NA

将您想要的所有值单元格设置为一个值,将所有其他值设置为x <- reclassify(r, rbind(c(-Inf, 6, NA), c(6, Inf, 1))) pol <- rasterToPolygons(x, dissolve=TRUE)

pols <- disaggregate(pol)
pols
#class       : SpatialPolygonsDataFrame 
#features    : 80 

请注意,pol现在只有1个(多)多边形。如果要分离未连接的部分,可以执行

$sql = "SELECT * FROM users_gor WHERE usrg_usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users_gor = $rows[0];

$sql = "SELECT * FROM users_vgr WHERE usrv_usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users_vgr = $rows[0];

$sql = "SELECT * FROM users WHERE usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users = $rows[0];

$sql = "SELECT * FROM vlog-ops WHERE vlop_usr_id ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users = $rows[0];

$sql = "SELECT usr_name AS vlop_usr_name FROM users WHERE usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$result = mysql_query($sql);        
$row = mysql_fetch_array($result);


$sql = "SELECT usr_name  FROM users WHERE usr_id='".$db->quote($user_info['usr_id'])." LIMIT 1";
$creator = $db->select1($sql);
$users = $rows[0];

$query = "SELECT u.usr_name, g.usrg_orgname, v.vlop_usr_id  FROM users u 
JOIN vlog-ops v on u.usr_id = v.vlop_usr_id 
JOIN users_gor g on u.usr_id = g.usrg_usr_id";

请注意,对角线的adjecent多边形是彼此分开的,因为它们不能用于有效的单个多边形(它将是自相交的)。

答案 1 :(得分:-1)

这可以通过使用poly2nb包中的spdep函数来定义每个多边形的邻居,使用下面创建的函数创建区域分配的向量,使用{{1}从spCbind包中绑定maptoolsregions,然后使用pol中的regions函数最终解散unionSpatialPolygons。创建函数的基本结构是maptools至少有一个多边形的邻居被分配给一个组if赋予多边形,并且该组的邻居then将多边形和邻居分配给新组

else