使用 R 质心函数问题计算蒙大拿州的中心

Posted

技术标签:

【中文标题】使用 R 质心函数问题计算蒙大拿州的中心【英文标题】:Calculation of the Center of Montana Using R Centroid Function Issues 【发布时间】:2018-02-01 02:20:28 【问题描述】:

我正在尝试使用 geosphere 包中的 R centroid 函数找到蒙大拿州的中心。纬度/经度坐标存储在存储在xx 中的形状文件中,计算时会在百慕大附近产生结果。

关于如何解决此问题的任何建议?

geosphere::centroid(as.matrix(xx))
#           lon      lat
#[1,] -62.60957 28.57984
range(xx$long)
#-116.0492 -104.0391
range(xx$lat)
#44.38032 49.00091

这里是xx:https://pastebin.com/uFgmph9g

供参考

【问题讨论】:

【参考方案1】:

我认为你可以通过平均所有点的坐标来计算质心的坐标,正如这个链接所建议的那样 (https://gis.stackexchange.com/questions/6025/find-the-centroid-of-a-cluster-of-points)。

cen <- colMeans(xx)
cen
#       long        lat 
# -110.27848   46.91494 

这是一个可视化,看看质心计算是否有意义。红点是质心。

library(sf)
library(leaflet)
library(mapview)

xx2 <- st_as_sf(xx, coords = c("long", "lat"), crs = 4326)
cen2 <- st_as_sf(as.data.frame(t(cen)), coords = c("long", "lat"), crs = 4326)

mapview(xx2) + mapview(cen2, col.regions = "red")

【讨论】:

谢谢,colMeans 在这种情况下非常适合 MT,因为它是一个漂亮的矩形,但 centroids 对于不太规则的形状要好得多。除了在这种情况下,它给了我一个非常奇怪的结果。 质心的定义是什么?我认为质心是坐标的平均值。 我假设点分布的形状不会影响质心的定义。 geosphere 包中的质心函数适用于多边形。您的示例是点模式,因此在这种情况下可能不适合。 另外,当你使用library(sf)时,它也有一个st_centroid()函数。

以上是关于使用 R 质心函数问题计算蒙大拿州的中心的主要内容,如果未能解决你的问题,请参考以下文章

如何计算质心和数据矩阵之间的距离(用于 kmeans 算法)

图像处理 - 计算二值图像中空白质心的算法

什么叫图像或轮廓的空间矩中心矩归一化中心矩?并利用OpenCV的类Moments计算轮廓的这几个矩和质心位置

Java libGDX Box2D:你可以手动设置质心吗?

如何用 Matlab 立体计算机视觉测量运动物体的距离和质心?

[OpenCV实战]9 使用OpenCV寻找平面图形的质心