大圆计算的差异

时间:2016-08-23 09:38:22

标签: r

使用geosphere包中的周边功能时遇到了一些问题。

从第一原理开始,1弧度等于1纳米 所以90度的弧= 90 * 60 = 5400nm

当我在赤道上使用distGeo和两个点时,我得到一个对应于这个数字的答案。

library(geosphere)
distGeo(c(0,0),c(0,90), a=6378137, f=1/298.257223563)/1852
#[1] 5400.629

如果我尝试用周长进行相同的计算,我会得到两倍的距离!

#Two points on equator
xy <- rbind(c(0,0), c(90,0))     
xy
#     [,1] [,2]
#[1,]    0    0
#[2,]   90    0
perimeter(xy)/1852
#[1] 10819.39
perimeter(xy, a=6378137, f=1/298.257223563)/1852
#[1] 10819.39

如果我们这次沿着本初子午线在赤道和北极之间采取另一个观点,结果是......

distGeo(c(0,0),c(90,0), a=6378137, f=1/298.257223563)/1852
#[1] 5409.694

这显示了椭圆体的效果。

当我使用这些新点的边界时,我仍然遇到与以前相同的问题!

#From the equator to the north Pole along the Prime meridian
xy <- rbind(c(0,0), c(0,90)) 
xy
#     [,1] [,2]
#[1,]    0    0
#[2,]    0   90
perimeter(xy)/1852
#[1] 10801.26
perimeter(xy, a=6378137, f=1/298.257223563)/1852
#[1] 10801.26

那么我做错了什么?

史蒂夫

2 个答案:

答案 0 :(得分:1)

你没有做错任何事。函数## your results xy <- rbind(c(0,0), c(90,0)) perimeter(xy) ##[1] 20037508 ## "closing the polygon" with c(0,0) gives same answer xy <- rbind(c(0,0), c(90,0), c(0,0)) perimeter(xy) ##[1] 20037508 ## adding one meter (0.00001 deg latitude) north as another point, ## perimeter will close the resulting triangle, result increases by one meter! xy <- rbind(c(0,0), c(90,0), c(90, 0.00001)) perimeter(xy) ##[1] 20037509 ## closing the triangle yourself, same answer xy <- rbind(c(0,0), c(90,0), c(90,0.00001), c(0,0)) perimeter(xy) ##[1] 20037509 计算闭合多边形周围的周长距离,如果终点不是第一个,它将关闭该多边形,因此它将您的两个点解释为没有&#34; height&#的多边形34。

为了说明(以米为单位显示小幅增加):

class ThisSiteController extends Controller{

  public function updateSite(Request $request){
    $thissite = DB::table('this_site')->where('id',1)->update(['headline' => $request->get('headline')]);

    return view('admin.editfront',['site' => $thissite]);
  }

  public function editSite(){
    $thissite = DB::table('this_site')->where('id',1)->first();
    return view('admin.editfront',['site' => $thissite]);
  }
}

答案 1 :(得分:0)

感谢您的指导。

我最终做的是落后于纬线和长场

xy[,3] = lag(xy[,1],k=-1)
xy[,4] = lag(xy[,2],k=-1)

然后使用distGEO计算细分

xy$dDist<-distGeo(as.vector(xy[,1:2]), 
    as.vector(xy[,3:4]),
    a=6378137,
    f=1/298.257223563)/1852

然后取总和

sum(xy$dDist,na.rm = TRUE)

似乎工作!