开发轮子(一):全国省/市/区/街道三、四级联动

news2025/4/19 8:49:16

概述

本服务提供中国标准行政区划数据查询功能,支持:
1 . 全国省、市、区/县、乡镇/街道 四级行政区划数据;
2 . 支持三级区划(省/市 - 区/县)轮廓数据;
3 . 支持区划查询、省市区列表、查询子级区划等功能。

数据来源

腾讯位置服务:WebService API | 腾讯位置服务

接口服务

接口1:获取省市区列表

本接口用于获取全部省市区三级行政区划列表。
注:获取四级乡镇/街道数据,需要通过获取子级区划接口,传入指定三级区划,获取相应四级数据。

请求地址:

https://apis.map.qq.com/ws/district/v1/list

接口2:获取下级行政区划

获取指定行政区划的子级行政区划
本接口支持获取 指定区县(三级)其下乡镇/街道(四级)列表

请求地址:

https://apis.map.qq.com/ws/district/v1/getchildren // get请求

开发准备

申请开发者秘钥:开发密钥(Key)

调用示例

// GET请求,注意参数值要进行URL编码
// list接口:获取全部行政区划数据
https://apis.map.qq.com/ws/district/v1/list?key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

// getchildren接口:获取北京市的子级行政区划
https://apis.map.qq.com/ws/district/v1/getchildren?id=110000&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

核心代码

第一步:创建行政区划SQL表结构

CREATE TABLE `b2b2c_addresses` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称',
  `full_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '中文全称',
  `pinyin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '拼音',
  `unicode_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '行政区划唯一标识(adcode)',
  `pid` bigint DEFAULT NULL COMMENT '父级ID',
  `level_no` int DEFAULT NULL COMMENT '级别',
  `english_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '英文名',
  `order_no` int DEFAULT NULL COMMENT '排序号',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_addresses_pid` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='地址表';

第二步:创建行政区划实体对象

/**
 * 行政区划信息表
 * @TableName b2b2c_addresses
 */
@TableName(value ="b2b2c_addresses")
@Data
public class Addresses implements Serializable {
    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 父级ID
     */
    private Long pid;

    /**
     * 名称
     */
    private String name;

    /**
     * 名称
     */
    private String fullName;


    /**
     * 级别
     */
    private Integer levelNo;

    /**
     * 拼音
     */
    private String pinyin;

    /**
     * 英文名
     */
    private String englishName;

    /**
     * ASCII码
     */
    private String unicodeCode;

    /**
     * 排序号
     */
    private Integer orderNo;

    /**
     * 
     */
    private Date createdAt;

    /**
     * 
     */
    private Date updatedAt;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}

第二步:获取省级行政区划

Addresses addresses= null;
HttpRequest request = HttpRequest.get("https://apis.map.qq.com/ws/district/v1/list/ws/district/v1/list?key=XXXXXX");
String level1 = request.body();
JSONObject jsonObject1 = JSONObject.parseObject(level1);
List<Object> mapList1 = (List<Object>) jsonObject1.get("result");
List<Map> list1 = (List<Map>) mapList1.get(0);
for(int i = 0;i < list1.size() ;i++){
    addresses = new Addresses();
    Map a = list1.get(i);
    List<Object> pinyinList1 = (List<Object>) a.get("pinyin");
    String pinyin1 = "";
    for(Object o: pinyinList1){
         pinyin1 += o;
     }
    addresses.setName(a.get("name").toString());
    addresses.setFullName(a.get("fullname").toString());
    addresses.setLevelNo(1);
    addresses.setPid(0l);
    addresses.setPinyin(pinyin1);
    addresses.setOrderNo(i+1);
    addresses.setUnicodeCode(a.get("id").toString());
    addressesService.create(addresses);
}

将获取到的省级行政区划存放到数据库里面,然后再通过省级行政编码去查询市级数据。

第三步:获取市/县级行政区划

// TODO 从数据库中查询出省级数据,或者直接在上面进行循环获取
List<Addresses> addressesList = addressesService.selectListByLevel(1);
        for(int i = 0;i < addressesList.size() ;i++){
            addresses = new Addresses();
            Addresses record = addressesList.get(i);
            if(record.getFullName().contains("市")){
                addresses.setName(record.getName());
                addresses.setFullName(record.getFullName());
                addresses.setUnicodeCode(record.getUnicodeCode());
                addresses.setPinyin(record.getPinyin());
                addresses.setLevelNo(2);
                addresses.setPid(record.getId());
                addresses.setOrderNo(i+1);
                addressesService.create(addresses);
            }else{
            HttpRequest request =   HttpRequest.get("https://apis.map.qq.com/ws/district/v1/getchildrend="+id+"&key="+lbsProperties.getKey());
        String level2 = request.body();
                JSONObject jsonObject2 = JSONObject.parseObject(level2);
                List<Object> mapList2 = (List<Object>) jsonObject2.get("result");
                List<Map> list2= (List<Map>) mapList2.get(0);
                Addresses addresses2 = null;
                for(int j = 0;j < list2.size() ;j++) {
                    addresses2 = new Addresses();
                    Map b = list2.get(j);
                    List<Object> pinyinList2 = (List<Object>) b.get("pinyin");
                    String pinyin2 = "";
                    for (Object o : pinyinList2) {
                        pinyin2 += o;
                    }
                    addresses2.setUnicodeCode(b.get("id").toString());
                    addresses2.setName(b.get("name").toString());
                    addresses2.setFullName(b.get("fullname").toString());
                    addresses2.setLevelNo(2);
                    addresses2.setPid(record.getId());
                    addresses2.setPinyin(pinyin2);
                    addresses2.setOrderNo(j + 1);
                    addressesService.create(addresses2);
                }
            }
        }

备注:获取四级街道数据也是同样的思路。

总结

直辖市 的处理方法是 一级和二级的数据一样,通过以上代码可以看出,如果一级的名字带“市”就会吧数据重写一份放到二级里面。

如果小伙伴们不想这么麻烦获取这些数据也可以直接下载,这份省、市、区/县、街道 四级联动的数据。

链接: https://pan.baidu.com/s/1PbtDOp10kog_UOBkx3Okpg 提取码: kdgg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十六、立方体贴图(天空盒)

第一部分 概念&#xff1a; 1) 引用 OpenGL ES 立方体贴图本质上还是纹理映射&#xff0c;是一种 3D 纹理映射。立方体贴图所使的纹理称为立方图纹理&#xff0c;它是由 6 个单独的 2D 纹理组成&#xff0c;每个 2D 纹理是立方图的一个面。 立方图纹理的采样通过一个 3D 向量…

CodeGeeX 2.0版本重大升级:通过聊天对话的方式直接操作代码

CodeGeeX 2.0版本正式上线&#xff01;从命名上看这是一次大版本的升级。 上个月&#xff0c;CodeGeeX在VSCode和JetBrains IDEs的插件中&#xff0c;加入了智能问答&#xff08;Ask CodeGeeX&#xff09;功能&#xff0c;让用户可以在IDE中通过问答对话的方式解决技术问题。本…

Selenium自动化程序被检测为爬虫,怎么屏蔽和绕过

Selenium 操作被屏蔽 使用selenium自动化网页时&#xff0c;有一定的概率会被目标网站识别&#xff0c;一旦被检测到&#xff0c;目标网站会拦截该客户端做出的网页操作。 比如淘宝和大众点评的登录页&#xff0c;当手工打开浏览器&#xff0c;输入用户名和密码时&#xff0c…

docker 无法将“docker”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

&#x1f4a7; d o c k e r 无法将“ d o c k e r ”项识别为 . . . . . . \color{#FF1493}{docker 无法将“docker”项识别为......} docker无法将“docker”项识别为......&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页…

Elasticsearch:路由 - routing

你是否考虑过 Elasticsearch 如何知道将文档存储在何处&#xff1f; 它如何知道在哪里寻找它们&#xff0c;以及是否检索、更新或删除它们&#xff1f; 这是一个令人兴奋的过程&#xff0c;一切都归结为路由的概念。 路由介绍 路由是确定文档属于哪个分片以便检索它或将其存储在…

新手配learnsite

把下载好的learnsite放在C盘根目录下 改个名 开始&#xff0c;Microsoft SQL Server Tools 19,SQL Server Management studio 19 这里我其实是没看懂&#xff0c;但是我觉得是选个服务器。 点开数据库引擎这里试一下 因为我来回装好几次sql&#xff0c;这里只有ls2有印象好像是…

git statsh、git submodule

文章目录 git stash解决git pull和本地文件的冲突1、先将本地修改存储起来2、pull内容3、还原暂存的内容4、解决文件中冲突的的部分5、删除stash。6 、git stash pop 与 git stash apply <stash{id}> 的区别。 回退后的版本是不追踪的git 还原修改git submodule git stas…

SpringBoot整合达梦数据库的教程(详解)

一、官网下载试用版本 http://www.dameng.com/down.aspx 我是win 11系统下载如下&#xff1a; 二、安装 解压后 双击打开iso文件 然后点击安装 选择创建实例&#xff08;注意记住账号/密码 端口号 默认的是 SYSDBA/SYSDBA 5236&#xff09; 然后一直下一步 到完成&#xff…

Win11下查看快捷键占用情况

Win11下查看快捷键占用情况 使用 OpenArk&#xff0c;根据文档描述&#xff0c;它可以查看许多 Windows 系统信息&#xff0c;包括快捷键&#xff0c;支持 Win10。 操作步骤&#xff1a; 1.下载 OpenArk Github&#xff1a;https://github.com/BlackINT3/OpenArk 单文件下载&…

计算机毕业论文内容参考|基于c语言的新一代预约挂号系统的设计与实现

文章目录 导文文章重点前言系统架构相关技术与方法介绍网络通信技术数据库管理技术算法模型选择技术分析技术设计:技术实现:总结与展望:本文总结:后续工作展望:导文 计算机毕业论文内容参考|基于c语言的新一代预约挂号系统的设计与实现 文章重点 前言 随着科技的不断发展…

linuxOPS基础_linux软件包安装

软件包概述 上图是windows下的软件包 Linux下也有很多可以安装的软件&#xff0c;而这些软件的安装包可细分为两种&#xff0c;分别是源码包和二进制包。 Linux下软件的安装方式 ① RPM软件包安装 > 软件名称.rpm ② YUM包管理工具 > yum install 软件名称 -y ③ 源码…

红外-星光-黑光-全彩夜视摄像头选型

星光”、“黑光”、“AI超微光”、“极光”&#xff0c;在安防行业这些概念似乎比“低照度摄像机”本身要火的多。 无论营销名称是什么&#xff0c;归根到底&#xff0c;它们都是用不同的方法使摄像机能在夜间拍摄到更像白昼一般的 高清夜视摄像头除了以前我们在项目上经常使…

腾讯云服务器怎么使用?新手入门教程

腾讯云服务器入门教程包括云服务器CPU内存带宽配置选择&#xff0c;选择云服务器CVM或轻量应用服务器&#xff0c;云服务器创建后重置密码、远程连接、搭建程序环境等&#xff0c;腾讯云服务器网分享从0到1腾讯云服务器入门教程&#xff1a; 腾讯云服务器入门教程目录&#xf…

进程信号

目录 信号的产生方式 程序的崩溃 通过键盘产生 进程异常产生 系统调用产生 软件条件产生 信号产生中 函数介绍 sigset_t&#xff08;信号集&#xff09; sigprocmask函数 sigpending函数 信号处理 用户态和内核态的理解 处理信号的过程 信号捕捉 sigaction函数…

安全测试13款免费的测试工具!

目录 前言&#xff1a; 1. Excercise in a Box 2. Needle 3. DevSlop 4. 移动安全框架(Mobile Security Framework) 5. Frida 6. Nishang 7. Tamper 8. InSpec 9. Faraday 10. Pocsuite 11. Taipan 12. Pacu 13. Secure Guild 前言&#xff1a; 首先&#xff0c;我想强调一…

策略模式——实践:在业务逻辑中理解设计模式

一般定义 策略模式(Strategy Pattern)&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化&#xff0c;也称为政策模式(Policy)。 主要角色 Context: 环境类 Strategy: 抽象策略类 Concr…

CnOpenData电商平台交易数据数据

一、数据简介 电子商务是网络化的新型经济活动&#xff0c;是推动“互联网&#xff0b;”发展的重要力量&#xff0c;是新经济的主要组成部分。通过电商平台获取的电商交易平台数据可以及时统计、监测数据&#xff0c;全方位跟踪分析电子商务市场的发展情况和发展环境&#xff…

mysql中的group by 和 having使用

mysql中的group by 和 having 使用 理论 –sql中的group by 用法解析&#xff1a; – Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。 –它的作用是通过一定的规则将一个数据集划分成若干个小的区域&#xff0c;然后针对若干个小区域进行数…

【Nginx+Tomcat的7层代理和四层代理】

目录 一、NginxTomcat负载均衡、动静分离1、正向代理2、反向代理3、Nginx动静分离实现原理Nginx静态处理优势 二、实战1.部署Nginx 负载均衡器2.部署2台Tomcat 应用服务器3.动静分离配置&#xff08;1&#xff09;Tomcat1 server 配置&#xff08;2&#xff09;Tomcat2 server …

【华为OD机试真题2023B卷 JAVAJS】评论转换输出

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 评论转换输出 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 在一个博客网站上,每篇博客都有评论。每一条评论都是一个非空英文字母字符串。 评论具有树状结构,除了根评论外,每个评论都有一个父评论。 当评论保…