函数返回0x0表

时间:2015-07-01 22:07:30

标签: r for-loop google-earth

我有一个计算纬度和经度点的功能,以便在中心位置周围创建一个“环”。问题是结果打印到屏幕但不存储在任何地方。我的函数创建一个0列和0行的数据帧。我希望能够采用这些坐标并在其他地方使用它们。我希望能够嵌套这个函数,但是当它没有返回任何东西时我无法真正嵌套它。

我的最终目标是创建kml代码。我已经有了kml代码,但需要重复多次。 kml代码创建半径环,用颜色填充它们,并为该地方添加名称。我想通过使用lat / lon中的位置列表自动生成文件。

我的问题是,如何让这个函数返回我想要的坐标列表,以便我可以相应地将它们粘贴到kml代码中?我可以使用adply进行循环并获得3个坐标的打印结果,但不会创建任何内容。

我对编码也很陌生,请保持温和。提前谢谢。

{{1}}

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

make.ring.file=function(dist,df)
{

    R = 6378.14 #Radius of the Earth
    d = dist*1.609344 #Distance of ring radius in km
    lat1 = df$lat*(pi/180) #Current lat point converted to radians
    lon1 = df$lon*(pi/180) #Current lon point converted to radians
    num3=0
    index=seq(from=0,to=360,by=120)
    bear=NULL
    lat=NULL
    lon=NULL
    z=NULL
    coordlist=NULL
    for(n in 1:length(index))
    {
        bear[n]=index[n]*(pi/180)
        lat[n]=(asin(sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(bear[n])))*(180/pi)
        lon[n]=(lon1 + atan2(sin(bear[n])*sin(d/R)*cos(lat1),
                             cos(d/R)-sin(lat1)*sin(lat[n]*(pi/180))))*(180/pi)
        z[n]=0
        coordlist[n]=paste(lon[n],lat[n],z[n],sep=",")  
    }  
    return(data.frame(out=paste(coordlist,collapse=" ")))

}

关键的补充是:

return(data.frame(out=paste(coordlist,collapse=" ")))

函数cat打印到控制台,因此您无法将其分配给任何内容 - 您只是创建一个空数据框和打印。

粘贴命令的工作原理是将coordlist的4行粘贴在一起,使用"的分隔符。 &#34 ;.您可以根据下游代码的需要对其进行修改。