Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:poly_中心超出多边形边界_R_Polygon_Sp - Fatal编程技术网

R:poly_中心超出多边形边界

R:poly_中心超出多边形边界,r,polygon,sp,R,Polygon,Sp,我用R来计算图中所示多边形的重心,使用poly_center(pracma软件包) 奇怪的是,我得到的结果超出了多边形边界,中心点低于x(lon)和y(lat)轴/坐标的最小值(见下面的代码)。有没有人能告诉我我做错了什么或者这里发生了什么 # loading needed packages require(pracma) require(sp) t <- read.csv(file="testcm.txt",head=FALSE,row.names=NUL

我用R来计算图中所示多边形的重心,使用poly_center(pracma软件包)

奇怪的是,我得到的结果超出了多边形边界,中心点低于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
#加载所需的包
要求(pracma)
需要(sp)

t查看
多边形中心
,您可能还需要将多边形坐标的第一行绑定到末端。它看起来不像是将最后一点包装回第一点的代码

试一试


tmp查看
poly_center
,您可能还需要将多边形坐标的第一行绑定到末端。它看起来不像是将最后一点包装回第一点的代码

试一试


tmp由于我们没有您的CSV文件,发布
read.CSV()
没有多大帮助。也许你可以发布
dput(t)
?另外,我强烈建议不要使用
attac()
。谢谢@Gregor的输入。实际上我上传了这个文件[这里]()。这也在上面的问题中。干杯,再次感谢<代码>点(t(colMeans(coordinates(t))),col=“red”)
给出了一个近似的中心,这在nongkrong是正确的。它在这种情况下也适用于“规则”形状。不幸的是,在“L”形中,这种方法不能给我期望的结果,例如…:(因为我们没有你的CSV文件,发布
read.CSV()
没有多大帮助。也许你可以发布
dput(t)
?另外,我强烈建议不要使用
attac()
。感谢@Gregor的输入。实际上我上传了文件[这里]()。这也是上面的问题。干杯,再次感谢!
点(t(colMeans(coordinates(t)),col=“red”)
给出了一个近似的中心。这是真的@nongkrong。它适用于这种情况以及“常规”形状。不幸的是,这种方法在“L”形状中不会给我期望的结果,例如…:(这解决了@nongkrong!我在许多多边形中有一个循环,而这恰好是唯一一个有此问题的!非常感谢!干杯!@HelioCamargo很高兴听到它:)这解决了@nongkrong!我在许多多边形中有一个循环,而这恰好是唯一一个有此问题的!非常感谢!干杯!@HelioCamargo很高兴听到它:)
tmp <- rbind(coordinates(t), coordinates(t)[1,])
points(t(poly_center(tmp[,1], tmp[,2])), col="green", pch=16)