【问题标题】:iPhone current user location coordinates showing as (0,0)iPhone 当前用户位置坐标显示为 (0,0)
【发布时间】:2009-09-19 20:50:18
【问题描述】:

我正在尝试使用此 viewDidLoad 方法获取用户当前的纬度和经度。生成的地图正确地指示了当前位置,但是 NSLog 始终显示:

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000

有人知道我在这里缺少什么吗?提前感谢您的帮助!

- (void)viewDidLoad {
    [super viewDidLoad];
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    [mapView setShowsUserLocation:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    NSLog(@"user latitude = %f",userCoordinate.latitude);
    NSLog(@"user longitude = %f",userCoordinate.longitude);
}

【问题讨论】:

    标签: iphone mapkit coordinates


    【解决方案1】:

    据我所知,地图在实际显示之前不会尝试获取用户位置。一个很好的测试是,什么时候会出现询问应用程序是否可以获取用户位置的对话框?根据我的经验,只有在地图显示在屏幕上之后才会出现。

    如果您在启动时必须有一个位置,则解决此问题的最佳方法是实现经典的核心位置处理程序代码并最初从中获取位置。地图启动后,您可以停止从那里接收更新并从那里获得进一步的更改(尽管如果您需要不断更新,最好保持标准的核心位置更新。如果您考虑一下,当您有“显示用户在地图中启用“位置”,您的应用进一步使用核心位置基本上是免费的,因为无论如何 GPS 都会一直启动。

    【讨论】:

      【解决方案2】:

      如果你尝试在 viewDidLoad() 方法中获取用户坐标,它总是会给出 0,0 结果,因为它还没有被初始化。

      您应该查看来自 Apple 网站的“我在哪里”示例代码。它解释了你需要什么。 您需要使用CLLocationManager 类。您还需要该方法

      *-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation*
      

      每次更新用户位置时都会自动调用此方法。如果你使用的是模拟器,那么这个方法只会被调用一次,它会返回一些默认坐标。

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        CLLocation上的文档来看,如果水平精度或垂直精度为负数,则表示找不到值。我怀疑这就是这里发生的事情。请记住,如果您只看一次,它可能会在提高准确性结果之前为您提供一个近似的最后已知位置。

        水平精度 坐标的纬度和 经度标识中心 圈,这个值表示 该圆的半径。一个负面的 值表示坐标的 经纬度无效。

        【讨论】:

        【解决方案4】:

        您应该从 CoreLocation 而不是 MapKit 获取坐标。 MapView 将在实际获得当前位置后显示用户的位置。在确定位置之前,将经纬度都设置为0。3

        您应该创建一个 CLLocationManager 实例,设置委托。确定位置后会通知您。

        【讨论】:

          【解决方案5】:

          正如Kendall 所说,MKMapView 在完成加载之前没有用户位置,并且 viewDidLoad 方法通常为时过早请求它。比使用 CoreLocation 更简单的方法是实现 MKMapViewDelegate 方法 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation。它会在定位后立即为您提供用户的位置,而无需处理 CLLocationManager。

          【讨论】:

          • 这个看起来是最简单的,经过测试还可以。
          【解决方案6】:

          此答案解释了如何使用用户位置设置地图视图:

          HowTo initialise MKMapView with a given user location?

          【讨论】:

            【解决方案7】:

            试试这个

            CLLocation *userLoc = mapView.userLocation.location;
            CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
            
            NSLog(@"user latitude = %f",userCoordinate.latitude);
            NSLog(@"user longitude = %f",userCoordinate.longitude);
            

            ViewdidAppear: 或延迟后调用执行选择器

            【讨论】:

              【解决方案8】:

              将此添加到您的 viewDidLoad 部分

              mapView.showsUserLocation = YES;
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-01-18
                • 1970-01-01
                • 1970-01-01
                • 2015-03-05
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多