如何使用纬度和纵向来实现面积计算器

时间:2015-07-28 10:03:23

标签: ios objective-c

任何人都可以帮助我,如何使用纬度和经度组来实现区域计算器。

例如一个人在建筑物周围走动,我在走路时间得到纬度和经度。我想计算建筑物的建筑面积。

1 个答案:

答案 0 :(得分:2)

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

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

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

这一步,我做了,你在这里:

常数:

#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 mark Geodetic utilities definition

-(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)相同。

祝你好运。

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

enter image description here