【问题标题】:R: poly_center out of polygon boundsR:poly_center 超出多边形边界
【发布时间】:2015-08-06 21:12:18
【问题描述】:

我正在使用 R 使用 poly_center(pracma 包)计算在此file 中读取的图形定义的多边形的质心。

奇怪的是,我得到的结果超出了多边形边界,中心点低于 x(lon)和 y(lat)轴/坐标的最小值(见下面的代码)。谁能提示我我做错了什么或这里发生了什么?

    # loading needed packages
    require(pracma)
    require(sp)
    t <- read.csv(file="testcm.txt",head=FALSE,row.names=NULL)[-1,] # readind file
    attach(t)
    lon <- V1
    lat <- V2
    cm <- poly_center(lon,lat) # center of mass
    cm
    [1] -49.92585 -16.52163
    min(lon)
    [1] -49.05978
    min(lat)
    [1] -16.45963
    plot(coordinates(t), type="n", xlab="longitude", ylab="latitude", xlim=c(-65,-40) , ylim=c(-35,-10)) # drawing base contours
    polygon(lon, lat, border = "red") # drawing polygon
    points(cm[1],cm[2], pch=22, col="blue") # drawing center of mass

【问题讨论】:

  • 由于我们没有您的 CSV 文件,因此发布 read.csv() 并没有多大帮助。也许你可以发帖dput(t)?另外,我强烈建议从不使用attac()
  • 感谢@Gregor 的输入。实际上我在 [这里] (drive.google.com/file/d/0B-NeuuVjTy4IQmRINVZHb1ZWNkE/view?pli=1) 上传了文件。在上面的问题中也是如此。干杯,再次感谢!
  • points(t(colMeans(coordinates(t))), col="red") 给出一个近似中心
  • 这是真的@nongkrong。它适用于这种情况以及“常规”形状。不幸的是,这种方法不会给我想要的结果,例如“L”形......:(

标签: r polygon sp


【解决方案1】:

查看poly_center,您可能还需要将多边形坐标的第一行绑定到末尾。看起来代码没有考虑将最后一个点包装回第一个点。

试试

tmp <- rbind(coordinates(t), coordinates(t)[1,])
points(t(poly_center(tmp[,1], tmp[,2])), col="green", pch=16)

【讨论】:

  • 解决了它@nongkrong!我在许多多边形之间有一个循环,而这恰好是唯一一个有这个问题的!非常感谢!干杯!
  • @HelioCamargo 很高兴听到它:)
猜你喜欢
  • 2020-11-29
  • 2013-04-30
  • 2020-05-26
  • 2013-02-24
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
相关资源
最近更新 更多