#include <math.h> #define KmPerDegree 111.12000071117 #define DegreesPerKm (1.0/KmPerDegree) #define PI M_PI #define TwoPI (M_PI+M_PI) #define HalfPI M_PI_2 #define RadiansPerDegree (PI/180.0) #define DegreesPerRadian (180.0/PI) #define copysign(x,y) (((y)<0.0)?-fabs(x):fabs(x)) #define NGT1(x) (fabs(x)>1.0?copysign(1.0,x):(x)) //#define ArcCos(x) (fabs(x)>1?quiet_nan():acos(x)) //Hack #define ArcCos(x) (acos(x)) #define hav(x) ((1.0-cos(x))*0.5) /* haversine */ #define ahav(x) (ArcCos(NGT1(1.0-((x)*2.0)))) /* arc haversine */ #define sec(x) (1.0/cos(x)) /* secant */ #define csc(x) (1.0/sin(x)) /* cosecant */
-(CLLocation*) moveLocation:(CLLocation*)startLocation:(double)movementInMeters:(double)movementBearing { double dist = (movementInMeters / 1000); /* -> great-circle distance (km) */ double course = movementBearing; /* -> initial great-circle course (degrees) */ double slt = startLocation.coordinate.latitude; /* -> starting decimal latitude (-S) */ double slg = startLocation.coordinate.longitude; /* -> starting decimal longitude(-W) */ double xlt = 0; /* <- ending decimal latitude (-S) */ double xlg = 0; /* <- ending decimal longitude(-W) */ double c, d, dLo, L1, L2, coL1, coL2, l; if (dist > KmPerDegree*180.0) { course -= 180.0; if (course < 0.0) course += 360.0; dist = KmPerDegree*360.0-dist; } if (course > 180.0) course -= 360.0; c = course*RadiansPerDegree; d = dist*DegreesPerKm*RadiansPerDegree; L1 = slt*RadiansPerDegree; slg *= RadiansPerDegree; coL1 = (90.0-slt)*RadiansPerDegree; coL2 = ahav(hav(c)/(sec(L1)*csc(d))+hav(d-coL1)); L2 = HalfPI-coL2; l = L2-L1; if ((dLo=(cos(L1)*cos(L2))) != 0.0) dLo = ahav((hav(d)-hav(l))/dLo); if (c < 0.0) dLo = -dLo; slg += dLo; if (slg < -PI) slg += TwoPI; else if (slg > PI) slg -= TwoPI; xlt = L2*DegreesPerRadian; xlg = slg*DegreesPerRadian; CLLocation *tempLocation = [[[CLLocation alloc] initWithLatitude:xlt longitude:xlg] autorelease]; return tempLocation; } movementbearing:是以垂直向上为零角度,顺时针递增。
相关推荐
本问题探讨了如何根据两点经纬度(A、B点)以及一个距离(H)来确定位于这两点直线上的第三个点(C点)的经纬度。 首先,我们有两个已知点A(α1,β1)和B(α2,β2),它们之间的距离D可以通过球面距离公式计算...
小工具, 根据一点的经纬度, 到另外一点的距离, 方位角, 计算另外一点的经纬度.
根据给定的信息,本文主要涉及的是如何通过编程方式实现基于已知一点的经纬度坐标来求解其他点的经纬度坐标。此问题涉及到地理信息系统的坐标转换原理和技术,特别是坐标系之间的转换。以下是对该问题及其解决方案的...
本文将详细介绍如何在Qt环境中,结合C和C++,计算已知两点经纬度的距离和方位。 首先,我们需要了解地理坐标系统的基本概念。在地球表面,我们使用经纬度来定位位置。经度是东西方向的度量,以本初子午线(通过英国...
Excel 已知两点经纬度求方位与距离,Excel 已知两点经纬度求方位与距离,Excel 已知两点经纬度求方位与距离,Excel 已知两点经纬度求方位与距离,Excel 已知两点经纬度求方位与距离
注释详细,需要详细解释可留言
当我们知道一个参考点的经纬度坐标,以及另一个点相对于这个参考点的方位和距离时,我们可以通过几何和三角函数来确定第二点的具体位置。下面将详细阐述这一过程。 首先,我们需要了解经纬度坐标系统。地球被假想为...
在实际应用中,我们可能会遇到如下需求场景:给定一个由多个线段组成的多段线,每个线段由一系列的经纬度坐标点定义。我们的目标是从这些线段上按照一定的距离间隔抽取一系列新的坐标点。然而,传统的基于三角函数的...
已知A,B点的经度、纬度、高度,计算A相对于B的北向方位及距离,或者计算B相对于A的北向方位及距离。如果有高度,利用距离和高度再算出俯仰角
标题中的“已知经纬度求距离的小软件”指的是一个能够根据地理位置的经纬度坐标计算两点之间距离的应用程序。在IT领域,这样的工具通常基于地理信息系统(GIS)的技术,结合数学公式来实现。以下是对这个知识点的...
在Java编程中,根据两点的经纬度来计算距离是一项常见的任务,特别是在地理信息系统(GIS)或者定位服务相关的应用中。这个任务通常涉及到地球表面的距离计算,因为经纬度是地球坐标系统的一部分。以下是一些相关的...
计算两点之间的距离,可以使用球面距离公式,也就是著名的“大圆距离”算法,基于地球是一个近似的球体。在MATLAB中,我们可以利用Haversine公式,它考虑了地球的曲率: \[ a = \sin^2\left(\frac{\Delta \phi}{2}\...
已知两点经纬度,自动计算距离。在表格分别输入两点的经度、纬度,即可计算出这两个点之间的距离长度。已知两点经纬度,自动计算距离。在表格分别输入两点的经度、纬度,即可计算出这两个点之间的距离长度。
文件为cpp文件,封装的函数。已知本地经度、纬度和目标的方位角、水平距离,计算目标准确的经度纬度的算法。实际大量测试准确可用。可用于地图落点,利用目标准确位置打击等等
1. **坐标系转换**:由于地球是一个曲面,我们需要将平面坐标(距离和方位角)转换为曲面坐标(经纬度)。这通常通过球面三角学中的大圆航线算法实现。大圆航线是最短路径,就像地球表面上两点之间的直线。 2. **...
在Java中,我们可以创建一个名为`GetDistance`的类,其中包含一个方法来计算两个经纬度之间的距离。这个方法可能如下所示: ```java public class GetDistance { private static final double EARTH_RADIUS = 6371...
本篇文章将深入探讨如何利用经纬度来计算地球上两点之间的距离,并介绍一个基于MATLAB的GUI工具,方便用户进行此类计算。 首先,让我们理解经纬度的基本概念。经度是指从本初子午线向东或向西测量的角度,0°经线...
通过两点经纬度坐标,得到两点的距离和角度。进行高斯转化。
在IT领域,尤其是在地理信息系统(GIS)和导航应用中,计算两点之间的距离是一个常见的任务。当我们知道两个地点的经纬度坐标时,可以利用地球的球面几何特性来估算这两个点之间的大圆距离。这里我们将详细探讨如何...
"ArcGIS已知经纬度绘制点图层和已知空间点计算经纬度的方法" 本文主要介绍了使用ArcGIS软件绘制已知经纬度的点图层和已知空间点计算经纬度的方法。通过实例演示,详细介绍了Display XY Data和Calculate Geometry...