Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用纬度和经度实现面积计算器_Ios_Objective C - Fatal编程技术网

Ios 如何使用纬度和经度实现面积计算器

Ios 如何使用纬度和经度实现面积计算器,ios,objective-c,Ios,Objective C,有谁能帮我,我如何实现面积计算器使用组的纬度和经度 例如,一个人在建筑物周围走动,我得到了行走时间的纬度和经度。我想计算一下那座大楼的建筑面积 好吧,我会尽力帮助你,但我不会给出完整的答案 我认为,第一步是在笛卡尔坐标系中转换lat和long。您应该计算所有点的中心。(一个简单的中位数) 第二步,将所有点转换为以其中心为中心的ENU坐标: 这一步,我做到了,给你: 常数: #define DEGREES_TO_RADIANS (M_PI/180.0) #define WGS84_A (637

有谁能帮我,我如何实现面积计算器使用组的纬度和经度


例如,一个人在建筑物周围走动,我得到了行走时间的纬度和经度。我想计算一下那座大楼的建筑面积

好吧,我会尽力帮助你,但我不会给出完整的答案

我认为,第一步是在笛卡尔坐标系中转换lat和long。您应该计算所有点的中心。(一个简单的中位数)

第二步,将所有点转换为以其中心为中心的ENU坐标:

这一步,我做到了,给你:

常数:

#define DEGREES_TO_RADIANS (M_PI/180.0)

#define WGS84_A (6378137.0)             // WGS 84 semi-major axis constant in meters
#define WGS84_E (8.1819190842622e-2)    // WGS 84 eccentricity
结构:

 //To change to ECEF
 typedef struct{
double x;
double y;
double z;

 } ECEFCoordinate;

typedef struct{
double east;
double north;
double up;

} ENUCoordinate;
方法(您需要通过ECEF进行检查):

#pragma标记大地测量实用程序定义

-(ECEFCoordinate) ecefFromLatitude:(double)lat longitude:(double)lon andAltitude:(double)alt
 {
double clat = cos(lat * DEGREES_TO_RADIANS);
double slat = sin(lat * DEGREES_TO_RADIANS);
double clon = cos(lon * DEGREES_TO_RADIANS);
double slon = sin(lon * DEGREES_TO_RADIANS);

double N = WGS84_A / sqrt(1.0 - WGS84_E * WGS84_E * slat * slat);

ECEFCoordinate ecef;
ecef.x = (N + alt) * clat * clon;
ecef.y = (N + alt) * clat * slon;
ecef.z = (N * (1.0 - WGS84_E * WGS84_E) + alt) * slat;

return ecef;
}
// Converts ECEF to ENU coordinates  centered at given lat , lon (with ECEFCenter)
 -(ENUCoordinate)enuFromECEFCenter:(ECEFCoordinate)ecefCenter withLat:(double)lat andLon:(double)lon fromEcef:(ECEFCoordinate)ecef
{
double clat = cos(lat * DEGREES_TO_RADIANS);
double slat = sin(lat * DEGREES_TO_RADIANS);
double clon = cos(lon * DEGREES_TO_RADIANS);
double slon = sin(lon * DEGREES_TO_RADIANS);
double dx = ecefCenter.x - ecef.x;
double dy = ecefCenter.y - ecef.y;
double dz = ecefCenter.z - ecef.z;

ENUCoordinate enu;
enu.east = -slon*dx  + clon*dy;
enu.north = -slat*clon*dx - slat*slon*dy + clat*dz;
enu.up = clat*clon*dx + clat*slon*dy + slat*dz;

return enu;
} 
最后一步:(我认为简单的方法是使用三角形,从中心到两个连续点),计算笛卡尔坐标系(东、北)中一组点的面积。与(x,y)相同

祝你好运

最后两个帮助计算面积,我想你可以通过互联网找到更多的帮助(也许是最好的方法)


不如自己尝试一下,然后询问出现的具体问题?!谢谢你给了我宝贵的建议非常感谢你为我花了宝贵的时间并给了重播,谢谢,我会按照你的输入,最后我得到了一堆ENU点(东,北,上),中心是协调的。然后我计算长度(L1,L2…Ln)和角度(alpha1,Alpha2,…alphan)。这是wirte,然后计算三角形的面积(A1,A2…An),最后的面积=A1+A2…An,这是对的