2009-09-19 86 views
8

我试图获取用户当前的经纬度与此viewDidLoad方法。由此产生的地图正确指出了当前的位置,但NSLog一贯显示:iPhone当前用户位置坐标显示为(0,0)

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); 
} 

回答

9

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

解决这个问题,如果你必须在启动时的位置,最好的办法,是落实经典的核心位置处理程序代码,并开始从那个位置。您可以停止接收从那里更新一次地图启动并从那里得到进一步的修改(但如果你需要不断地更新你最好只是用标准核心位置的更新是一致的。如果你想想看,当你有“显示用户位置“在地图中启用进一步使用核心位置由您的应用程序本质上是免费的,因为无论如何,GPS将被激活全部时间

2

从上CLLocation文档,如果水平精度或垂直精度是否定的,这意味着它不能找到的值。我怀疑这是发生在这里的事情。请记住,如果你只看一次,它可能会给你一个近似的最后一个已知的位置,然后再提高准确性结果。

平面精度 坐标的纬度和经度 识别 圆的中心,该值指示该圆的半径 。负 值表示坐标的 纬度和经度无效。

+0

,那么什么是获取当前位置的坐标的方式之后执行seletor? – ennuikiller 2009-09-19 22:12:32

+0

如果您只想查找当前位置,则完全不需要使用Maps API。您可以直接查询核心位置。 http://developer.apple.com/mac/library/documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html – AlBlue 2009-09-20 09:34:44

1

您应该从CoreLocation而不是MapKit坐标MapView将显示用户的位置在确定位置之前,经纬度都设置为0. 3

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

4

如果你试图让用户坐标在viewDidLoad中()方法,它总会给0,0的结果,因为它尚未初始化。

你应该看看“我在哪里”的示例代码形式苹果网站。它解释你需要什么。 您需要使用CLLocationManager类。您还需要方法

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

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

希望它有帮助。

-1

添加到您的viewDidLoad部分

mapView.showsUserLocation = YES; 
+1

这是无关紧要的。 – Hammer 2014-10-30 06:20:27

1

正如Kendall说,该的MKMapView没有用户位置,直到完成加载,并且viewDidLoad方法通常要求它太早。比使用CoreLocation更简单的方法是实现MKMapViewDelegate方法 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation。它会在你找到用户的位置时立即给你,而不必处理CLLocationManager。

+0

这一个看起来像最简单和测试好。 – Hammer 2014-10-30 06:46:27

0

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

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

ViewdidAppear试试这个:或致电延迟

相关问题