我正在开发一个地理空间AR应用程序,并且刚刚在Objective-C/iOS(来自Apple的this example code提供了相当多的帮助)中解决了这个问题。
将从lat lon转换为ecef到ENU并返回的三个C函数如下所示。数学公式来自this维基百科的文章。
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0/M_PI))
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
#define WGS84_A (6378137.0) // WGS 84 semi-major axis constant in meters
#define WGS84_E (8.1819190842622e-2) // WGS 84 eccentricity
// Converts latitude, longitude to ECEF coordinate system
void latLonToEcef(double lat, double lon, double alt, double *x, double *y, double *z)
{
double clat = cos(DEGREES_TO_RADIANS(lat));
double slat = sin(DEGREES_TO_RADIANS(lat));
double clon = cos(DEGREES_TO_RADIANS(lon));
double slon = sin(DEGREES_TO_RADIANS(lon));
double N = WGS84_A/sqrt(1.0 - WGS84_E * WGS84_E * slat * slat);
*x = (N + alt) * c