- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要能够在不丢失点的情况下缩小纬度/经度数据的多边形;更重要的是,我需要在正确的方向上有效地“消除”这些点。通常,gBuffer
工作正常,但不能保证点的数量和它们的相对间距。最终,每个点都有我需要保留的属性,而 gBuffer
和多边形增长/收缩的样条、平滑和其他“不错的效率”不允许我足够自信地保留这些属性一对一的映射。
例子:
library(rgeos) # gBuffer
dat <- structure(list(x = c(6, 5.98, 5.94, 5.86, 5.75, 5.62, 5.47, 5.31, 5.13, -4.87, -5.04, -5.22, -5.39, -5.55, -5.69, -5.81, -5.9, -5.96, -6, -6, -6, -5.96, -5.9, -5.81, -5.69, -5.55, -5.39, -5.22, -5.04, -3.04, -2.87, -2.69, -2.53, -2.38, -2.25, -2.14, -2.06, -2.02, -2, -2, -1.96, -1.9, -1.81, -1.69, -1.55, -1.39, -1.22, -1.04, -0.87, 1.13, 1.31, 1.47, 1.62, 1.75, 1.86, 1.94, 1.98, 2, 2, 2, 2.04, 2.1, 2.19, 2.31, 2.45, 2.61, 2.78, 2.96, 4.96, 5.13, 5.31, 5.47, 5.62, 5.75, 5.86, 5.94, 5.98, 6), y = c(5, 5.18, 5.35, 5.51, 5.66, 5.78, 5.88, 5.95, 5.99, 5.99, 6, 5.97, 5.92, 5.83, 5.72, 5.59, 5.43, 5.27, 5.09, -4.91, -5.09, -5.27, -5.43, -5.59, -5.72, -5.83, -5.92, -5.97, -6, -6, -5.99, -5.95, -5.88, -5.78, -5.66, -5.51, -5.35, -5.18, -5, -1.91, -1.73, -1.57, -1.41, -1.28, -1.17, -1.08, -1.03, -1, -1.01, -1.01, -1.05, -1.12, -1.22, -1.34, -1.49, -1.65, -1.82, -2, -4.91, -5.09, -5.27, -5.43, -5.59, -5.72, -5.83, -5.92, -5.97, -6, -6, -5.99, -5.95, -5.88, -5.78, -5.66, -5.51, -5.35, -5.18, 5)), row.names = c(NA, -78L), class = "data.frame")
# "shrink-wrap"
sp <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon( as.matrix(dat) )), "dat")))
sp2 <- gBuffer(sp, width = -0.5)
dat2 <- as.data.frame(sp2@polygons[[1]]@Polygons[[1]]@coords)
c(nrow(dat), nrow(dat2))
# [1] 78 97
我们立即看到点数的变化。我认识到,大多数时候,这是 gBuffer
的理想特性,因此 rgeos
可能不是这种转换的最佳工具。
library(ggplot2) # just for vis here
ggplot(dat, aes(x, y)) +
geom_path() + geom_point() +
geom_path(data = dat2, color = "red") + geom_point(data = dat2, color = "red")
这张图片对我想要的整体形状有效果,但是增加了点数,也就是说我不能再依赖与原来点的1对1关系。
一般来说,多边形不是对称的,许多多边形都有像这样的内部裁剪,其中许多将点“拉”到特定方向的方法会产生偏差或方向错误。
我在 gBuffer
中找不到任何选项,在 rgeos
中也找不到其他函数能够保留点的数量和基本空间关系。我不需要“完美”收缩,如果它改变了事情,但它不应该显着偏离。
最佳答案
如果您对当前缩小多边形的方式感到满意,这可能会奏效。它以此为基础获得从旧(大)点到新(小)多边形的 1:1 点映射。
library(rgeos) # gBuffer
library(sf)
library(tidyverse)
dat <- structure(list(x = c(6, 5.98, 5.94, 5.86, 5.75, 5.62, 5.47, 5.31, 5.13, -4.87, -5.04, -5.22, -5.39, -5.55, -5.69, -5.81, -5.9, -5.96, -6, -6, -6, -5.96, -5.9, -5.81, -5.69, -5.55, -5.39, -5.22, -5.04, -3.04, -2.87, -2.69, -2.53, -2.38, -2.25, -2.14, -2.06, -2.02, -2, -2, -1.96, -1.9, -1.81, -1.69, -1.55, -1.39, -1.22, -1.04, -0.87, 1.13, 1.31, 1.47, 1.62, 1.75, 1.86, 1.94, 1.98, 2, 2, 2, 2.04, 2.1, 2.19, 2.31, 2.45, 2.61, 2.78, 2.96, 4.96, 5.13, 5.31, 5.47, 5.62, 5.75, 5.86, 5.94, 5.98, 6), y = c(5, 5.18, 5.35, 5.51, 5.66, 5.78, 5.88, 5.95, 5.99, 5.99, 6, 5.97, 5.92, 5.83, 5.72, 5.59, 5.43, 5.27, 5.09, -4.91, -5.09, -5.27, -5.43, -5.59, -5.72, -5.83, -5.92, -5.97, -6, -6, -5.99, -5.95, -5.88, -5.78, -5.66, -5.51, -5.35, -5.18, -5, -1.91, -1.73, -1.57, -1.41, -1.28, -1.17, -1.08, -1.03, -1, -1.01, -1.01, -1.05, -1.12, -1.22, -1.34, -1.49, -1.65, -1.82, -2, -4.91, -5.09, -5.27, -5.43, -5.59, -5.72, -5.83, -5.92, -5.97, -6, -6, -5.99, -5.95, -5.88, -5.78, -5.66, -5.51, -5.35, -5.18, 5)), row.names = c(NA, -78L), class = "data.frame")
# "shrink-wrap"
sp <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon( as.matrix(dat) )), "dat")))
sp2 <- gBuffer(sp, width = -0.5)
dat2 <- as.data.frame(sp2@polygons[[1]]@Polygons[[1]]@coords)
## New methods begin here
# change objects to type `sf`
sp_sf <- st_as_sf(sp)
sp2_sf <- st_as_sf(sp2)
dat_sf <- dat %>% st_as_sf(coords = c('x', 'y'))
dat2_sf <- dat2 %>% st_as_sf(coords = c('x', 'y'))
# The plot so far, saved for building on further down
p <- ggplot() +
geom_sf(data = sp_sf, color = 'blue', fill = NA) +
geom_sf(data = dat_sf, color = 'blue') +
geom_sf(data = sp2_sf, color = 'red', fill = NA) +
geom_sf(data = dat2_sf, color = 'red')
# Using st_nearest_points original points to new small polygon
# results in (perpendicular?) lines from old points to new small polygon
near_lines <- st_nearest_points(dat_sf, sp2_sf)
#plotted together:
p + geom_sf(data = near_lines, color = 'black')
## Zooming in on a problem area
p + geom_sf(data = near_lines, color = 'black') +
coord_sf(xlim = c(-3, 0), ylim = c(-2,0))
# Get only 1:1 points for shrunken polygon
# a small buffer had to be added, as some points were not showing up
# you may need to adjust the buffer, depending on your data & projection
new_points <- st_intersection(st_buffer(near_lines, .001), sp2_sf)
# All together now:
p + geom_sf(data = near_lines, color = 'black') +
geom_sf(data = new_points, color = 'green', size = 4) +
coord_sf(xlim = c(-3, 0), ylim = c(-2,0))
由 reprex package 创建于 2020-12-20 (v0.3.0)
关于rgeos::gBuffer 收缩不失分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65366110/
我是 R 及其包系统的新手,刚刚编写了我的第一个包,目的是将它与 OpenCPU 一起使用。 执行这个函数时: #' Create a PNG which shows interpolated sen
首先,如果这真的很简单,我深表歉意,但我似乎无法弄明白。我正在使用 RGeo 在 UTM 和纬度/经度之间进行转换,就像这样; srs_database = RGeo::CoordSys::SRSD
嗨,我是 R 语言和 renjin 的新手。在我的项目中,以下是添加的 Maven 依赖项。 org.renjin.cran rgeos 0.3-2-
我需要能够在不丢失点的情况下缩小纬度/经度数据的多边形;更重要的是,我需要在正确的方向上有效地“消除”这些点。通常,gBuffer 工作正常,但不能保证点的数量和它们的相对间距。最终,每个点都有我需要
我有一堆具有自相交的多边形,这会导致在进一步后处理它们时出现一些错误(特别是 - 我无法计算这些多边形与其他多边形的相交面积)。这是一个 splinter 的多边形示例: { "type": "M
我有一个使用带有 proj4 支持的 rgeo 0.3.19 的 rails 应用程序,它使用 rgeo-activerecord 0.4.5 gem 连接到 PostGIS 1.5 数据库。 我的应
您好,我需要 R 中的世界地图,并使用几行代码将其安装在我的 Windows 10 机器 R 版本 2.15.2 (2012-10-26) 上。 rgeos 版本:0.3-4,(SVN 修订版 438
我有一个包含位置属性的模型,由 RGeo::Cartesian::Point 对象表示,并作为空间数据存储在我的数据库中。 为了运行测试,我需要通过固定装置创建此类模型的一些示例。 我尝试了几种不同的
我有一个包含位置属性的模型,由 RGeo::Cartesian::Point 对象表示,并作为空间数据存储在我的数据库中。 为了运行测试,我需要通过固定装置创建此类模型的一些样本。 我尝试了几种不同的
RGeo 有可用的凸包方法,但在这方面根本没有文档。 给定一组点,我如何找到它们的凸包? 最佳答案 好问题。事实证明,有一种名为“MultiPoint”的几何类型适用于此。我做了一个简单的例子来测试它
我是地理空间数据的新手,正在使用 Rails RGeo gem .我的 Rails 控制台出现以下错误: > geo_shape = ES_Zone::FACTORY.parse_wkt RGeo::
我需要知道一个点是否在我的 Rails 应用程序中的多边形中,以便我想使用 rgeo gem。 为了安装这个 geme,我按照 rgeo git 上的说明进行操作 然后我确定 GEOS 和 Proj4
我正在尝试在 Linux 上安装包 rgeos。我收到以下错误: system("sudo apt-get update") system("sudo apt install libgdal-dev
我有一个代表学区的多边形,它是我从 NYC Open Data 导入的.我相信坐标在 epsg projection 2263 - nad83 / new york long island 中 我无法
我正在尝试安装 rgeos在 ubuntu 16.04 中运行的 R 3.5.1 中。当我跑 install.packages("rgeos") 我收到以下消息: * installing *sour
背景 我对使用 gSimplify 简化多边形很感兴趣。功能可通过 rgeos 获得包裹。 可重现的例子 可以使用以下代码生成可重现的示例: # Data sourcing -------------
RGeo 为 POINT 特性提供内置方法,例如 getter 方法 lat()和 lon()从 POINT 对象中提取纬度和经度值。不幸的是,这些不能作为二传手。例如: point = RGeo::
我正在编写一个应用程序,我试图集成一些通用的地理定位功能,包括将一些纬度/经度坐标保存为数据库中的一个点。这样做的目的是允许用户使用他们的位置(由设备提供)或谷歌地图标记来选择他们的坐标。我已经成功地
我正在尝试使用 osmar 下载数据,从 OSM 获取多边形的大小。然而,健全性检查告诉我这些是不正确的。 下面是我的意思的一个例子。 (1) 伦敦海德公园周围的地理区域。提取标记为“park”的所有
对于 R 中的许多地理事物,我已经从包 sp 切换到 sf,直到现在我才注意到一个奇怪的问题sp/rgeos 中的行为。在这里: library(sp) library(sf) library(rge
我是一名优秀的程序员,十分优秀!