使用 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计算轮廓的这几个矩和质心位置