package com.chinamobile.cmss.share.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Address {
/**
* 功能說明:更新高德的省市區到我們的省市區表裏
* @author MrDoubi 2019-07-08 10:12:30
* @return model
*/
public static void updateInitGaoDe(){
//慎用!
//我本人用來刪除省市區表原來的記錄的
//高德的key 申請時選擇web服務
String gaodeKey = "";
//一個http請求 這個方法放在羨慕
String res =
HttpClientUtils.jsonPostRequest("http://restapi.amap.com/v3/config/district","key=高德地圖註冊的key值&subdistrict=3");
JSONObject json = JSONObject.parseObject(res);
int count = 0;
System.out.println(json.get("status"));
List<String> list = new ArrayList<>();
Map<String, Object> provinceMap = new HashMap<String, Object>();
if(json.get("status").equals("1")){
//國家 暫時只有中國
JSONArray districts = json.getJSONArray("districts");
for (int i = 0; i < districts.size(); i++) {
JSONObject district = districts.getJSONObject(i);
//省份
JSONArray provinces = district.getJSONArray("districts");
for (int j = 0; j < provinces.size(); j++) {
JSONObject province = provinces.getJSONObject(j);
// System.out.println(
// "province :::::: ==== name:"+province.getString("name")+
// " center:"+province.getString("center")+
// " adcode:"+province.getString("adcode")
// );
//在這裏新增省份 到表中
//市
JSONArray citys = province.getJSONArray("districts");
Map<String, Object> cityMap = new HashMap<String, Object>();
for (int k = 0; k < citys.size(); k++) {
JSONObject city = citys.getJSONObject(k);
// System.out.println(
// "city :::::: ==== name:"+city.getString("name")+
// " center:"+city.getString("center")+
// " adcode:"+city.getString("adcode")
// );
// System.out.println(province.getString("name") + "-" + city.getString("name"));
//在這裏新增市 到表中
//區
JSONArray areas = city.getJSONArray("districts");
Map<String, Object> countyMap = new HashMap<String, Object>();
for (int l = 0; l < areas.size(); l++) {
JSONObject area = areas.getJSONObject(l);
countyMap.put(area.getString("name"), area.getString("name"));
count++;
// list.add(province.getString("name") + "-" + city.getString("name") + "-" + area.getString("name"));
// System.out.println(province.getString("name") + "-" + city.getString("name") + "-" + area.getString("name"));
/*System.out.println(
"area :::::: ==== name:"+area.getString("name")+
" center:"+area.getString("center")+
" adcode:"+area.getString("adcode")
);*/
//在這裏新增區 到表中
}
cityMap.put(city.getString("name"), countyMap);
}
provinceMap.put(province.getString("name"), cityMap);
}
}
List<String> result = new ArrayList();
List<String> proList = sortData(provinceMap);
count = 0;
for (String pro : proList) {
if (provinceMap.get(pro) instanceof Map) {
Map map = (Map) provinceMap.get(pro);
List<String> ciList = sortData(map);
for (String ci : ciList) {
// System.out.println(pro + "-" + ci);
Map map2 = (Map) map.get(ci);
List<String> coList = sortData(map2);
for (String co : coList) {
System.out.println(pro + "-" + ci + "-" + co);
count++;
}
}
}
}
System.out.println("獲取成功 共"+count+"條數據");
}else {
System.err.println(json.get("info"));
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static List sortData(Map<String, Object> map) {
Set<String> set = map.keySet();
Object[] ls = set.toArray();
List<String> list = new ArrayList<>();
for (Object str : ls) {
list.add(str.toString());
}
@SuppressWarnings("rawtypes")
Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
Collections.sort(list,comparator);
return list;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void sortData(List<String> list) {
@SuppressWarnings("rawtypes")
Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
Collections.sort(list,comparator);
}
/**
* 向指定 URL 發送POST方法的請求
*
* @param url 發送請求的 URL
* @param param 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。
* @return 所代表遠程資源的響應結果
*/
public static String sendPost(String url, String param)
{
PrintWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
try
{
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("contentType", "utf-8");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
out.print(param);
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String line;
while ((line = in.readLine()) != null)
{
result.append(line);
}
}
catch (ConnectException e)
{
}
catch (SocketTimeoutException e)
{
}
catch (IOException e)
{
}
catch (Exception e)
{
}
finally
{
try
{
if (out != null)
{
out.close();
}
if (in != null)
{
in.close();
}
}
catch (IOException ex)
{
}
}
return result.toString();
}
public static void main(String[] args) {
updateInitGaoDe();
}
}