- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 R 中的 raster
包从光栅对象中提取轮廓线。
rasterToContour
似乎工作良好并且绘制得很好,但在调查时发现轮廓线被分解成不规则的线段。来自 ?rasterToContour
library(raster)
f <- system.file("external/test.grd", package="raster")
r <- raster(f)
x <- rasterToContour(r)
class(x)
plot(r)
plot(x, add=TRUE)
我正在尝试提取栅格中示例站点的等高线。因此,我们选择一个随机站点,提取其高程,然后再次运行 rasterToContour()
,指定等高线 level
的高程。
# our sample site - a random cell chosen on the raster
xyFromCell(r, 5000) %>%
SpatialPoints(proj4string = crs(r)) %>%
{. ->> site_sp} %>%
st_as_sf %>%
{. ->> site_sf}
# find elevation of sample site, and extract contour lines
extract(r, site_sf) %>%
{. ->> site_elevation}
# extract contour lines
r %>%
rasterToContour(levels = site_elevation) %>%
{. ->> contours_sp} %>%
st_as_sf %>%
{. ->> contours_sf}
# plot the site and new contour lines (approx elevation 326)
plot(r)
plot(contours_sf, add = TRUE)
plot(site_sf, add = TRUE)
# plot the contour lines and sample site - using sf and ggplot
ggplot()+
geom_sf(data = contours_sf)+
geom_sf(data = site_sf, color = 'red')
然后我们使用 st_intersects
找到与站点相交的线(缓冲区宽度为 100 以确保它与线相交)。但是,这会返回所有等高线。
contours_sf %>%
filter(
st_intersects(., site_sf %>% st_buffer(100), sparse = FALSE)[1,]
) %>%
ggplot()+
geom_sf()
我假设所有行都已返回,因为它们看起来是单个 MULTILINESTRING
sf
对象。
contours_sf
# Simple feature collection with 1 feature and 1 field
# geometry type: MULTILINESTRING
# dimension: XY
# bbox: xmin: 178923.1 ymin: 329720 xmax: 181460 ymax: 333412.3
# CRS: +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +datum=WGS84 +units=m +no_defs
# level geometry
# C_1 326.849822998047 MULTILINESTRING ((179619.3 ...
因此,我使用 ngeo::st_segments()
将 contours_sf
MULTILINESTRING
拆分为单独的行(我找不到任何 sf
方法来做到这一点,但我愿意使用替代方法,特别是如果这是问题所在)。
没想到这会返回 394 个特征;从图中我预计大约有 15 条单独的线。
contours_sf %>%
nngeo::st_segments()
# Simple feature collection with 394 features and 1 field
# geometry type: LINESTRING
# dimension: XY
# bbox: xmin: 178923.1 ymin: 329720 xmax: 181460 ymax: 333412.3
# CRS: +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +datum=WGS84 +units=m +no_defs
# First 10 features:
# level result
# 1 326.849822998047 LINESTRING (179619.3 329739...
# 2 326.849822998047 LINESTRING (179580 329720.4...
# 3 326.849822998047 LINESTRING (179540 329720, ...
# 4 326.849822998047 LINESTRING (179500 329735.8...
# 5 326.849822998047 LINESTRING (179495.3 329740...
# 6 326.849822998047 LINESTRING (179460 329764, ...
# 7 326.849822998047 LINESTRING (179442.6 329780...
# 8 326.849822998047 LINESTRING (179420 329810, ...
# 9 326.849822998047 LINESTRING (179410.2 329820...
# 10 326.849822998047 LINESTRING (179380 329847.3...
然后,当我们过滤以仅保留与站点相交的线(缓冲区宽度为 100)时,仅返回预期轮廓线的一小部分(线的红色部分,我假设反射(reflect)了 100 缓冲区宽度)。
contours_sf %>%
nngeo::st_segments() %>%
filter(
# this syntax used as recommended by this answer https://stackoverflow.com/a/57025700/13478749
st_intersects(., site_sf %>% st_buffer(100), sparse = FALSE)
) %>%
ggplot()+
geom_sf(colour = 'red', size = 3)+
geom_sf(data = contours_sf)+
geom_sf(data = site_sf, colour = 'cyan')+
geom_sf(data = site_sf %>% st_buffer(100), colour = 'cyan', fill = NA)
任何人都对以下几点有想法:
nngeo::st_segments()
的替代方案,如果这实际上是 394 行的来源而不是 ~15最佳答案
将 MULTILINESTRING 转换为 LINESTRING 似乎可以满足您的需要:
contours_sf %>% st_cast("LINESTRING") %>%
filter(st_intersects(., st_buffer(site_sf, 100), sparse=FALSE)[,1]) %>%
ggplot()+
geom_sf(data = contours_sf)+
geom_sf(data = site_sf, color = 'red') +
geom_sf(color = 'pink')
关于光栅::光栅到轮廓;轮廓线不连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67579831/
我正在尝试使用 R 中的 raster 包从光栅对象中提取轮廓线。 rasterToContour 似乎工作良好并且绘制得很好,但在调查时发现轮廓线被分解成不规则的线段。来自 ?rasterToCon
我有两个光栅对象 > x1 class : RasterLayer dimensions : 36, 72, 2592 (nrow, ncol, ncell) resolution
我已经看到与CUPS库相关的两个文件: OpenPrinting/cups-filters/blob/master/filter/imagetoraster.c OpenPrinting/cups-f
有没有办法确保绘图周围的框与栅格范围完全匹配?在下面的内容中,根据设备的比例,在栅格的上方,下方或左侧和右侧都有一个间隙: require(raster) r = raster() r[]= 1 pl
我有下面的代码,可以将图像保存到我的电脑上。我想将该图像绕其中心(或左下角)旋转 45,90 和 135 度,然后另存为 3 个不同的图像。我怎样才能做到这一点? library(raster) r1
我有热敏打印机 X330,我需要打印和从 android 相机获取图像(位图),但我不能...我总是在打印机中得到符号。 文档中说: 打印光栅位图 十六进制 1D 76 30 m xL xH yL y
我是 python 的初学者,我仍在熟悉它的库,如果这是一个新手问题,我很抱歉。我只想显示 4 个波段(R、G、B、NIR)的图像。我想删除 NIR 并保留其他 3 个。我该怎么做?由于 raster
我知道这似乎是一个奇怪的问题,而且确实如此!但是利用 Windows 已经安装的固定宽度字体(例如:Fixedsys)我会节省很多大小(因为我想让最终的 EXE 尽可能小) 从 Windows 上现有
要求: 保留图形模式 API 仅适用于 2D 对象(尽管这些 2D 对象的 3D 变换很有趣) 跨平台 矢量图形绘制 光栅合成 + 支持不透明蒙版 - 当然是硬件加速... 动画 API 封装大小 -
我还在 SO 的 GIS 部分发布了这个问题。因为我不确定这是否是一个“纯”python 问题,所以我也在这里再次提问。 我想知道是否有人在不使用 ArcGIS 的情况下从栅格获取高程数据有一些经验,
我是一名优秀的程序员,十分优秀!