知道两点经纬度算距离
2016-01-13 21:30
197 查看
#define PI 3.14159265358979323 //3.14159265353846
//当计算两点间距离时,经纬度差小于下面的门限值用地球半径,大于下面门限时用大圆算
#define TWO_P_DIS_LIMIT 0.1
double RadFactor = PI/180; //弧度与度的比例因子
double RevRadFactor = 180/PI; //度与弧度的比例因子
#define eR 6378245
double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height);
/*
参数:
BgnLongi:起始点经度
BgnLati :起始点纬度
EndLongi:终点经度
EndLati :终点纬度
Height :高程
返回值:两点间距离
*/
double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height)
{
double distance;
double a0,b0,C0;
double t2,t1 = 0,BiasE,BiasN;
BiasE = fabs(BgnLongi-EndLongi);
BiasN = fabs(BgnLati-EndLati);
//当经纬度都小于门限值时,采用两点间直线距离
if((BiasE<TWO_P_DIS_LIMIT)&&(BiasN<TWO_P_DIS_LIMIT))
{
t2=sqrt(BiasN*BiasN+BiasE*BiasE)*RadFactor;
distance=t2*(eR+Height);
}
else //当经纬度都大于门限值时,采用大圆距离
{
a0=(90-EndLati)*RadFactor;
b0=(90-BgnLati)*RadFactor;
C0=fabs(BgnLongi-EndLongi)*RadFactor;
t1 = cos(a0)*cos(b0)+sin(a0)*sin(b0)*cos(C0);
t2 = acos(t1);
distance=(eR+Height)*t2;
}
return distance;
}
//当计算两点间距离时,经纬度差小于下面的门限值用地球半径,大于下面门限时用大圆算
#define TWO_P_DIS_LIMIT 0.1
double RadFactor = PI/180; //弧度与度的比例因子
double RevRadFactor = 180/PI; //度与弧度的比例因子
#define eR 6378245
double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height);
/*
参数:
BgnLongi:起始点经度
BgnLati :起始点纬度
EndLongi:终点经度
EndLati :终点纬度
Height :高程
返回值:两点间距离
*/
double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height)
{
double distance;
double a0,b0,C0;
double t2,t1 = 0,BiasE,BiasN;
BiasE = fabs(BgnLongi-EndLongi);
BiasN = fabs(BgnLati-EndLati);
//当经纬度都小于门限值时,采用两点间直线距离
if((BiasE<TWO_P_DIS_LIMIT)&&(BiasN<TWO_P_DIS_LIMIT))
{
t2=sqrt(BiasN*BiasN+BiasE*BiasE)*RadFactor;
distance=t2*(eR+Height);
}
else //当经纬度都大于门限值时,采用大圆距离
{
a0=(90-EndLati)*RadFactor;
b0=(90-BgnLati)*RadFactor;
C0=fabs(BgnLongi-EndLongi)*RadFactor;
t1 = cos(a0)*cos(b0)+sin(a0)*sin(b0)*cos(C0);
t2 = acos(t1);
distance=(eR+Height)*t2;
}
return distance;
}
相关文章推荐
- android学习项目
- leetcode:Permutations
- IOS 多线程初探(一) - NSThread
- 读取 assets 图片文件 形成瀑布流查看
- [置顶]农林植保无人机
- HTML5小游戏贪吃蛇分析与实现
- SQL学习 调整数据的外观
- FPGA机器学习之学习的方向
- Excel-箱线图(数据分布)分析
- webserver报XFireFault: Unmarshalling Error: unexpected element (uri:"http://server.m/", loc
- DFS之 部分和问题
- Netty系列之Netty编解码框架分析
- java程序中的@Override是什么意思?
- 【转】C++中map容器的说明和使用技巧
- decimal system
- PHP学习之数组
- ListView 中设置setonitemclicklistener()监听时,无法获取item条目的点击事件焦点
- 关与 Visual.Assist.X.V10.7.1912的Crack破解补丁(vs 番茄插件的key破解方法)
- jquery页面滑到底部加载更多
- Spring MVC——DispatcherServlet简单介绍