1

我正在使用 CLLocation 机制来获取 iPhone 中的坐标。我从“定位我”示例中举了一个例子,并对其进行了一点扩展。但是我正在发布准确性问题。

  • 如果我将所需的精度设置为 10 米或更小,我会得到精度为 1414 米的响应。
  • 如果我将所需的精度设置为 100 或更高 - 在大多数情况下,我得到的最佳精度是 65 米。有时多有时少。
  • 如果我关闭 WiFi 和 3g,我的准确度约为 47 米。

那么问题来了,有没有办法让 iPhone 使用 GPS 而不是三角天线来获取位置?

很高兴知道在使用天线时是否有提高精度的方法,但到目前为止我得到的最好结果是 65 米。

4

2 回答 2

5

您实际上不应该尝试控制哪些硬件正在为您获取位置。如果您想要更高的准确度,您可以检查由 提供给您的准确度,CLLocation如果它不是您想要的,则将其丢弃。

或者,您可以读取一堆读数并使用我编写的这段代码对它们进行平均!您将一组CLLocation对象传递给它,它会返回一个平均位置。我在我的一个应用程序中使用它,它提供了很高的准确性(如果您使用 >5 个位置,通常在一米内)。

- (CLLocation *) averageLocations: (NSArray *) loci
{
    double tempLat=0,tempLong=0,tempAlt=0,tempAccH=0,tempAccV=0,tempCourse=0,tempSpeed=0,tempTime=0;
    for (CLLocation *loc in loci)
    {
        tempLat += loc.coordinate.latitude;
        tempLong += loc.coordinate.longitude;
        tempAlt += loc.altitude;
        tempAccH += loc.horizontalAccuracy;
        tempAccV += loc.verticalAccuracy;
        tempCourse += loc.course;
        tempSpeed += loc.speed;
        tempTime += loc.timestamp.timeIntervalSinceReferenceDate;
    }

    double ratio = (double) loci.count;
    CLLocationCoordinate2D tempCoord = CLLocationCoordinate2DMake(tempLat/ratio, tempLong/ratio);
    NSDate *tempDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:tempTime/ratio];

    CLLocation *temp = [[CLLocation alloc] initWithCoordinate:tempCoord 
                                  altitude:tempAlt/ratio 
                        horizontalAccuracy:tempAccH/ratio 
                          verticalAccuracy:tempAccV/ratio 
                                    course:tempCourse/ratio
                                     speed:tempSpeed/ratio
                                 timestamp:tempDate];

    return temp;
}
于 2012-08-15T15:39:11.100 回答
0

核心位置不会为您提供数据源的位置数据。保证位置的最佳方法是查找您收到的 CLLocation 对象的日期,并检查位置的水平和垂直精度。我在核心位置方面进行了广泛的工作,我可以告诉您,如果您需要准确的位置数据,时间是不准确信息的一个很好的指标。如果我需要准确的数据,我会忽略超过 5 秒的数据。

于 2012-08-15T15:42:37.723 回答