赞
踩
本地数据库表结构:
create table tbl_sys_area_bak ( id int not null primary key, parent_ids varchar(255) null comment '所有上级(1,2,3)', parent_id varchar(32) null comment '地区上级(3)', area_name varchar(32) not null comment '地区名称(深圳市)', full_name varchar(128) not null comment '地区全称(中国,广东省,深圳市)', level int not null comment '地区级别', code varchar(100) null comment '区域编码', sort int not null comment '排序', remarks varchar(255) null comment '备注', create_id int not null comment '创建者id', update_id int not null comment '更新者id', create_date datetime default CURRENT_TIMESTAMP null comment '创建日期', update_date datetime default CURRENT_TIMESTAMP null comment '更新日期', del_flag tinyint(1) default 0 not null comment '删除标记(Y删除,N未删除)', constraint index_area_code unique (code) ) comment '地区表;
注意想用高德开放平台的api,需要先去该平台注册一个应用,我这里用的java,申请的是web服务平台的key。
粘贴下面代码,替换上自己的key之后,就可以将高德的行政区划数据导入自己本地数据库中。
注意:在跑该demo的过程中,控制台上可能会提示有部分数据导入失败,原因是本地数据库的等级设为了3级(省、市、区/县),有一部分省直辖县级市等级分为了2级(例如:五指山市,仙桃市、天门市……),该县级市下辖乡镇所用的adcode是该县级市的adcode。数据库用adcode作为了表的id,所以当插入了县级市的信息之后,再插入该县级市下辖的乡镇的时候,发现id(即adcode)重复,所以插入失败。这个可以根据自己业务需要,调整表结构来避免这个问题
@ResponseBody @GetMapping("/t1") public Object t1() { //获取所有得的省份 List<String> tblSysAreas = List.of( "河北省", "山西省", "辽宁省", "吉林省", "黑龙江省", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "海南省", "四川省", "贵州省", "云南省", "陕西省", "甘肃省", "青海省", "台湾省", "北京市", "天津市", "上海市", "重庆市", "内蒙古自治区", "广西壮族自治区", "西藏自治区", "宁夏回族自治区", "新疆维吾尔自治区", "香港特别行政区", "澳门特别行政区" ); for (int i = 0; i < tblSysAreas.size(); i++) { int a = i + 1; getAreaInfo(tblSysAreas.get(i), a); } return scsDataRv("插入成功"); } private void getAreaInfo(String areaName, int sort) { //此key为高德开放平台上申请的应用 String key = "10901ba132asflwo4cccde7b122bdd69"; String url = "https://restapi.amap.com/v3/config/district?" + "keywords=" + areaName + "&subdistrict=3" + "&key=" + key; JSONObject jsonObject = null; try { String response = httpApiService.doGet(url); jsonObject = JSONUtil.parseObj(response); } catch (Exception e) { e.printStackTrace(); System.out.println(areaName + "没有获取成功"); } JSONObject provinceInfo = null; try { //第一层,省 JSONArray jsonArray = jsonObject.getJSONArray("districts"); provinceInfo = JSONUtil.parseObj(jsonArray.get(0)); //插入省信息 insertProvince(provinceInfo, sort); } catch (Exception e) { e.printStackTrace(); System.out.println("省份插入异常"); } //第二层,市 JSONArray cityInfos = provinceInfo.getJSONArray("districts"); int citySort = 0; for (int i = 0; i < cityInfos.size(); i++) { JSONObject cityInfo = JSONUtil.parseObj(cityInfos.get(i)); ++citySort; try { //插入市信息 insertCityInfo(provinceInfo, cityInfo, citySort); } catch (Exception e) { e.printStackTrace(); System.out.println("城市信息插入异常"); } //区信息 JSONArray areaList = JSONUtil.parseArray(cityInfo.get("districts")); int areaSort = 0; for (int i1 = 0; i1 < areaList.size(); i1++) { JSONObject areaInfo = JSONUtil.parseObj(areaList.get(i1)); ++areaSort; try { //插入区信息 insertAreaInfo(provinceInfo, cityInfo, areaInfo, areaSort); } catch (Exception e) { e.printStackTrace(); System.out.println("区域信息插入异常"); } } } } private void insertAreaInfo(JSONObject provinceInfo, JSONObject cityInfo, JSONObject areaInfo, int sort) { TblSysAreaBak build = TblSysAreaBak.builder() .id(Integer.valueOf(String.valueOf(areaInfo.get("adcode")))) .code((String) areaInfo.get("adcode")) .sort(sort) .updateId(1) .createId(1) .level(3) .parentId((String) cityInfo.get("adcode")) .parentIds("0,".concat((String) provinceInfo.get("adcode")).concat(",").concat((String) cityInfo.get("adcode")).concat(",").concat((String) areaInfo.get("adcode"))) .fullName("中国,".concat((String) provinceInfo.get("name")).concat(",").concat((String) cityInfo.get("name")).concat(",").concat((String) areaInfo.get("name"))) .delFlag(DelFlagEnum.N.getDelKey()) .areaName((String) areaInfo.get("name")).build(); tblSysAreaBakService.insert(build); } private void insertCityInfo(JSONObject provinceInfo, JSONObject cityInfo, int sort) { TblSysAreaBak build = TblSysAreaBak.builder() .id(Integer.valueOf(String.valueOf(cityInfo.get("adcode")))) .code((String) cityInfo.get("adcode")) .sort(sort) .updateId(1) .createId(1) .level(2) .parentId((String) provinceInfo.get("adcode")) .parentIds("0,".concat((String) provinceInfo.get("adcode")).concat(",").concat((String) cityInfo.get("adcode"))) .fullName("中国,".concat((String) provinceInfo.get("name")).concat(",").concat((String) cityInfo.get("name"))) .delFlag(DelFlagEnum.N.getDelKey()) .areaName((String) cityInfo.get("name")).build(); tblSysAreaBakService.insert(build); } private void insertProvince(JSONObject provinceInfo, int sort) { TblSysAreaBak build = TblSysAreaBak.builder() .id(Integer.valueOf(String.valueOf(provinceInfo.get("adcode")))) .code((String) provinceInfo.get("adcode")) .sort(sort) .updateId(1) .createId(1) .level(1) .parentId("0") .parentIds("0,".concat((String) provinceInfo.get("adcode"))) .fullName("中国,".concat((String) provinceInfo.get("name"))) .delFlag(DelFlagEnum.N.getDelKey()) .areaName((String) provinceInfo.get("name")).build(); tblSysAreaBakService.insert(build); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。