如何从 iPhone 中的 GPS 而不是三角测量天线获取坐标

Mis*_*sha 1 iphone gps objective-c cllocationmanager

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

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

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

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

Dus*_*tin 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;
}
Run Code Online (Sandbox Code Playgroud)