Iphone 如何在runkeeper应用程序中计算高程
我有一个跟踪用户移动的应用程序。我存储所有相关数据lat/lng/alt等Iphone 如何在runkeeper应用程序中计算高程,iphone,ios,objective-c,core-location,cllocationmanager,Iphone,Ios,Objective C,Core Location,Cllocationmanager,我有一个跟踪用户移动的应用程序。我存储所有相关数据lat/lng/alt等 我正在尝试添加高程,就像在没有图形的情况下一样,我只需要获得高程值。 在my.h文件中: @property (nonatomic) double netElevationLoss; @property (nonatomic) double netElevationGain; @property (nonatomic) double netElevationChange; 在my.m文件中: - (void)locat
我正在尝试添加高程,就像在没有图形的情况下一样,我只需要获得高程值。
在my.h文件中:
@property (nonatomic) double netElevationLoss;
@property (nonatomic) double netElevationGain;
@property (nonatomic) double netElevationChange;
在my.m文件中:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
double elevationChange = oldLocation.altitude - newLocation.altitude;
if (elevationChange < 0)
{
netElevationLoss += fabs(elevationChange);
}
else
{
netElevationGain += elevationChange;
}
netElevationChange = netElevationGain - netElevationLoss;
...
-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation
{
双高程变化=oldLocation.altitude-newLocation.altitude;
如果(高程变化<0)
{
净升降损失+=fabs(升降变化);
}
其他的
{
净提升增益+=提升变化;
}
netElevationChange=netElevationGain-netElevationLoss;
...
我不知道这种计算方法是否正确。我已经测试过了,例如,alt是182.53,
netElevationChange
是-182.53
也许这很好,但也许我遗漏了什么。你知道我做错了什么吗?根据你的帖子,“累积海拔增益”基本上是海拔增加的总和
例如,假设你徒步100英尺,然后100英尺下降,然后200英尺上升,然后250英尺下降(比如说,一个山谷),然后100英尺上升,你的收益将是100+200+150=450英尺。最后150英尺是由于在某个点徒步到-50英尺的海拔高度,然后再上升100英尺
这对你们来说意味着,你们只需要考虑海拔的正三角洲,就像这样:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
double elevationChange = oldLocation.altitude - newLocation.altitude;
// Only take into account positive changes
if (elevationChange > 0)
{
netElevationGain += elevationChange;
}
}
您甚至可以进一步简化它:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
netElevationGain += MAX(0, oldLocation.altitude - newLocation.altitude);
}
这将考虑到上升和下降过程中的山谷,甚至“起伏”(根据文章计算)
最后,
netElevationGain
属性将包含您的增益。有什么帮助吗……我提供的信息是否太少了?您是在尝试绘制每个点的高程图,还是希望获得每个点之间的变化?我不知道我只是在尝试获得与runkeeper应用程序相同的效果。实际上我不理解其中的区别在这两者之间。直到今天我还不知道海拔高度。如果你想同时存储lat/lng和海拔高度,为什么不直接从newLocation
获取并跳过这些计算?等等,你想说我不需要在didUpdateLocation中进行这些计算?我已经在数据库中存储了lat/lng/海拔高度。那么那个值是什么ue(海拔)以及如何让它显示它?很酷,我现在明白了:)只需要测试它。是的。海拔
是以米为单位测量的。这只是一个子问题。当我存储在数据库lat/lng/alt中时,我应该扩展我的表以获得一个更多的字段增益吗?当我需要向用户显示数据以选择最大值(增益)时?嗯,增益将存储训练期间的总体增益,因此我认为存储每个点的增益没有多大意义,特别是因为您应该能够从海拔点重新计算增益。但是您可以存储到该点的增益(作为缓存机制),由您决定。但是,根据您的需要,您可以存储每个点的当前增益(这意味着您可以知道该点的增益)。