首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

高德地圖 iOS 逆地理編碼無資料:經緯度獲取失敗排查

     編輯:程式設計綜合問答

現象

呼叫 AMapReGeocodeSearchRequest 後,回調 onReGeocodeSearchDone 返回的 response.regeocode.addressComponent 全為空值 (province、city 等皆為空字串)。

根本原因

未成功獲取當前裝置的經緯度。程式碼中 regeoReq.location 依賴外部傳入的 latitude/longitude,若定位尚未完成或失敗,傳入 (0,0) 或無效座標,高德服務自然無法解析地址。

解決流程

  1. 確認定位權限:Info.plist 需 NSLocationWhenInUseUsageDescription / NSLocationAlwaysUsageDescription。
  2. 啟動定位管理器:
    CLLocationManager *locMgr = [[CLLocationManager alloc] init];
    locMgr.delegate = self;
    locMgr.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    [locMgr requestWhenInUseAuthorization];
    [locMgr startUpdatingLocation];
    
  3. 在委派取得座標後再發起逆地理編碼:
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
        CLLocation *loc = locations.lastObject;
        if (loc.horizontalAccuracy < 0) return; // 無效
        [self beginGeoCodeWithLatitude:loc.coordinate.latitude longitude:loc.coordinate.longitude];
        [manager stopUpdatingLocation]; // 單次定位即停止
    }
    
  4. 處理錯誤回調:實作 didFailWithError 記錄定位失敗原因 (權限拒絕、GPS 不可用等)。

驗證技巧

在逆地理編碼請求前,先 NSLog(@"lat=%f, lon=%f", lat, lon); 確認座標合理 (非 0,0),再呼叫高德 API。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved