GIS中不同图层的区域重叠,怎么从一个图层中把另一个区域扣出来,用手动找子图不行啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIS中不同图层的区域重叠,怎么从一个图层中把另一个区域扣出来,用手动找子图不行啊相关的知识,希望对你有一定的参考价值。
比如一个公园,一个图层是草坪,一个图层是湖,湖在草坪中 ,需要扣出一个湖的位置放湖的区域。怎么弄,同一个图层可以用手动找子区 但不同图层不行呀
不同图层之间可以使用空间分析的叠加分析,比如相减,或者相加。如果是同一图层中则属于拓扑错误了,使用区拓扑查错可以找到重叠部分,通过剪断处理可以修改。先画草坪在一个图层中,然后在画湖在另外一个层中。使用叠加分析,用草坪减去湖,就会生成一个新的草坪。两个层中数据边界是在一起的。 参考技术A 楼上说的是正确的。不知道你用的是什么软件,我简单说下ArcGIS的操作,你在编辑的情况下,可以直接用湖面clip下层草坪的重叠区域,或者你直接用ArcGis中有个Erase工具,用湖区域图层擦除草坪图层就行。这就是相应的空间叠加分析处理
R:是不是可以仅从栅格图层的非 NA 区域中采样随机点?
【中文标题】R:是不是可以仅从栅格图层的非 NA 区域中采样随机点?【英文标题】:R: Is it possible to sample random points from only the non-NA region of a raster layer?R:是否可以仅从栅格图层的非 NA 区域中采样随机点? 【发布时间】:2018-07-11 19:34:00 【问题描述】:我一直在尝试使用 spsample
从栅格图层(例如,24 个气候变量图层中的任何一个,在 Lambert Conformal Conic 投影中,来自 https://sites.ualberta.ca/~ahamann/data/climatewna.html)随机采样一个用户定义数量的点,在一个区域的范围由多边形定义,我通过围绕一组点形成圆圈并聚合它们的边界来生成,但无法弄清楚如何仅对定义的区域内的栅格部分进行采样。下图显示了我正在使用的栅格图层和多边形:
我知道可以在该区域内进行采样,然后使用栅格图层作为蒙版,以从采样点中删除落在该图层的 NA 区域内的点,但是,在此过程中,背景的数量剩余点数小于用户在 spsample
函数中指定的点数。这是我为完成此操作而编写的代码:
circles <- circles(coordinate_dat_train, 150000)
circle_polygon <- polygons(circles)
proj4string(circle_polygon) <- CRS("+proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
sample_mask <- raster("C:/...path.../cv_NORM_6190_AHM.tif")
r_sample <- spsample(circle_polygon, 1000, type='random')
r_sample_cells <- as.data.frame(extract(sample_mask, r_sample, cellnumbers = TRUE))
r_sample_cells <- as.data.frame(r_sample_cells[!is.na(r_sample_cells$cv_NORM_6190_AHM),])
r_sample_cells <- r_sample_cells[,-2]
r_sample_coords <- xyFromCell(sample_mask, r_sample_cells, spatial = TRUE)
我还尝试使用rasterToPolygon
函数将栅格转换为多边形,找到该多边形与原始多边形的交点,并仅在该交点内采样,但我正在使用的栅格图层如此大,完成这个过程所需的时间是不可行的。
是否有其他方法可以完成此操作,在计算时间方面相当快?提前致谢!
【问题讨论】:
如果您提供示例操作的代码(包括您正在使用的地图、您的掩码等),这可能会更容易。 @r2evans:完成;我已将脚本的相关部分添加到问题中。我没有使用mask
函数,而是提取落在栅格非NA 区域的随机点。
【参考方案1】:
从以多边形为边界的栅格中选择此类点集的一种方法是首先用多边形遮盖栅格,然后通过从遮蔽的栅格中仅选择包含非 NA 值的像元来生成新栅格。在这种情况下,可以这样做:
sample_mask <- raster("C:/...path.../cv_NORM_6190_AHM.tif")
# This command masks the raster so that its extent equals that of the circle polygon.
mask <- mask(sample_raster, circle_polygon)
# This command creates a new raster layer consisting of non-NA values from the masked layer.
non_na_raster <- !is.na(mask)
然后,使用sampleRandom
函数(它不会从一个像元中选择多个点,除非要选择的点数超过相关栅格层内的像元数),可以明确定义他们希望从遮罩栅格的陆地区域中选择的点数,如下所示:
# This command counts the number of cells within the non-NA raster layer, giving an accurate measure of the
# terrestrial area from which background points are drawn, so that sampling density may be determined.
cellStats(non_na_raster, 'sum')
r_sample <- as.data.frame(sampleRandom(x=non_na_raster, size = 1000, na.rm = TRUE, ext = circle_polygon, xy = TRUE))
可以使用其他一些随机点选择功能,例如spsample
,但sampleRandom
是raster
包特有的功能,可以避免对同一光栅单元进行多次采样,这就是为什么我在这种情况下使用它。
【讨论】:
以上是关于GIS中不同图层的区域重叠,怎么从一个图层中把另一个区域扣出来,用手动找子图不行啊的主要内容,如果未能解决你的问题,请参考以下文章