腾讯地图获取全国行政区划检索列表Demo
时间:2022-07-25
本文章向大家介绍腾讯地图获取全国行政区划检索列表Demo,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
全国行政区划检索功能, 由于高德和百度也没有提供一个比较完美的解决方案, 因此使用了腾讯地图iOS SDK内部封装的Web接口来实现. 行政区划共分为三个等级, 省级/市级/区级, 对于北京市和天津市这样的城市, 通常直接认为是省级, 并直接以同样的内容来填充市级. 但是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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- WordPress设置评论到达一定数量后自动关闭评论功能
- Python 项目实践一(外星人入侵)第一篇
- 外媒:域名Covermate.com超35万终端交易
- 移除WordPress 管理后台的主题编辑功能
- 百度区域链开放平台“BaaS”启用了二级子域名chain.baidu.com
- Qt界面UI之QML初见(学习笔记四)
- 清新唯美的jQuery天气预报插件(网页天气预报插件)
- 32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0
- 跨平台的 .NET 运行环境 Mono 3.2 新特性
- Ibatisnet Quick Start
- 常见的3种Hive参数配置方法
- 6杂域名超16万元结拍
- GridView控件使用经验
- WordPress登陆文件wp-login.php添加相关参数,安全有保障
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 基础(三):我是一个数字
- 【译】Flutter架构综述
- 【tcl学习】vivado write_project_tcl
- 你不知道的LinkedList(一):基于jdk1.8的LinkdeList源码分析
- SAP CRM Application Extension Tool(AET)扩展字段的渲染原理
- 使用nodejs将SAP Fiori应用置于本地Launchpad运行
- 使用nodejs运行SAP Fiori应用
- JUnit 注解@Category的工作原理
- JUnit 注解@RunWith的工作原理
- Java|快速掌握java判断语句的用法
- Oh!老伙计,提高自己的并发技能,先从锁优化开始吧
- iOS开发之WidgetKit
- 六、玩转Git三剑客-初识GitHub
- Python|自制二维码生成器
- HBase豆知识