这里需要保证传递过来的地址是实际存在的地址;最好单独写个方法提前验证下
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /** * 获取经纬度 * 密钥:这里的密钥是在baidu的后台申请的服务端的key * @author only-dream */ public class GetLatAndLngByBaidu { /** * @param addr * 查询的地址 * @return * @throws IOException */ public Object[] getCoordinate(String addr) throws IOException { String lng = null;// 经度 String lat = null;// 纬度 String address = null; try { address = java.net.URLEncoder.encode(addr, "UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } String key = "你的密钥"; String url = String.format("http://api.map.baidu.com/geocoder?address=%s&output=json&key=%s", address, key); URL myURL = null; URLConnection httpsConn = null; try { myURL = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } InputStreamReader insr = null; BufferedReader br = null; try { httpsConn = (URLConnection) myURL.openConnection();// 不使用代理 if (httpsConn != null) { insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8"); br = new BufferedReader(insr); String data = null; int count = 1; while ((data = br.readLine()) != null && (!data.equals("INVALID_PARAMETERS")) ) { if (count == 5) { lng = (String) data.subSequence(data.indexOf(":") + 1, data.indexOf(","));// 经度 count++; } else if (count == 6) { lat = data.substring(data.indexOf(":") + 1);// 纬度 count++; } else { count++; } } } } catch (IOException e) { e.printStackTrace(); } finally { if (insr != null) { insr.close(); } if (br != null) { br.close(); } } return new Object[] { lng, lat }; } public static void main(String[] args) throws IOException { GetLatAndLngByBaidu getLatAndLngByBaidu = new GetLatAndLngByBaidu(); Object[] o = getLatAndLngByBaidu.getCoordinate("河北省衡水市桃城区赵家圈镇衡海防爆电器有限公司"); System.out.println(o[0]);// 经度 System.out.println(o[1]);// 纬度 } }
/*换个写法*/ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.text.DecimalFormat; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; /** * @ClassName: EntCoordSyncJob * @Description: TODO(这里用一句话描述这个类的作用) * */ public class baidudituController { static String AK = "你的密钥"; // 百度地图密钥 public static void main(String[] args) { String dom = "北京王府井"; String coordinate = getCoordinate(dom); System.out.println("'" + dom + "'的经纬度为:" + coordinate); // System.err.println("######同步坐标已达到日配额6000限制,请明天再试!#####"); } // 调用百度地图API根据地址,获取坐标 public static String getCoordinate(String address) { if (address != null && !"".equals(address)) { address = address.replaceAll("\s*", "").replace("#", "栋"); String url = "http://api.map.baidu.com/geocoder/v2/?address=" + address + "&output=json&ak=" + AK; String json = loadJSON(url); if (json != null && !"".equals(json)) { // JSONObject obj = JSONObject.fromObject(json); JSONObject obj = JSON.parseObject(json); if ("0".equals(obj.getString("status"))) { double lng = obj.getJSONObject("result").getJSONObject("location").getDouble("lng"); // 经度 double lat = obj.getJSONObject("result").getJSONObject("location").getDouble("lat"); // 纬度 DecimalFormat df = new DecimalFormat("#.######"); return df.format(lng) + "," + df.format(lat); } } } return null; } public static String loadJSON(String url) { StringBuilder json = new StringBuilder(); try { URL oracle = new URL(url); URLConnection yc = oracle.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8")); String inputLine = null; while ((inputLine = in.readLine()) != null) { json.append(inputLine); } in.close(); } catch (MalformedURLException e) { } catch (IOException e) { } return json.toString(); } }