相关疑难解决方法(0)

比质心更好的"中心点"

我正在使用多边形的质心在地图应用程序中附加标记.这对于凸多边形非常好,对于许多凹多边形非常有用.

然而,一些多边形(香蕉,甜甜圈)显然不会产生所需的结果:在这些情况下,质心在多边形区域之外.

有没有人知道更好的方法任何多边形区域(可能包含孔!)中找到合适的点来附加标记?

在此输入图像描述

algorithm geometry center computational-geometry centroid

9
推荐指数
2
解决办法
329
查看次数

改进地图/多边形标签的定位

这是改进居中县名称 ggplot 和地图以及地图上 ggplot 居中名称的扩展。这不仅仅是一个理论问题,我在回答How merge certain states Together by group with one label in ggplot2 in R? 时遇到了这种特殊情况。。在这里,我发现有一个L形的“网格”通向多边形外部的中点位置。另请参阅 Henrik 的链接线程Calculate Centroid Within / INSIDE a SpatialPolygon。。

我想知道是否有办法强制标签进入多边形,以获得“更直观”的中点。“直观地”可能意味着“多边形内距离任何边界最远的点”相关线程的答案建议使用一个函数来计算它,但这个函数似乎没有给出与rgeos::gCentroid我的示例中不同的结果)。

任何建议都应该是完全自动化的,理想情况下适用于任何(ir-)正多边形,并且也独立于坐标投影(即坐标纵横比不重要) 校正:理想情况下它应该取决于坐标投影,因为这可能会将文本移动到边框的尴尬位置。因此,理想的解决方案可能应该在绘制时计算标签位置。

非常相关的是https://gis.stackexchange.com/questions/29278/finding-point-in-country-furthest-from-boundaryhttps://mathoverflow.net/questions/161494/get-a-point- in-polygon-maximize-the-distance-from-borders,但我不知道如何在 R / grid / ggplot2 中实现这一点。

suppressMessages({library(ggh4x)
library(sf)
library(dplyr)
library(patchwork)
})

poly_foo <- data.frame(x = c(0:1, rep(2,4), rep(1.5,3), 0), y = c(rep(0,3), 1:3, 3:1, 1))

p <- …
Run Code Online (Sandbox Code Playgroud)

r polygon ggplot2 r-sp r-sf

8
推荐指数
1
解决办法
976
查看次数

计算R中的加权多边形质心

我需要根据单独的种群网格数据集计算一组空间区域的质心.感谢如何在下面的例子中实现这一目标.

提前致谢.

require(raster)
require(spdep)
require(maptools)

dat <- raster(volcano)   # simulated population data
polys <- readShapePoly(system.file("etc/shapes/columbus.shp",package="spdep")[1])

# set consistent coordinate ref. systems and bounding boxes
proj4string(dat) <- proj4string(polys) <- CRS("+proj=longlat +datum=NAD27")
extent(dat) <- extent(polys)

# illustration plot
plot(dat, asp = TRUE)
plot(polys, add = TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

gis r raster centroid

5
推荐指数
2
解决办法
2076
查看次数

多边形内的r sf包质心

我需要向多边形添加标签,并且通常使用质心,但是质心不会落在多边形内。我发现这个问题是在SpatialPolygon中/内部计算质心,但我使用的是sf包。

以下是玩具数据

rm(list = ls(all = TRUE)) #start with empty workspace

library(sf)
library(tidyverse)
library(ggrepel)

pol <- st_polygon(list(rbind(c(144, 655),c(115, 666)
                         ,c(97, 660),c(86, 640)
                         ,c(83, 610),c(97, 583)
                         ,c(154, 578),c(140, 560)
                         ,c(72, 566),c(59, 600)
                         ,c(65, 634),c(86, 678)
                         ,c(145, 678),c(144, 655)))) %>%
  st_sfc()

a = data.frame(NAME = "A")
st_geometry(a) = pol

a <- a  %>% 
  mutate(lon = map_dbl(geometry, ~st_centroid(.x)[[1]]),
     lat = map_dbl(geometry, ~st_centroid(.x)[[2]]))

ggplot() +
  geom_sf(data = a, fill = "orange") +
  geom_label_repel(data = a, aes(x = lon, y = lat, label …
Run Code Online (Sandbox Code Playgroud)

r centroid r-sf

5
推荐指数
1
解决办法
1357
查看次数