Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.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
Iphone 如何在runkeeper应用程序中计算高程_Iphone_Ios_Objective C_Core Location_Cllocationmanager - Fatal编程技术网

Iphone 如何在runkeeper应用程序中计算高程

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

我有一个跟踪用户移动的应用程序。我存储所有相关数据lat/lng/alt等
我正在尝试添加高程,就像在没有图形的情况下一样,我只需要获得高程值。
在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;
...
我不知道这种计算方法是否正确。
我已经测试过了,例如,alt182.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中时,我应该扩展我的表以获得一个更多的字段增益吗?当我需要向用户显示数据以选择最大值(增益)时?嗯,增益将存储训练期间的总体增益,因此我认为存储每个点的增益没有多大意义,特别是因为您应该能够从海拔点重新计算增益。但是您可以存储到该点的增益(作为缓存机制),由您决定。但是,根据您的需要,您可以存储每个点的当前增益(这意味着您可以知道该点的增益)。