计算累计海拔增益给我更奇怪的结果

我有使用CoreLocation和跟踪用户移动的应用程序。
当用户正在行走或驾驶时,我将每个坐标保存到本地数据库(lat / lng / alt),以便根据保存的坐标绘制路线。
前几天我已经添加累积海拔增益 ,我用这个代码

 didLocationUpdate: - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { netElevationGain += MAX(0, oldLocation.altitude - newLocation.altitude); } 

但是有些事情是错的。
我开始申请,开始步行,走了几英里,我得到了networkingnetElevationGain差不多500米。 没有办法,这是正确的。
这是每个点保存在数据库中的netElevation列表:

 0,41,43,44,47,52,55,62,73,80,91,100,114,140,146,153,159,180,199,208,228,240,259,275,320,329,349,359,366,375,381,392,408,419,428,437,446,449,462,469,478,486 

海拔高度
0.000000,181.678055,181.891495,182.786850,179.315399,177.035721,182.636307,181.259399,178.653015,192.552551,185.398819,182.693436,181.369766,154.306747,157.031693,159.748871,185.080856,198.080673,176.473877,178.646851,175.784424,178.184128,181.237488,188.956894,177.713181,193.673019,188.470184,182.749054,181.966507,181.547592,191.638657,198.713989,188.582977,197.977921,203.184540,205.108856,198.304123

要显示增益,我使用简单的select max(gain) from table where ...

UPDATE

现在我得到更差的价值(按降序):
Alt键:

 200.334869,200.594666,196.293945,195.240234,191.800446,192.622375,179.951385,179.185577,179.681122,177.843719,183.459595,174.170502,0.000000 

获得:

 307,301,294,285,275,269,252,246,234,227,217,202,0 

我把你列出的值和运行他们,如下所示:

 NSArray *altitudes = @[ @(0.000000), @(181.678055), @(181.891495), @(182.786850), @(179.315399), @(177.035721), @(182.636307), @(181.259399), @(178.653015), @(192.552551), @(185.398819), @(182.693436), @(181.369766), @(154.306747), @(157.031693), @(159.748871), @(185.080856), @(198.080673), @(176.473877), @(178.646851), @(175.784424), @(178.184128), @(181.237488), @(188.956894), @(177.713181), @(193.673019), @(188.470184), @(182.749054), @(181.966507), @(181.547592), @(191.638657), @(198.713989), @(188.582977), @(197.977921), @(203.184540), @(205.108856), @(198.304123) ]; float netAlt = 0.0f; // Start with the third value as we're only interesting in net gain for (NSInteger i = 2; i < altitudes.count; i++) { float oldAlt = [altitudes[i-1] floatValue]; float newAlt = [altitudes[i] floatValue]; // newAlt - oldAlt because we're interested in the // difference between current and previous float diff = newAlt - oldAlt; netAlt += MAX(0, diff); printf("%.0f,", netAlt); } 

这产生了以下输出:

0,1,1,1,7,7,7,21,21,21,21,21,23,26,51,64,64,67,67,69,72,80,80,96,96, 96,96,96,106,113,113,122,127,129,129

这对我来说似乎是合理和现实的。 一点也不清楚你如何设法得到你所拥有的价值。 他们没有任何意义。