在网上搜索时,经常会找到用于查找多边形质心的解决方案。我感兴趣的是找到点簇的质心。

可以提供一些指针,伪代码(或者更好的是,已经解决了这个问题的R程序包)或如何解决此问题的链接?


@iant提出了一种平均坐标并将其用于质心的方法。当我在此网页上看到正确的图片时,这正是我的主意。

下面是一些简单的R代码,用于绘制下图来说明这一点(×是质心):

xcor <- rchisq(10, 3, 2)
ycor <- runif(10, min = 1, max = 100)
mx <- mean(xcor)
my <- mean(ycor)

plot(xcor, ycor, pch = 1)
points(mx, my, pch = 3)





cluster::pam()$medoids返回一组簇的中心。这是@Joris Meys的示例:

library(cluster)
df <- data.frame(X = rnorm(100, 0), Y = rpois(100, 2))
plot(df$X, df$Y)
points(pam(df, 1)$medoids, pch = 16, col = "red")


评论

点的平均中心或最小距离中心不足吗?

@罗马:图形不正确:您需要使用均值,而不是中位数。对于2D空间点云,有中间中心的类似物,但这不是其中之一(因为它与坐标有关):有关讨论,请参见stats.stackexchange.com/q/1927/919。

我还建议您查看Crimestat工作簿的第4章icpsr.umich.edu/CrimeStat/files/CrimeStatChapter.4.pdf。这是一个非常柔和的介绍,描述并以图形方式显示了为什么较高维度的中位数没有唯一的解决方案,并描述了集中趋势和空间点模式方差的其他度量。

这变得越来越有趣。谢谢您的回答。我正在调查这件事。

“建议了一种平均坐标的方法,并将其用于质心。”实际上,这是质心的定义,不仅仅是简单的近似。

#1 楼

只需平均X和Y坐标(如果需要,乘以权重)即可得到质心。

评论


+1很棒的解决方案。它也延伸到椭球体上的质心(这对于避免将点分布在地球的大部分上时避免与投影相关的变形是必不可少的):首先将(lat,lon)转换为3D(x,y,z)(地心坐标),对它们求平均值,然后将结果转换回(纬度,经度)(忽略了3D平均值将在表面深处几乎不可避免的事实)。

– hu
11年10月10日在16:33

我已经更新了我的问题,以反映您的回答。

–罗马·卢斯特里克
11年10月10日在16:51

为什么使用建议使用体重?

–Herman牙刷
20 Mar 11 '20 at 10:47

有时人们想要加权的质心(例如,人口加权的质心将质心拉向市中心)

–伊恩·特顿♦
20 Mar 11 '20 at 10:52

@whuber尝试用sf在R中实现您的方法。如何转换为3d地心坐标?是st_transform(crs = 4328),求平均值,然后是st_transform(crs = 4326)回到lat / lng,然后最后通过st_zm()删除Z坐标吗?

–马特SM
20-10-22在18:33

#2 楼

您可以使用geosphere软件包中的质心功能。

https://www.rdocumentation.org/packages/geosphere/versions/1.5-5/topics/centroid

评论


欢迎使用GIS StackExchange,感谢您提交答案。请花一点时间查看巡回赛,以了解我们重点关注的问答形式。请修改您的答案以包含更多详细信息,因为我们通常在寻找更长的答案(而不是1-2句),以帮助原始海报或未来的搜索者。您可以做的一种修改是包含您认为此工具会有所帮助的原因或代码段/屏幕截图。

–smiller
18年11月16日在17:00

@smiller仅在您至少有4分时才有效。

–Herman牙刷
20 Mar 11 '20 at 10:45

@ Herman Toothrot这个评论的意思是答案的@Leonardo Leite Ferraz de Campo。

–smiller
20 Mar 11 '20 at 13:43