Objective C / iPhone比较2 CLLocations /GPS坐标

Posted

技术标签:

【中文标题】Objective C / iPhone比较2 CLLocations /GPS坐标【英文标题】:Objective C / iPhone comparing 2 CLLocations /GPS coordinates 【发布时间】:2010-03-19 19:32:51 【问题描述】:

有一个应用程序可以成功找到您的 GPS 位置,但我需要能够将该 GPS 与 GPS 位置列表进行比较,如果两者相同,那么您将获得奖励。

我以为我已经成功了,但似乎没有。

我将“newLocation”作为您所在的位置,我认为问题是我需要能够分离 newLocation 的经纬度数据。

到目前为止我试过这个:

NSString *latitudeVar = [[NSString alloc] initWithFormat:@"%g°", newLocation.coordinate.latitude];

NSString *longitudeVar = [[NSString alloc] initWithFormat:@"%g°", newLocation.coordinate.longitude];

GPS 位置列表示例:

location:(CLLocation*)newLocation;

CLLocationCoordinate2D bonusOne;    

bonusOne.latitude = 37.331689;
bonusOne.longitude = -122.030731;

然后

if (latitudeVar == bonusOne.latitude && longitudeVar == bonusOne.longitude) 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"infinite loop firday" message:@"infloop" delegate:nil cancelButtonTitle:@"Stinky" otherButtonTitles:nil ];    

    [alert show];
    [alert release];

这会出现错误“二进制的无效操作数 == 具有 strut NSstring 和 CLlocationDegrees”

有什么想法吗?

【问题讨论】:

【参考方案1】:

通常您应该小心直接比较浮点数。由于它们的定义方式,当您初始化它们时,内部值可能不完全,这意味着它们很少会相同。相反,您应该检查它们之间的差异是否低于某个阈值,例如

if(fabs(latitude1 - latitude2) <= 0.000001)
...

另一种选择是通过计算距离来检查人员与所需位置的距离。这也可能考虑到 GPS 的坐标并不完全正确,即使在良好条件下也可能相差 10 米:

CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:lon1];
double distance = [loc1 getDistanceFrom:position2];
if(distance <= 10)
...

克劳斯

【讨论】:

使用这个:CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:bonusOne.latitude longitude:bonusOne.longitude];双距离 = [loc1 getDistanceFrom:newLocation]; if(distance 您查看过每个坐标的值吗?听起来它们可能与您想象的不同。 原来是我自己的错误。我不小心复制了一个 long 和 lat。谢谢,现在可以正常使用了!【参考方案2】:

为什么不直接比较 bonusOne.latitude 和 newLocation.coordinate.latitude?您正在将浮点数转换为字符串,然后将其与浮点数进行比较,这就是您收到该错误的原因。

另外,鉴于 gps 装置往往会跳动一点,您可能想要要么

a:测量 bonusOne 和 newLocation.coordinate 之间的距离(使用勾股定理来计算三角形的斜边,对我们来说,没有理由比在这个小尺度上更准确。如果你觉得挑剔,请使用地图套件测距功能)并指定其小于一定数量。

b:将纬度和经度四舍五入到一定数量的数字,这样在 100 英尺之内就可以了。

其中任何一个都比依赖两个浮点数相等对您来说效果更好,这在软件中通常是有问题的,特别是当您测量的设备具有高噪音水平时会出现问题。

【讨论】:

以上是关于Objective C / iPhone比较2 CLLocations /GPS坐标的主要内容,如果未能解决你的问题,请参考以下文章

Objective C 和点对点通信

iPhone/Objective C:无法删除文件

iphone / Objective c的最佳代码片段网站是啥[重复]

如何从 json-rpc webservice 获取数据:iPad /iPhone / Objective C

Objective C 将 int 转换为 NSString (iPhone)

如何使用objective C在iphone模拟器中显示图像