前言
为啥子要花时间搞这个呢? 就是写sql的时候,想要一个省市区维表,在网上找啊找啊找,不是要钱,就是要C币,或者就是别的,竟然没有公益的,共享一下不好吗?
太抠了,今天我来分享一个,哈哈... 搞个维表很简单de呦,下面说一下我做的方法:咱也用把(3W)方法来进行分析下。
获取行政区域数据
What?
行政区域数据是什么呢?
其实就是 国,省(自治区),市,区县,镇/街道,街、路、巷等区域地址信息。
Why?
为什么要获取省市区呢?
- 哎呀,这个原因就有很多了
- 比如说地址解析啊?
- 维表关联获取省市区啊?
- 比如说需要行政区域信息呀?
- 制作标签啊?
太多了,不多bb了。
How?
如何做呢?
怎么做?很简单鸭,行政区域,哪里会有呢?要么国家官方网站上,要么地图呗?在此我选择了高德地图,毕竟alibb开源的各种玩意儿还是比较优秀,比较靠谱的了。
高德webAPI行政区域查询接口(开发者手册):https://lbs.amap.com/api/webservice/guide/api/district
这个东西,就不要问我是怎么找的了,忘记什么时候做地图相关项目,地址解析的时候知道的。
打开页面如下:
申请个开发者的key哦~ 反正也不要钱,就是注册一下下啦,别吝啬嘛~
翻到该网页最底端,输入行政区名字,设置下级行政区级数,即可返回行政区域数据啦。json格式的哦,开不开森?
可能有人会问key怎么申请呢?
怎么搞呢,在此就多bb两句了,选择控制台->应用管理-> 创建应用-> 即可获得key(个人版有限制哦 6000次吧一天好像)
如下图:
准备工作已完毕,你学会了吗?
在浏览器里面输入对应访问地址,加上自己申请的key,就可以拿到响应的json格式行政数据喽~
生产csv数据,加工成维度表
下面贴一把自己写的json数据解析,只解析了三层哦,代码赶时间,不喜勿喷,哈哈...
package com.dtdwave.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* 解析高德API区域划分信息,获取省市区县维表
*
* @author zhangchenguang
* 2019年11月20日
*/
public class ParseJson {
public static void main(String[] args) throws Exception {
File file = new File("/Users/zhangchenguang/Desktop/pcd.json");
StringBuilder result = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
String s = null;
while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行
result.append(System.lineSeparator() + s);
}
br.close();
// System.out.println(result.toString());
JSONObject json1 = JSONObject.parseObject(result.toString());
JSONArray ja1 = (JSONArray)json1.get("districts");
JSONObject json2 = (JSONObject)ja1.get(0);
JSONArray ja2 = (JSONArray)json2.get("districts");
// System.out.println(ja2.toJSONString());