两个地址之间的距离测量(使用高德API)

4 篇文章 0 订阅

首先:

  1. 通过高德开放者平台http://lbs.amap.com/,注册一个开发者账号,获得一个KEY(调用接口时需要使用该KEY)
    注册完成后如下图,在我的应用里面创建,key的名称自己取,key值自动生成
    key的名称自己取,key值自动生成
  2. 阅读高德web 服务API接口的文档高德API接口文档概述
    距离测量在 高德API路径规划
    https://lbs.amap.com/api/webservice/guide/api/direction
    在这里插入图片描述

然后: 贴代码吧

这里有直接通过经纬度获取距离的
也有输入一个地址获取距离的

请求参数里面有一个type(API接口里有介绍)
0:直线距离
1:驾车导航距离(仅支持国内坐标)。
必须指出,当为1时会考虑路况,故在不同时间请求返回结果可能不同。
此策略和驾车路径规划接口的 strategy=4策略基本一致,策略为“ 躲避拥堵的路线,但是可能会存在绕路的情况,耗时可能较长 ”
若需要实现高德地图客户端效果,可以考虑使用驾车路径规划接口
3:步行规划距离(仅支持5km之间的距离)

这里采用的是type=1,即驾车导航距离

import com.google.gson.Gson;
import net.sf.json.JSONArray;
import net.sf.json.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;
import java.util.List;
import java.util.Map;

public class NewGetDistance {

    private static final String key = "你申请的key";

    public static void main(String[] args){
        //111111根据经纬度查询距离的
        //注意:高德最多取小数点后六位  //格式: 经度,纬度
        String origin = "108.960747"+","+"34.266451";//陕西省西安市新城区
        String destination = "117.150738"+","+"39.138203";//天津市南开区
        String distance = distance(origin, destination);
        System.out.println(distance);

        //222222根据地址查询距离的
        String start = "陕西省西安市新城区";
        String end = "天津市南开区";
        String startLonLat = getLonLat(start);//获取到开始地址的经纬度
        String endLonLat = getLonLat(end);//获取到达地址的经纬度
        String distan = distance(startLonLat,endLonLat);
        System.out.println(distan);
    }

    /**
     * 高德地图WebAPI : 行驶距离测量
     */
    public static String distance(String origins,String destination) {
        int type = 1;//type=1,即驾车导航距离

        String url = "http://restapi.amap.com/v3/distance?"
                + "origins="+origins
                +"&destination="+destination
                +"&type="+type
                +"&key="+ key;
        //这里用的Gson,也可以用下面的JSON,都试了一下
        Gson gson = new Gson();
        Map map = new Gson().fromJson(getLoadJson(url),Map.class);
        List list=(List)map.get("results");
        Map<String,String> map1 = (Map) list.get(0);
        String distance = map1.get("distance");
        System.out.println(distance);

//        JSONObject jsonobject = JSONObject.fromObject(loadJson(url));
//        System.out.println(jsonobject.toString());
//        JSONArray resultsArray = jsonobject.getJSONArray("results");
//        JSONObject distanceObject = resultsArray.getJSONObject(0);
//        String resdistance = distanceObject.getString("distance");
        return distance;
    }

    /**
     * Java http 请求  获取结果
     */
    public static String getLoadJson (String url) {
        StringBuilder json = new StringBuilder();
        try {
            //下面那条URL请求返回结果无中文,可不转换编码格式
            URL urlObject = new URL(url);
            URLConnection uc = urlObject.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
            String inputLine = null;
            while ( (inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            in.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return json.toString();
    }

    /**
     * 根据给的地址获得经纬度信息
     * @param address
     * @return
     */
    private static String getLonLat(String address){
        //返回输入地址address的经纬度信息, 格式是 经度,纬度
        String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key="+key+"&address="+address;
        String queryResult = getLoadJson(queryUrl);  //高德接口返回的是JSON格式的字符串
        
		//这里也可以用Gson接
		//JSONObject是Map,可以通过key访问值
		//JSONArray是List,可以通过索引访问值
        JSONObject jo = new JSONObject().fromObject(queryResult);
        JSONArray ja = jo.getJSONArray("geocodes");
        return new JSONObject().fromObject(ja.getString(0)).get("location").toString();
    }
}

注意:这里的
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
这两个包的依赖,注意版本号

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

Gson还是很好用的,Gson对象有toJson和fromJson两个方法,toJson是对象转字符串,fromJson是字符串转对象。附上Gson的使用

记录自己写的过程

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值