2012-05-02 70 views
0

所以我非常非常非常新的编程,但我摸索着通过这么远:我创建一个Iphone应用程序,我的目标是创建一个自动跑表;这些东西在预先设定的位置自动启动,并停止在预先设定的位置(两者均由用户设定)。如果预设的GPS位置和实际的GPS位置相等,则计时器将开始/停止。我通过按下按钮将位置设置为变量来完成此操作。从相同的代码给出两个不同的GPS位置

这是问题:两个值永远不会相等。预设的开始位置和结束位置包含比“实际”位置更多的小数(值本身,而不仅仅是打印的值),如果它们永远不相等,定时器将不会启动。

任何帮助表示赞赏!

回答

3

您可以简单地计算两个坐标之间的距离,并在距离低于某个阈值(例如50米)到开始或结束位置时开始/停止计时器。

CLLocation提供了一种方法,无限便捷这样做:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 

例如:

double lat = 51.7; 
double lng = 7.0; 
CLLocation *locationStart = [[CLLocation alloc] initWithLatitude:lat longitude:lng]; 
CLLocation *currentLocation = ...; // received from location services 

if ([locationStart distanceFromLocation:currentLocation] < 50) { 
    // start timer 
} 

您也可以考虑使用当前位置,而不是任意50米的horizontalAccuracy财产。但是,请注意,准确度可能会达到几公里。像MIN(horizontalAccuracy, 50)可能会工作得很好。

+0

:哪些数据类型可用于CLLocation?我试着将它设置为等于一个整数,一个浮点数和一个双精度值,它一直拒绝这个变量并且说它是错误的格式。 – user1370133

+0

CLLocation是一个对象类。要创建一个实例,您需要将经纬度理想地称为双精度(或CLLocationDegrees,它是双精度)。然后你可以用[[CLLocation alloc] initWithLatitude:lat longitude:lng]创建它' – FelixLam

+0

我已经更新了代码示例。 – FelixLam

相关问题