前言
这里有一个开源库:https://gitee.com/gaohuazi/china_regions
或者调用各大地图商的API
腾讯地图:https://lbs.qq.com/service/webService/webServiceGuide/webServiceDistrict
或者自己去抓取官方发布的区划数据
民政局:http://www.mca.gov.cn/article/sj/
统计局:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/
推荐直接使用开源库数据,省得自己折腾,如果需要满足自定义数据结构,可以把region.JSON(包含所有省市区/县数据)下载下来,自己解析存库
解析json
我们选择使用开源库里面的数据
首先先把region.json下载下来,同时创建我们自己结构的表
CREATE TABLE `region` (
`code` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 行政区划代码,
`p_code` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 上级行政区划代码,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 省份/城市/[区]县城 名称,
`sort` int(3) NULL DEFAULT NULL COMMENT 排序字段(如果不需要可以不用),
PRIMARY KEY (`code`, `p_code`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 行政区划省市县数据 ROW_FORMAT = Compact;
解析json、存库
public static void main(String[] args) {
System.out.println("数据解析开始...");
TimeInterval timer = DateUtil.timer();//计时器
//读取、处理json
StringBuilder stringBuilder = new StringBuilder();
try {
File regionJson = new File("D:region.json");
BufferedReader reader = new BufferedReader(new FileReader(regionJson));
Object[] lines = reader.lines().toArray();
for (Object o : lines) {
stringBuilder.append(o);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//JSONUtil工具类使用hutool
JSONArray jsonArray = JSONUtil.parseArray(stringBuilder.toString());
//获取实例,DbUtil工具类:https://www.cnblogs.com/huanzi-qch/p/15474928.html
DbUtil dbUtil = new DbUtil("jdbc:mysql://localhost/jfinal_demo","root","123456");
//清空表
dbUtil.execute("truncate table region");
//关闭自动提交事务,提高效率
dbUtil.setAutoCommit(false);
//插入数据
for (int i = 0; i < jsonArray.size(); i ) {
int sort = i 1;//排序字段
Object element = jsonArray.get(i);
JSONObject o = (JSONObject) element;
String oCode = o.getStr("code");
dbUtil.execute("insert into region values (?,?,?,?)", new Object[]{oCode,"-1",o.getStr("name"),sort});
JSONArray a = (JSONArray) o.get("children");
for (Object item : a) {
sort ;
JSONObject o1 = (JSONObject) item;
String o1Code = o1.getStr("code");
dbUtil.execute("insert into region values (?,?,?,?)", new Object[]{o1Code,oCode,o1.getStr("name"),sort});
JSONArray a1 = (JSONArray) o1.get("children");
for (Object value : a1) {
sort ;
JSONObject o2 = (JSONObject) value;
String o2Code = o2.getStr("code");
dbUtil.execute("insert into region values (?,?,?,?)", new Object[]{o2Code,o1Code,o2.getStr("name"),sort});
}
}
}
//手动管理事务
dbUtil.commit();
//关闭连接
dbUtil.close();
System.out.println("数据解析、保存完成!耗时:" timer.interval() "毫秒");
}
效果
省
select
name
,min(sort)
from
region
where
p_code = -1 -- 省
-- p_code = 110000 -- 市
-- p_code = 110100 -- 区/县
group by
name
order by
min(sort)
市
select
name
,min(sort)
from
region
where
-- p_code = -1 -- 省
p_code = 110000 -- 市
-- p_code = 110100 -- 区/县
group by
name
order by
min(sort)
区/县
select
name
,min(sort)
from
region
where
-- p_code = -1 -- 省
-- p_code = 110000 -- 市
p_code = 110100 -- 区/县
group by
name
order by
min(sort)
出处:https://www.cnblogs.com/huanzi-qch
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。