這里需要保證傳遞過來的地址是實際存在的地址;最好單獨寫個方法提前驗證下
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(); } }