行政區劃省市縣資料
阿新 • • 發佈:2021-11-04
前言
這裡有一個開源庫: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) CHARACTERSET 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群交流群有事請加群,有問題進群大家一起交流!