调用百度地图API确定地址的经纬度,根据地址的经纬度查找中文地址

来源:互联网 发布:靠谱韩国代购淘宝店 编辑:程序博客网 时间:2024/05/01 16:40
package baiduapi;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


import net.sf.json.JSONObject;
public class BaiDuApiTest {

private static final String BAIDU_APP_KEY = "你的ak";
/**
* 输入中文地址 lng(经度),lat(纬度)
*/
public static Map<String, Double> getLatitude(String address) {
String res;
try {
// 将地址转换成utf-8的16进制
address = URLEncoder.encode(address, "UTF-8");

URL resjson = new URL("http://api.map.baidu.com/geocoder/v2/?callback=renderOption&output=json&address="+address+"&ak="+ BAIDU_APP_KEY);
BufferedReader in = new BufferedReader(new InputStreamReader(
resjson.openStream()));

StringBuilder sb = new StringBuilder("");
while ((res = in.readLine()) != null) {
sb.append(res.trim());
}
in.close();
String str = sb.toString();
if(str!=null&&!str.equals("")){
Map<String, Double> map = null;
String subStr = str.substring(str.indexOf('(')+1, str.indexOf("})")+1);
//字符串转成json格式
JSONObject jsonObj = JSONObject.fromObject(subStr);
//获取经度
double lng=(double) jsonObj.getJSONObject("result").getJSONObject("location").get("lng");
//获取纬度
double lat=(double) jsonObj.getJSONObject("result").getJSONObject("location").get("lat");

map = new HashMap<String, Double>();
map.put("lng", lng);
map.put("lat", lat);
//返回经纬度
return map;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/*
* 输入地址的经纬度坐标 key lng(经度),lat(纬度),返回中文地址
*/
public static String getAddress(Map<String, Double> map){
String res;
String address=null ;
try {
URL resjson = new URL("http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location="+map.get("lat")+","+map.get("lng")+"&output=json&pois=1&ak="+BAIDU_APP_KEY);

BufferedReader in = new BufferedReader(new InputStreamReader(
resjson.openStream()));
StringBuilder sb = new StringBuilder("");
while ((res = in.readLine()) != null) {
sb.append(res.trim());
}
in.close();
String str = sb.toString();
String subStr = str.substring(str.indexOf('(')+1, str.indexOf("})")+1);
JSONObject jsonObj = JSONObject.fromObject(subStr);
//获取匹配到的中文地址
       address=(String) jsonObj.getJSONObject("result").get("formatted_address");
       
} catch (Exception e) {
e.printStackTrace();
}
return address;
}
public static void main(String args[]) {
 

Map<String, Double> map = BaiDuApiTest.getLatitude("福建省福州市仓山区福建农林大学");

//输出地址所对应的经纬度

if (null != map) {
System.out.print("福建省福州市闽侯县福州大学:");
System.out.print("经度"+map.get("lng"));
System.out.print(",纬度"+map.get("lat"));
System.out.println();

}

               //输出经纬度对应的中文地址

System.out.println("经度"+map.get("lng")+",纬度"+map.get("lat")+"  对应的中文地址是:"+BaiDuApiTest.getAddress(map));

}
}
阅读全文
0 0
原创粉丝点击