zoukankan      html  css  js  c++  java
  • 腾讯地图SDK如何获取全国行政区划检索列表?

    前言

    全国行政区划检索功能, 由于高德和百度也没有提供一个比较完美的解决方案, 因此使用了腾讯地图iOS SDK内部封装的Web接口来实现. 行政区划共分为三个等级, 省级/市级/区级, 对于北京市和天津市这样的城市, 通常直接认为是省级, 并直接以同样的内容来填充市级. 但是SDK内部并没有提供这样的填充, 因此需要自行再省级里面将其复制到市级。

    使用场景

    给用户提供选择行政区域和居住地等功能的行政区划选择器。

    准备

    腾讯地图3D SDK

    行政区划检索

    核心代码

    - (void)searchWithDistrictSearchOption:(QMSDistrictBaseSearchOption *)districtSearchOption didRecevieResult:(QMSDistrictSearchResult *)districtSearchResult {
        
        _provinceModelArray = [NSMutableArray array];
        
        NSArray *provinceArray = districtSearchResult.result[0];
        NSArray *cityArray = districtSearchResult.result[1];
        NSArray *districtArray = districtSearchResult.result[2];
        
        for (QMSDistrictData *provinceData in provinceArray) {
            ProvinceModel *provinceModel = [ProvinceModel provinceWithDistrictData:provinceData];
            
            // 取出市级
            NSMutableArray *cityModelArray = [NSMutableArray array];
            NSArray<NSNumber *> *cidx = provinceData.cidx;
            QMSDistrictData *cityData = cityArray[cidx.firstObject.intValue];
            
            // 判断二级结构后面是否还有三级结构
            // 如果没有, 则直接使用一级结构作为二级结构, 二级结构作为三级结构, 如: 北京-北京-东城区
            if (cityData.cidx == nil) {
                CityModel *cityModel = [CityModel cityWithDistrictData:provinceData];
                [cityModelArray addObject:cityModel];
                
                // 设置三级结构
                NSMutableArray *districtModelArray = [NSMutableArray array];
                int firstIndex = provinceData.cidx.firstObject.intValue;
                int lastIndex = provinceData.cidx.lastObject.intValue;
                
                // 将二级结构设置为三级结构
                for (int i = firstIndex; i < lastIndex + 1; i++) {
                    QMSDistrictData *districData = cityArray[i];
                    DistrictModel *districtModel = [DistrictModel districtWithDistrictData:districData];
                    [districtModelArray addObject:districtModel];
                }
                
                cityModel.districts = districtModelArray;
                provinceModel.cities = cityModelArray;
            } else {
                // 填充二级结构
                int cityFirstIndex = provinceData.cidx.firstObject.intValue;
                int cityLastIndex = provinceData.cidx.lastObject.intValue;
                
                for (int i = cityFirstIndex; i < cityLastIndex + 1; i++) {
                    QMSDistrictData *cityData = cityArray[i];
                    CityModel *cityModel = [CityModel cityWithDistrictData:cityData];
                    [cityModelArray addObject:cityModel];
                    
                    // 设置三级结构
                    int districtFirstIndex = cityData.cidx.firstObject.intValue;
                    int districtLastIndex = cityData.cidx.lastObject.intValue;
                    NSMutableArray *districtModelArray = [NSMutableArray array];
                    
                    for (int i = districtFirstIndex; i < districtLastIndex + 1; i++) {
                        QMSDistrictData *districtData = districtArray[i];
                        DistrictModel *districtModel = [DistrictModel districtWithDistrictData:districtData];
                        [districtModelArray addObject:districtModel];
                    }
                    
                    cityModel.districts = districtModelArray;
                }
                
                provinceModel.cities = cityModelArray;
            }
            
            [_provinceModelArray addObject:provinceModel];
        }
        
        _selectProvinceModel = _provinceModelArray[0];
        _selectCityModel = _selectProvinceModel.cities[0];
        _selectDistrictModel = _selectCityModel.districts[0];
        
        [self setupPickerView];
    }
    

    以上就是核心代码,由于需要解析返回的行政区划的内容, 并且数据共有省市区三个数组, 对于北京市这样的特殊例子并没有第三个数组, 因此需要额外的步骤区拆分, 直接看部分代码可能有一些晦涩, 因此建议同学们可以直接下载Demo尝试。

    示例:展示行政区划Picker

    点评

    该功能目前还有些许不足之处,比如:

    1、省市区三个行政区划如果要同时获取的话, 由于API返回的是三个数组, 因此自己去处理有些麻烦。

    2、直辖市这样的城市, 由于不存在省份, 相比其他省份少了一个层级, 而API也没有直接提供占位数据, 建议腾讯官方可以改进一下。

    链接

    感兴趣的同学可以在码云中下载Demo尝试一下。

    作者:面糊

    链接:https://www.jianshu.com/p/40044b625c63

    来源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    oracle 数据库服务名怎么查
    vmware vsphere 6.5
    vSphere虚拟化之ESXi的安装及部署
    ArcMap中无法添加ArcGIS Online底图的诊断方法
    ArcGIS中字段计算器(高级计算VBScript、Python)
    Bad habits : Putting NOLOCK everywhere
    Understanding the Impact of NOLOCK and WITH NOLOCK Table Hints in SQL Server
    with(nolock) or (nolock)
    What is “with (nolock)” in SQL Server?
    Changing SQL Server Collation After Installation
  • 原文地址:https://www.cnblogs.com/Dreamholder/p/13690641.html
Copyright © 2011-2022 走看看