簡體   English   中英

iPhone當前用戶位置坐標顯示為(0,0)

[英]iPhone current user location coordinates showing as (0,0)

我正在嘗試使用此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);
}

據我所知,在實際顯示之前,地圖不會嘗試獲取用戶位置。 對此的一個很好的測試是,你什么時候得到對話框,詢問你是否可以讓應用程序獲得用戶位置? 根據我的經驗,只有在地圖顯示在屏幕上之后才會出現。

如果您必須在啟動時有一個位置,解決此問題的最佳方法是實現經典的核心位置處理程序代碼並從最初獲取位置。 一旦地圖啟動就可以停止從那里接收更新並從那里獲得進一步的更改(盡管如果您需要不斷更新,最好只保留標准的核心位置更新。如果您考慮它,當您有“顯示用戶”時位置“在地圖中啟用您的應用程序進一步使用核心位置基本上是免費的,因為無論如何GPS將被啟動。

如果您嘗試在viewDidLoad()方法中獲取用戶坐標,它將始終給出0,0結果,因為它尚未初始化。

您應該查看Apple網站上的“我在哪里”示例代碼。 它解釋了你需要什么。 您需要使用CLLocationManager類。 您還需要該方法

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

每次更新用戶位置時,都會自動調用此方法。 如果您使用的是模擬器,那么此方法只會被調用一次,它將返回一些默認坐標。

希望能幫助到你。

CLLocation上的文檔中,如果水平精度或垂直精度為負,則表示無法找到值。 我懷疑這就是這里發生的事情。 請記住,如果您只看一次,它可能會在提高准確度結果之前為您提供近似的最后已知位置。

水平精度坐標的緯度和經度標識圓的中心,該值表示該圓的半徑。 負值表示坐標的緯度和經度無效。

正如Kendall所說,MKMapView在完成加載之前沒有用戶位置,並且viewDidLoad方法通常為時太早而無法請求。 比使用CoreLocation更簡單的方法是實現MKMapViewDelegate方法-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 它將立即為您提供用戶的位置,而無需處理CLLocationManager。

您應該從CoreLocation而不是MapKit獲取坐標。 MapView將在實際獲得當前位置后顯示用戶的位置。 在確定位置之前,緯度和經度都設置為0

您應該創建一個CLLocationManager實例,設置委托。 確定位置后,您將收到通知。

試試吧

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

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

ViewdidAppear:或者在延遲后調用執行seletor

此答案解釋了如何使用用戶位置設置地圖視圖:

如何使用給定的用戶位置初始化MKMapView?

將其添加到viewDidLoad部分

mapView.showsUserLocation = YES;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM