zoukankan      html  css  js  c++  java
  • 行政区划省市县数据

      前言

      这里有一个开源库: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)

    版权声明

    作者:huanzi-qch
    若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.

    AD广告位(长期招租,如有需要请私信)

    【基塔后台】免费后台管理系统,低代码快速搭建管理后台

    【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元!
    【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!
    【腾讯云】星星海SA2云服务器,1核2G首年99元起,高性价比首选!
    【腾讯云】中小企业福利专场,多款刚需产品,满足企业通用场景需求,云服务器2.5折起!

    【阿里云】新老用户同享,上云优化聚集地!
    【阿里云】最新活动页,上新必买抢先知,劲爆优惠不错过!
    【阿里云】轻量应用服务器2核2G 低至60元/年起!香港与海外服务器最低24元/月起!
    【阿里云】ECS实例升级、续费,享低至 6.3折 限时折扣!

    捐献、打赏

    请注意:作者五行缺钱,如果喜欢这篇文章,请随意打赏!

    支付宝

    微信


    QQ群交流群

    QQ群交流群
    有事请加群,有问题进群大家一起交流!

  • 相关阅读:
    四、网络层
    四、路由协议
    四、最长前缀匹配
    四、路由转发
    四、分片
    五、TCP的可靠传输你怎么看
    存储周期
    判断素数
    需求说明书的内容
    块级元素——盒子模型1
  • 原文地址:https://www.cnblogs.com/huanzi-qch/p/15509146.html
Copyright © 2011-2022 走看看