java高德地图根据坐标与具体地址互转,计算两地距离

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
 * 高德地图根据地名获取经纬度,计算距离
 * 这个需要客户申请个高德API上面的key,也可以自己申请(免费的,很快)
 * */
public class GaodMap {

	//高德地图申请的key值
    public static final String MAP_KEY = "xxx";
    public static void main(String[] args){  
        String start = "北京天安门";  
        String end = "上海市黄浦区西藏中路";  
  
        String startLonLat = getLonLat(start);  
        String endLonLat = getLonLat(end);  
  
        System.out.println("起始地:"+start+",经纬度:"+startLonLat);  
        System.out.println("终点:"+end+",经纬度:"+endLonLat);  
 
        Long dis = getDistance(startLonLat,endLonLat);  
        System.out.println("两点间距离:"+dis+"米");  
    }
    /**
     * 0.得到两个地址间距离
     * */
    public static long getDistanceByAdress(String start,String end){  
        String startLonLat = getLonLat(start);  
        String endLonLat = getLonLat(end); 
        long dis = getDistance(startLonLat,endLonLat);
        return dis;
    }      
    
    /**
     * 1.地址转换为经纬度
     * */
    public static String getLonLat(String address){  
        //返回输入地址address的经纬度信息, 格式是 经度,纬度  
        String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key=&address="+address;  
        String queryResult = getResponse(queryUrl);  //高德接品返回的是JSON格式的字符串           
        JSONObject job = JSONObject.parseObject(queryResult);
        JSONObject jobJSON = JSONObject.parseObject(job.get("geocodes").toString().substring(1, job.get("geocodes").toString().length()-1));
        String DZ = jobJSON.get("location").toString();
        System.out.println("经纬度:"+DZ);
        return DZ;
    }  
    
	// 将经纬度getLng, getLat 通过getAmapByLngAndLat方法转换地址
	public static String getAmapByLngAndLat(String getLng, String getLat) throws Exception {
		String url;
		try {
			url = "http://restapi.amap.com/v3/geocode/regeo?output=JSON&location=" + getLng + "," + getLat
					+ "&key=MAP_KEY&radius=0&extensions=base";
			String queryResult = getResponse(url); // 高德接品返回的是JSON格式的字符串
			if (queryResult == null) {
				return "-1";
			}
			// 将获取结果转为json 数据
			JSONObject obj = JSONObject.parseObject(queryResult);
			if (obj.get("status").toString().equals("1")) {
//              如果没有返回-1

				JSONObject regeocode = obj.getJSONObject("regeocode");
				if (regeocode.size() > 0) {
					// 在regeocode中拿到 formatted_address 具体位置
					String formatted = regeocode.get("formatted_address").toString();
					return formatted;

				} else {
					System.out.println("未找到相匹配的地址!");
					return "-1";

				}
			} else {
				System.out.println("请求错误!");
				return "-1";
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "-1";
	}
  
    /**
     * 2.经纬度算出两点间距离
     * */
    public static long getDistance(String startLonLat, String endLonLat){  
        //返回起始地startAddr与目的地endAddr之间的距离,单位:米  
        Long result = new Long(0);  
        String queryUrl = "http://restapi.amap.com/v3/distance?key=MAP_KEY&origins="+startLonLat+"&destination="+endLonLat;  
        String queryResult = getResponse(queryUrl);  
        JSONObject job = JSONObject.parseObject(queryResult);
        JSONArray ja = job.getJSONArray("results");
        JSONObject jobO = JSONObject.parseObject(ja.getString(0));
        result = Long.parseLong(jobO.get("distance").toString());
        System.out.println("距离2:"+result);
        return result;  
    }  
  
    /**
     * 3.发送请求
     * */
    public static String getResponse(String serverUrl){  
        //用JAVA发起http请求,并返回json格式的结果  
        StringBuffer result = new StringBuffer();  
        try {  
            URL url = new URL(serverUrl);  
            URLConnection conn = url.openConnection();  
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));   
            String line;  
            while((line = in.readLine()) != null){  
                result.append(line);  
            }  
            in.close();  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return result.toString();  
    }
    

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值