百度地图根据经纬度取得具体的一个地址

来源:互联网 发布:淘宝给差评会怎么样 编辑:程序博客网 时间:2024/04/20 00:48

1.需要调用百度到的接口,所以需要http的post或者get请求支持,我在网上找到一个util

package com.baidu.adrress;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class HttpUtil {// 连接超时时间private static final int CONNECTION_TIMEOUT = 3000;// 读取超时时间private static final int READ_TIMEOUT = 5000;// 参数编码private static final String ENCODE_CHARSET = "utf-8";/** * 发送HTTP_POST请求 *  * @see 本方法默认的连接和读取超时均为30秒 * @param reqURL请求地址 * @param params发送到远程主机的正文数据[a:1,b:2] * @return String */public static String postRequest(String reqURL, String... params) {StringBuilder resultData = new StringBuilder();URL url = null;try {url = new URL(reqURL);} catch (MalformedURLException e) {e.printStackTrace();}HttpURLConnection urlConn = null;InputStreamReader in = null;BufferedReader buffer = null;String inputLine = null;DataOutputStream out = null;if (url != null) {try {urlConn = (HttpURLConnection) url.openConnection();urlConn.setDoInput(true);// 设置输入流采用字节流urlConn.setDoOutput(true);// 设置输出流采用字节流urlConn.setRequestMethod("POST");urlConn.setUseCaches(false); // POST请求不能使用缓存urlConn.setInstanceFollowRedirects(true);urlConn.setConnectTimeout(CONNECTION_TIMEOUT);// 设置连接超时urlConn.setReadTimeout(READ_TIMEOUT); // 设置读取超时// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");urlConn.setRequestProperty("Charset", ENCODE_CHARSET);//String param = sendPostParams(params);urlConn.setRequestProperty("Content-Length",param.getBytes().length + "");//// urlConn.setRequestProperty("Connection", "Keep-Alive");// //设置长连接urlConn.connect();// 连接服务器发送消息if (!"".equals(param)) {out = new DataOutputStream(urlConn.getOutputStream());// 将要上传的内容写入流中out.writeBytes(param);// 刷新、关闭out.flush();out.close();}in = new InputStreamReader(urlConn.getInputStream(),HttpUtil.ENCODE_CHARSET);buffer = new BufferedReader(in);if (urlConn.getResponseCode() == 200) {while ((inputLine = buffer.readLine()) != null) {resultData.append(inputLine);}}} catch (IOException e) {e.printStackTrace();} finally {try {if (buffer != null) {buffer.close();}if (in != null) {in.close();}if (urlConn != null) {urlConn.disconnect();}} catch (IOException e) {e.printStackTrace();}}}return resultData.toString();}/** * 发送HTTP_GET请求 *  * @see 本方法默认的连接和读取超时均为30秒 * @param httpUrl请求地址 * @param map发送到远程主机的正文数据[a:1,b:2] * @return String */public static String getRequest(String httpUrl, String... params) {StringBuilder resultData = new StringBuilder();URL url = null;try {String paramurl = sendGetParams(httpUrl, params);url = new URL(paramurl);} catch (MalformedURLException e) {e.printStackTrace();}HttpURLConnection urlConn = null;InputStreamReader in = null;BufferedReader buffer = null;String inputLine = null;if (url != null) {try {urlConn = (HttpURLConnection) url.openConnection();urlConn.setRequestMethod("GET");urlConn.setConnectTimeout(CONNECTION_TIMEOUT);in = new InputStreamReader(urlConn.getInputStream(),HttpUtil.ENCODE_CHARSET);buffer = new BufferedReader(in);if (urlConn.getResponseCode() == 200) {while ((inputLine = buffer.readLine()) != null) {resultData.append(inputLine);}}} catch (IOException e) {e.printStackTrace();} finally {try {if (buffer != null) {buffer.close();}if (in != null) {in.close();}if (urlConn != null) {urlConn.disconnect();}} catch (IOException e) {e.printStackTrace();}}}return resultData.toString();}/** * Post追加参数 *  * @see <code>params</code> * @param reqURL请求地址 * @param params发送到远程主机的正文数据[a:1,b:2] * @return */private static String sendPostParams(String... params) {StringBuilder sbd = new StringBuilder("");if (params != null && params.length > 0) {for (int i = 0; i < params.length; i++) {String[] temp = params[i].split(":");sbd.append(temp[0]);sbd.append("=");sbd.append(urlEncode(temp[1]));sbd.append("&");}sbd.setLength(sbd.length() - 1);// 删掉最后一个}return sbd.toString();}/** * Get追加参数 *  * @see <code>params</code> * @param reqURL 请求地址 * @param params发送到远程主机的正文数据[a:1,b:2] * @return */private static String sendGetParams(String reqURL, String... params) {StringBuilder sbd = new StringBuilder(reqURL);if (params != null && params.length > 0) {if (isexist(reqURL, "?")) {// 存在?sbd.append("&");} else {sbd.append("?");}for (int i = 0; i < params.length; i++) {String[] temp = params[i].split(":");sbd.append(temp[0]);sbd.append("=");sbd.append(urlEncode(temp[1]));sbd.append("&");}sbd.setLength(sbd.length() - 1);// 删掉最后一个}return sbd.toString();}// 查找某个字符串是否存在private static boolean isexist(String str, String fstr) {return str.indexOf(fstr) == -1 ? false : true;}/** * 编码 * @param source * @return */private static String urlEncode(String source) {String result = source;try {result = java.net.URLEncoder.encode(source, HttpUtil.ENCODE_CHARSET);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}}
2.调用百度接口然后返回的是json的字符串,拆分字符串,得到自己想要的东西

package com.baidu.adrress;import com.alibaba.fastjson.JSONObject;import com.baidu.adrress.HttpUtil;public class BaiduUtil {public static String getCity(String lat, String lng) {JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result").getJSONObject("addressComponent");return obj.getString("city");}public static JSONObject getLocationInfo(String lat, String lng) {String url = "http://api.map.baidu.com/geocoder/v2/?location=" + lat+ "," + lng+ "&output=json&ak=你的密钥&pois=0";JSONObject obj = JSONObject.parseObject(HttpUtil.getRequest(url));System.out.println("\n"+"经纬度查询地址为:" + url);System.out.println("\n"+"经纬度坐标返回结果为:" + obj.toString());return obj;}public static String getAddress(String lng, String lat) {  //lng经度,lat纬度JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result");StringBuilder address = new StringBuilder();String province = obj.getJSONObject("addressComponent").getString("province");String city = obj.getJSONObject("addressComponent").getString("city");if (province != null && city != null && province.equals(city)) { //直辖市的省份名称和城市名称一样,判断重复时去掉address.append(obj.getJSONObject("addressComponent").getString("city")).append(obj.getJSONObject("addressComponent").getString("district")).append(obj.getJSONObject("addressComponent").getString("street")).append(obj.getString("sematic_description"));} else {address.append(obj.getJSONObject("addressComponent").getString("province")).append(obj.getJSONObject("addressComponent").getString("city")).append(obj.getJSONObject("addressComponent").getString("district")).append(obj.getJSONObject("addressComponent").getString("street")).append(obj.getString("sematic_description"));}return address.toString();}public static void main(String[] args) {System.out.println("\n"+"经纬度具体地址为:"+ BaiduUtil.getAddress("116.48843","39.994614"));}}


依照你想得到的数据,自己拆分json,坐标可以用百度的拾取坐标系统去取(http://api.map.baidu.com/lbsapi/getpoint/index.html)


1 0
原创粉丝点击