import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
public class MapUtil {
private static String key = "xxxxxxxxxxx";
/**
* 阿里云api 根据经纬度获取地址
*
* @param log
* @param lat
* @return
*/
public static String getAdd(String log, String lat) {
StringBuffer s = new StringBuffer();
s.append("key=").append(key).append("&location=").append(log).append(",").append(lat);
String res = sendPost("http://restapi.amap.com/v3/geocode/regeo", s.toString());
// logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
JSONObject jsonObject1 = JSONObject.fromObject(jsonObject.get("regeocode"));
String add = jsonObject1.get("formatted_address").toString();
return add;
}
/**
* 阿里云api 根据经纬度获取所在城市
*
* @param log
* @param lat
* @return
*/
public static String getCity(String log, String lat) {
// log 大 lat 小
// 参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
String urlString = "http://gc.ditu.aliyun.com/regeocoding?l=" + lat + "," + log + "&type=010";
String res = "";
try {
URL url = new URL(urlString);
java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream
(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
res += line + "\n";
}
in.close();
JSONObject jsonObject = JSONObject.fromObject(res);
JSONArray jsonArray = JSONArray.fromObject(jsonObject.getString("addrList"));
JSONObject j_2 = JSONObject.fromObject(jsonArray.get(0));
String allAdd = j_2.getString("admName");
String arr[] = allAdd.split(",");
res = arr[1];
} catch (Exception e) {
// logger.info("error in wapaction,and e is " + e.getMessage());
e.printStackTrace();
}
// logger.info(res);
return res;
}
/**
* 高德api 根据地址获取经纬度
*
* @param name
* @return
*/
public static String getLatAndLogByName(String name) {
StringBuffer s = new StringBuffer();
s.append("key=" + key + "&address=" + name);
String res = sendPost("http://restapi.amap.com/v3/geocode/geo", s.toString());
// logger.info(res);
//System.out.println(res);
JSONObject jsonObject = JSONObject.fromObject(res);
JSONArray jsonArray = JSONArray.fromObject(jsonObject.getString("geocodes"));
JSONObject location = (JSONObject) jsonArray.get(0);
String add = location.get("location").toString();
return add;
}
/**
* 高德api 根据地址获取经纬度
*
* @param name
* @return
*/
public static String getAddByAMAP(String log, String lat) {
StringBuffer s = new StringBuffer();
s.append("key=").append(key).append("&location=").append(log).append(",").append(lat);
String res = sendPost("http://restapi.amap.com/v3/geocode/regeo", s.toString());
// logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
JSONObject jsonObject1 = JSONObject.fromObject(jsonObject.get("regeocode"));
String add = jsonObject1.get("formatted_address").toString();
return add;
}
/**
* 经纬度返回区
* @param log
* @param lat
* @return
*/
public static String getDistrictByAMAP(String log, String lat) {
StringBuffer s = new StringBuffer();
s.append("key=").append(key).append("&location=").append(log).append(",").append(lat);
String res = sendPost("http://restapi.amap.com/v3/geocode/regeo", s.toString());
// logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
JSONObject jsonObject1 = JSONObject.fromObject(jsonObject.get("regeocode"));
JSONObject jsonObject2 = JSONObject.fromObject(jsonObject1.get("addressComponent"));
return jsonObject2.get("district").toString();
}
/**
* 高德api 坐标转换---转换至高德经纬度
*
* @param name
* @return
*/
public static String convertLocations(String log, String lat, String type) {
StringBuffer s = new StringBuffer();
s.append("key=").append(key).append("&locations=").append(log).append(",").append(lat).append("&coordsys=");
if (type == null) {
s.append("gps");
} else {
s.append(type);
}
String res = sendPost("http://restapi.amap.com/v3/assistant/coordinate/convert", s.toString());
// logger.info(res);
JSONObject jsonObject = JSONObject.fromObject(res);
String add = jsonObject.get("locations").toString();
return add;
}
public static String getAddByName(String name) {
// log 大 lat 小
// 参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
String urlString = "http://gc.ditu.aliyun.com/geocoding?a=" + name;
String res = "";
try {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
res += line + "\n";
}
in.close();
JSONObject jsonObject = JSONObject.fromObject(res);
String lon = jsonObject.getString("lon");
String lat = jsonObject.getString("lat");
System.err.println(jsonObject);
res = getNearbyAdd(lon, lat);
} catch (Exception e) {
// logger.info("error in wapaction,and e is " + e.getMessage());
e.printStackTrace();
}
return res;
}
public static String getNearbyAdd(String log, String lat) {
String add = sendGet("http://ditu.amap.com/service/regeo", "longitude=" + log + "&latitude=" + lat +
"&type=010");
// logger.info(add);
return add;
}
/**
* 高德api 关键字模糊查询
*
* @param keyWord
* @param city
* @return
*/
public static String getKeywordsAddByLbs(String keyWord, String city) {
StringBuffer s = new StringBuffer();
s.append("key=" + key + "&keywords=");
if (keyWord.contains(" ")) {
String[] str = keyWord.split(" ");
for (int i = 0; i < str.length; i++) {
if (i == 0) {
s.append(str[i]);
} else {
s.append("+" + str[i]);
}
}
} else {
s.append(keyWord);
}
s.append("&city=" + city);
s.append("offset=10&page=1");
String around = sendPost("http://restapi.amap.com/v3/place/text", s.toString());
// logger.info(around);
return around;
}
/**
* 高德api 经纬度/关键字 附近地标建筑及地点查询
*
* @param log
* @param lat
* @param keyWord
* @return
*/
public static String getAroundAddByLbs(String log, String lat, String keyWord) {
String around = sendPost("http://restapi.amap.com/v3/place/around",
"key=" + key + "&location=" + log + "," + lat + "&keywords=" + keyWord +
"&radius=2000&offset=10&page=1");
// logger.info(around);
return around;
}
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
// for (String key : map.keySet()) {
// logger.info(key + "--->" + map.get(key));
// }
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
// logger.info("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 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;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
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)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
// logger.info("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
/**
* GET请求数据
*
* @param get_url url地址
* @param content key=value形式
* @return 返回结果
* @throws Exception
*/
public static String sendGetData(String get_url, String content) throws Exception {
String result = "";
URL getUrl = null;
BufferedReader reader = null;
String lines = "";
HttpURLConnection connection = null;
try {
if (content != null && !content.equals(""))
get_url = get_url + "?" + content;
// get_url = get_url + "?" + URLEncoder.encode(content, "utf-8");
getUrl = new URL(get_url);
connection = (HttpURLConnection) getUrl.openConnection();
connection.connect();
// 取得输入流,并使用Reader读取
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码
while ((lines = reader.readLine()) != null) {
result = result + lines;
}
return result;
} catch (Exception e) {
throw e;
} finally {
if (reader != null) {
reader.close();
reader = null;
}
connection.disconnect();
}
}
/**
* @param POST_URL url地址
* @param content key=value形式
* @return 返回结果
* @throws Exception
*/
public static String sendPostData(String POST_URL, String content) throws Exception {
HttpURLConnection connection = null;
DataOutputStream out = null;
BufferedReader reader = null;
String line = "";
String result = "";
try {
URL postUrl = new URL(POST_URL);
connection = (HttpURLConnection) postUrl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
// Post 请求不能使用缓存
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.connect();
out = new DataOutputStream(connection.getOutputStream());
// content = URLEncoder.encode(content, "utf-8");
// DataOutputStream.writeBytes将字符串中的16位的unicode字符�?8位的字符形式写道流里�?
out.writeBytes(content);
out.flush();
out.close();
// 获取结果
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码
while ((line = reader.readLine()) != null) {
result = result + line;
}
return result;
} catch (Exception e) {
throw e;
} finally {
if (out != null) {
out.close();
out = null;
}
if (reader != null) {
reader.close();
reader = null;
}
connection.disconnect();
}
}
/*
* 过滤掉html里不安全的标签,不允许用户输入这些标�?
*/
public static String htmlFilter(String inputString) {
// return inputString;
String htmlStr = inputString; // 含html标签的字符串
String textStr = "";
java.util.regex.Pattern p_script;
java.util.regex.Matcher m_script;
try {
String regEx_script = "<[\\s]*?(script|style)[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?(script|style)[\\s]*?>";
String regEx_onevent = "on[^\\s]+=\\s*";
String regEx_hrefjs = "href=javascript:";
String regEx_iframe = "<[\\s]*?(iframe|frameset)[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?(iframe|frameset)" +
"[\\s]*?>";
String regEx_link = "<[\\s]*?link[^>]*?/>";
htmlStr = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE).matcher(htmlStr).replaceAll("");
htmlStr = Pattern.compile(regEx_onevent, Pattern.CASE_INSENSITIVE).matcher(htmlStr).replaceAll("");
htmlStr = Pattern.compile(regEx_hrefjs, Pattern.CASE_INSENSITIVE).matcher(htmlStr).replaceAll("");
htmlStr = Pattern.compile(regEx_iframe, Pattern.CASE_INSENSITIVE).matcher(htmlStr).replaceAll("");
htmlStr = Pattern.compile(regEx_link, Pattern.CASE_INSENSITIVE).matcher(htmlStr).replaceAll("");
textStr = htmlStr;
} catch (Exception e) {
System.err.println("Html2Text: " + e.getMessage());
}
return textStr;
}
/**
* 高德api 根据地址获取经纬度 国 省 市 区
*
* @param name
* @return
*/
public static Map<String, String> getEntire(String name) {
StringBuffer s = new StringBuffer();
s.append("key=" + key + "&address=" + name);
String res = sendPost("http://restapi.amap.com/v3/geocode/geo", s.toString());
// logger.info(res);
// System.out.println("res ==> " + res);
JSONObject jsonObject = JSONObject.fromObject(res);
JSONArray jsonArray = JSONArray.fromObject(jsonObject.getString("geocodes"));
JSONObject location = (JSONObject) jsonArray.get(0);
Map<String, String> map = new HashMap<>();
String add = location.get("location").toString();
map.put("location", add);
map.put("country", location.get("country").toString());
map.put("province", location.get("province").toString());
map.put("city", location.get("city").toString());
map.put("district", location.get("district").toString());
// System.out.println("map ==> " + map.toString());
return map;
}
/**
* 高德两点之间的距离
* @param startLonLat 开始地点经纬度
* @param endLonLat 结束地点
* @param type type=0 直线距离 type=1 驾车导航距离 当为1时会考虑路况,故在不同时间请求返回结果可能不同。
*
* 此策略和驾车路径规划接口的 strategy=4策略基本一致,策略为“ 躲避拥堵的路线,但是可能会存在绕路的情况,耗时可能较长 ”
* @return 返回米
*/
public static Long getDistance(String startLonLat, String endLonLat, int type){
//返回起始地startAddr与目的地endAddr之间的距离,单位:米
Long result = new Long(0);
String queryUrl = "http://restapi.amap.com/v3/distance?key="+key+"&origins="+startLonLat+"&destination="+endLonLat+"&type="+type;
String queryResult = getResponse(queryUrl);
JSONObject jo = new JSONObject().fromObject(queryResult);
JSONArray ja = jo.getJSONArray("results");
result = Long.parseLong(new JSONObject().fromObject(ja.getString(0)).get("distance").toString());
return result;
// return queryResult;
}
public static String getResponse(String serverUrl){
//用JAVA发起http请求,并返回json格式的结果
StringBuffer result = new StringBuffer();
try {
URL url = new URL(serverUrl);
URLConnection conn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = in.readLine()) != null){
result.append(line);
}
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result.toString();
}
/* public static void main(String[] arg){
//Map<String,String> addresss = getEntire("地址");
*//* String andLogByName = getLatAndLogByName("地址");
System.out.println(andLogByName);*//*
System.out.println(getDistance(getLatAndLogByName("地址"),getLatAndLogByName("地址"),0));
System.out.println(getDistance(getLatAndLogByName("地址"),getLatAndLogByName("地址"),1));
}*/
}
MapUtil ==》 高德
发布于 2019-06-26 966 次阅读
叨叨几句... NOTHING