使用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
那么我做错了什么?
史蒂夫
答案 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)
似乎工作!