行政區划省市縣數據


  前言

  這里有一個開源庫: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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM