调用高德的接口,地理位置和经纬度相互转换

来源:互联网 发布:qq象棋作弊软件 编辑:程序博客网 时间:2024/05/16 12:40

高德官方有详细的接口调用文档:http://lbs.amap.com/api/webservice/guide/api/georegeo

我是在java项目中使用,下面以地理位置得到经纬度来举例。

首先,你需要注册高德的账号,并且获取一个key:http://lbs.amap.com/dev/key/app;

public class AddressLngLatExchange {private static final String KEY = "0*******16d8db3a0e622fccca24f9";private static final String OUTPUT = "JSON";private static final String GET_LNG_LAT_URL = "http://restapi.amap.com/v3/geocode/geo";private static final Logger LOGGER = Logger.getLogger(AddressLngLatExchange.class);public static Pair getLngLatFromOneAddr(String address){if(StringUtils.isBlank(address)) {LOGGER.error("地址(" + address + ")为null或者空");return null;}Map params = new HashMap();    params.put("address", address);    params.put("output", OUTPUT);    params.put("key", KEY);    String result = HttpclientUtil.post(params, GET_LNG_LAT_URL);    Pair pair = null;    JSONObject jsonObject = JSONObject.fromObject(result);    //拿到返回报文的status值,高德的该接口返回值有两个:0-请求失败,1-请求成功;    int status = Integer.valueOf(jsonObject.getString("status"));    if(status == 1) {    JSONArray jsonArray = jsonObject.getJSONArray("geocodes");    for(int i = 0; i < jsonArray.size(); i++) {    JSONObject json = jsonArray.getJSONObject(i);    String lngLat = json.getString("location");    String[] lngLatArr = lngLat.split(",");    //经度    BigDecimal longitude = new BigDecimal(lngLatArr[0]);//    System.out.println("经度" + longitude);    //纬度    BigDecimal latitude = new BigDecimal(lngLatArr[1]);//    System.out.println("纬度" + latitude);    pair = new MutablePair(longitude, latitude);    }    } else {    String errorMsg = jsonObject.getString("info");    LOGGER.error("地址(" + address + ")" + errorMsg);    }    return pair;}

备注:1)此处用Pair类型返回值,只是个人偏好,这种返回方式无法返回高德的错误信息,不过在试验过程中,发现就算是胡乱写的地址,高德也会返回OK,只是经纬度为空,可能高德的错误信息指的是高德的程序异常,所以返回不OK的概率就比较小了,顾在此处仅记录在日志里。
2)HTTP的工具类可以在网上找,给一个参考的:http://lxy19791111.iteye.com/blog/341409
3)如有需要改进的地方,欢迎指正
阅读全文
1 0