import java.util.LinkedList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
* 公共路线接口方法,计算实际距离。
*/
public class MapDistanceUtil {

private static final String HOSTARR = "http://restapi.amap.com/v3/geocode/regeo";
private static final String HOST = "https://restapi.amap.com/v3/distance";
// private static final String HOST = "http://122.114.79.163:7770/v3/distance";
private static final String KEY = "761e73b6188fb868feee5b558dcbcd7a";

/**
* 参数:(出发点数组、目的点) 格式:经度,纬度
* 返回: {
* "status": "1",
* "info": "OK",
* "infocode": "10000",
* "results": [{ //结果数组
* "origin_id": "1", //第一个起点
* "dest_id": "1", //目的地
* "distance": "261278", //距离(米)
* "duration": "14280" //预计时间(秒)
* }]
* }
*/
public static String mapDistanceMethod(String[] origins, String destination) {
String responseEntity = null;
for (int i = 0; i < 5 && responseEntity == null; i++) {
responseEntity = mapDistance(origins, destination);
}
return responseEntity;
}

public static String getLocationAddr(String location){
List<NameValuePair> list = new LinkedList<>();
list.add(new BasicNameValuePair("key", KEY));
list.add(new BasicNameValuePair("output", "JSON"));
list.add(new BasicNameValuePair("location", location));
String responseEntity = null;
String addr="";
try {
HttpGet httpGet = new HttpGet(new URIBuilder(HOSTARR).setParameters(list).build());
httpGet.setConfig(RequestConfig.custom().setConnectTimeout(2000).build());
HttpResponse response = HttpClients.createDefault().execute(httpGet);
responseEntity = EntityUtils.toString(response.getEntity(), "UTF-8");
JSONObject jsonObject=JSON.parseObject(responseEntity);
addr=jsonObject.getJSONObject("regeocode").getJSONObject("addressComponent")
.getJSONObject("building").getString("name");
if(addr.equals("[]")){
addr=jsonObject.getJSONObject("regeocode").getString("formatted_address");
if(addr.indexOf("省")>0){
addr=addr.substring(addr.indexOf("省")+1,addr.length());
}
if(addr.indexOf("市")>0){
addr=addr.substring(addr.indexOf("市")+1,addr.length());
}
}
//System.out.println("-------响应结果-------\n" + addr);
} catch (Exception e) {
if (e instanceof ConnectTimeoutException) {
System.out.println("-------请求超时-------");
} else {
e.printStackTrace();
}
}
return addr;
}

private static String mapDistance(String[] origins, String destination) {
StringBuilder originBuilder = new StringBuilder();
for (int i = 0; i < origins.length; i++) {
originBuilder.append(origins[i]);
if (i < origins.length - 1) {
originBuilder.append("|");
}
}
List<NameValuePair> list = new LinkedList<>();
list.add(new BasicNameValuePair("key", KEY));
list.add(new BasicNameValuePair("output", "JSON"));
list.add(new BasicNameValuePair("origins", originBuilder.toString()));
list.add(new BasicNameValuePair("destination", destination));
String responseEntity = null;
try {
HttpGet httpGet = new HttpGet(new URIBuilder(HOST).setParameters(list).build());
httpGet.setConfig(RequestConfig.custom().setConnectTimeout(2000).build());
HttpResponse response = HttpClients.createDefault().execute(httpGet);
responseEntity = EntityUtils.toString(response.getEntity(), "UTF-8");
//System.out.println("-------距离测量响应结果-------\n" + responseEntity);
} catch (Exception e) {
if (e instanceof ConnectTimeoutException) {
System.out.println("-------请求超时-------");
} else {
e.printStackTrace();
}
}
return responseEntity;
}

public static void main(String[] args) throws InterruptedException {
//getLocationAddr("113.242439,35.1863620");
System.out.println(getLocationAddr("113.242439,35.1863620"));
// String[] origins = new String[]{"116.481028,39.989643", "114.481028,39.989643", "115.481028,39.989643"};
// String destination = "114.465302,40.004717";
// for (int i = 0; i < 100; i++) {
// MapDistanceUtil.mapDistanceMethod(origins, destination);
// System.out.println("---------第" + i + "次请求");
// Thread.sleep(200);
// }
}
}

java后台高德经纬度转地理位置信息的更多相关文章

  1. 百度api:根据经纬度获取地理位置信息

    调用百度api,根据经度和纬度获取地理位置信息,返回Json. C#代码: using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Syste ...

  2. java根据GPS(经纬度)获取地理位置

    package cn.antiy.weiqing.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONAr ...

  3. Android 获取地理位置信息 封装好了 直接用

    前言:花了一个早上研究了以下android获取经纬度,然后网上的参考资料都是杂七杂八,基本上都是过去几年的,现在我用 android6.0参照别人的结果发生好多错误,我的内心几乎是崩溃的.后来,不断百 ...

  4. 项目源码--JAVA基于LBS地理位置信息应用的服务端

    技术要点: 1. LBS应用框架服务端实现 2. JAVA服务端技术 3. MYSQL数据库技术 4. 源码带详细的中文注释 ......   详细介绍: 1. LBS应用框架服务端实现 此套源码是基 ...

  5. java后台获取和js拼接展示信息

    java后台获取和js拼接展示信息: html页面代码: <div class="results-bd"> <table id="activityInf ...

  6. Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息

    本文主要介绍了Android项目集成百度地图API,使用AlarmManager定时调用Service,在Service中请求坐标更新,并通过坐标得到省.市和县三级地理位置信息的方法. 程序结构很简单 ...

  7. [微信开发] 微信JSAPI - 获取用户地理位置信息

    参考博客 http://blog.csdn.net/u013142781/article/details/50503299 主要JS 方法 wx.getLocation 获取地理位置信息传递参数 成功 ...

  8. 使用LocationManager来获取移动设备所在的地理位置信息

    在Android应用程序中,可以使用LocationManager来获取移动设备所在的地理位置信息.看如下实例:新建android应用程序TestLocation. 1.activity_main.x ...

  9. [转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息

    挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息 https://www.freebuf.com/vuls/202820.html 知识就是力量 5000刀的一个漏洞. ...

随机推荐

  1. JAVA中的字节流与字符流

    字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...

  2. Redis总结(三)Redis 的主从复制(转载)

    接着上一篇,前面两篇我总结了<Redis总结(一)Redis安装>和<Redis总结(二)C#中如何使用redis> 所以这一篇,会讲讲Redis 的主从复制以及C#中如何调用 ...

  3. http协议中各个响应状态200_301_404_500等返回值含义快速一览

    一.定义 从HTTP的定义可以看出,HTTP协议是互联网上进行数据通信的基础协议,用来交换或传输超文本.超文本是一种结构化的文本,在包含文本的节点之间使用逻辑链接(也叫超链接). 二.概述 HTTP是 ...

  4. 【android开发】使用PopupWindow实现页面点击顶部弹出下拉菜单

    没有太多花样,也没有很复杂的技术,就是简单的PopupWindow的使用,可以实现点击弹出一个自定义的view,view里可以随便设计,常用的可以放一个listview. demo中我只是一个点击展示 ...

  5. struts2 转发、重定向概述

    转发等参数传递的注解方式: @Action(value = "operatorRoleAction", results = { @Result(name = "view& ...

  6. TensorFlow 简单实例

    TF 手写体识别简单实例: TensorFlow很适合用来进行大规模的数值计算,其中也包括实现和训练深度神经网络模型.下面将介绍TensorFlow中模型的基本组成部分,同时将构建一个CNN模型来对M ...

  7. Javascript中的对象和原型(二)(转载)

    上一篇中提到了JavaScript中对象的创建的一些基本操作,接下来讨论下继续讨论. 一 工厂模式 我们知道,要创建一个对象我们可以用如下代码: var user = new Object(); // ...

  8. unity, 忽略碰撞

    一,layer之间忽略碰撞. Edit->Project Settings->Physics->Layer Collision Matrix 二,collider之间忽略碰撞. vo ...

  9. PHP部分常见算法

    撰于:http://blog.csdn.net/caleng/article/details/5276403

  10. atitit.报表最佳实践oae 与报表引擎选型

    atitit.报表最佳实践oae 与报表引擎选型 1. 报表的主要的功能and结构 2 1.1. 查询设计器(配置化,metadata in html) ,anno 2 1.2. 查询引擎 2 1.3 ...