【iOS】BMKGeoCodeSearch 反向地理编码检索失败和 BMK_SEARCH_NETWOKR_ERROR 报网络连接错误的解决方案

首语

最近项目中有这样一个需求,在百度地图SDK 集成中,需要根据获取的定位(经纬度参数)去得到相应地理位置的相关信息,主要是地理位置名称信息。

而这样的话就需要用到反向地理编码检索(BMKGeoCodeSearch)的相关知识了,然而根据官方文档提示添加相应的代码时,却一直出现“反geo检索发送失败”的情况。

百度地图SDK-地址编码

声明:此处为引用百度地图SDK-地址编码相关知识。

地址编码概念

地理编码指的是将地址信息建立空间坐标关系的过程。又可分为正向地理编码和反向地理编码。
- 正向地理编码指的是由地址信息转换为坐标点的过程。该功能适用于根据用户输入的地址确认用户具体位置的场景,常用于配送人员根据用户输入的具体地址找地点。
- 反向地理编码服务实现了将地址坐标转换为标准地址的过程。反向地理编码提供了坐标定位引擎,帮助用户通过地面某个地物的坐标值来反向查询得到该地物所在的行政区划、所处街道、以及最匹配的标准地址信息。通过丰富的标准地址库中的数据,可帮助用户在进行移动端查询、商业分析、规划分析等领域创造无限价值。

反向地理编码检索相关代码

#pragma mark --------------------
#pragma mark --------------------  逆地理编码(坐标转地理位置)  --------------------

- (BMKGeoCodeSearch *)geoCodeSearch {
    if (!_geoCodeSearch) {
        _geoCodeSearch = [[BMKGeoCodeSearch alloc] init];
        _geoCodeSearch.delegate = self;
        // 发起反向地理编码检索
        BMKReverseGeoCodeOption *reverseGeoCodeSearchOption = [[BMKReverseGeoCodeOption alloc] init];
        reverseGeoCodeSearchOption.reverseGeoPoint = self.myCoordinate;
        BOOL flag = [_geoCodeSearch reverseGeoCode:reverseGeoCodeSearchOption];
        if (flag) {
            NSLog(@"------- 反geo检索发送成功");
        } else {
            NSLog(@"------- 反geo检索发送失败");
        }
    }
    return _geoCodeSearch;
}

- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error {

    NSLog(@"BMKError-------- %d", error);
    if (error == BMK_SEARCH_NO_ERROR) {
        if (result.poiList.count > 0) {
            self.locationTitle = [result.poiList[0] city];
        } else {
            self.locationTitle = result.addressDetail.city;
        }
        [self uploadlocationData];
    } else {
        NSLog(@"抱歉,未找到结果");
    }
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.mapView viewWillDisappear];

    // 此处记得不用的时候需要置nil,否则影响内存的释放
    self.geoCodeSearch.delegate = nil;
}

问题及解决办法

报错问题:

问题 1

当集成完代码后运行,一直得到的是------- 反geo检索发送失败的打印结果。

问题 2

问题1解决完之后,又提示BMK_SEARCH_NETWOKR_ERROR的网络连接错误。

解决方案:

问题 1 解决方案

① 检查在百度地图开发者中心申请的 AppKey 和 Xcode 中自己的 Bundle Identifier 是否保持一致,两者必须保证一致才能使百度地图SDK的 API 正常调用。

② 检查 General -> Identity -> Display Name 是否赋值,且与 Info.plist 文件中的 Bundle name 是否一致。<br>
备注:该问题的第二个步骤,暂时原因不明,但是博主确实是通过第二个步骤解决一直反检索失败的问题的。如果有哪位大神知道原因的,请指点一二。


问题 2 解决方案

如果检测当前网络可正常访问网络的情况下,请再次检查是否有开启外网相关的配置服务,这种情况下会影响百度SDK的正常数据情况。当时博主就是因为在开启了外网引起的BMK_SEARCH_NETWOKR_ERROR报错的。

参考链接

© 著作权归作者所有
这个作品真棒,我要支持一下!
该专栏主要用于记录日常开发中报错问题的解决,以及上架涉及相关问题的解决。
0条评论
top Created with Sketch.