ios - Calculating Cumulative elevation gain give me wierd results -


i have app use corelocation , track user movement.
when user walking or driving save each coordinate local database (lat/lng/alt) can draw route based on saved coordinates.
few days ago have added cumulative elevation gain , use code in

didlocationupdate: - (void)locationmanager:(cllocationmanager *)manager didupdatetolocation:(cllocation *)newlocation fromlocation:(cllocation *)oldlocation {     netelevationgain += max(0, oldlocation.altitude - newlocation.altitude); } 

but wrong.
started application , start walking , walking around few miles , netelevationgain 500 meters. no way it's correct.
list of netelevation saved in database each point:

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 

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

display gain use simple select max(gain) table ...



update

now worse values (in descending order):
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 

gain:

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

i took values you've listed , ran them follows:

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 third value we're interesting in net gain (nsinteger = 2; < altitudes.count; i++) {     float oldalt = [altitudes[i-1] floatvalue];     float newalt = [altitudes[i] floatvalue];      // newalt - oldalt because we're interested in      // difference between current , previous     float diff = newalt - oldalt;      netalt += max(0, diff);     printf("%.0f,", netalt); } 

this produced following output:

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

this seems reasonable , realistic me. it's not @ clear how how managed values have. make no sense.


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -