1. 程式人生 > 其它 >行政區劃省市縣資料

行政區劃省市縣資料

  前言

  這裡有一個開源庫: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 出處:https://www.cnblogs.com/huanzi-qch 若標題中有“轉載”字樣,則本文版權歸原作者所有。若無轉載字樣,本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結,否則保留追究法律責任的權利.

AD廣告位(長期招租,如有需要請私信)

【基塔後臺】免費後臺管理系統,低程式碼快速搭建管理後臺

【騰訊雲】雲產品限時秒殺,爆款1核2G雲伺服器,首年74元!
【騰訊雲】境外1核2G伺服器低至2折,半價續費券限量免費領取!
【騰訊雲】星星海SA2雲伺服器,1核2G首年99元起,高性價比首選!
【騰訊雲】中小企業福利專場,多款剛需產品,滿足企業通用場景需求,雲伺服器2.5折起!

【阿里雲】新老使用者同享,上雲優化聚集地!
【阿里雲】最新活動頁,上新必買搶先知,勁爆優惠不錯過!
【阿里雲】輕量應用伺服器2核2G 低至60元/年起!香港與海外伺服器最低24元/月起!
【阿里雲】ECS例項升級、續費,享低至 6.3折 限時折扣!

捐獻、打賞

請注意:作者五行缺錢,如果喜歡這篇文章,請隨意打賞!

支付寶

微信


QQ群交流群

QQ群交流群
有事請加群,有問題進群大家一起交流!