package com.sf.auth.toolbox;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* @author lqy
* @des 高德地图工具类
*/
@Component
public class GouldUtil {
//在高德申请的应用Key
private static final String GOULD_KEY= PropertiesUtil.getProperty("gould.Key");
//申请的账户Key
/**
* 0.根据地址名称得到两个地址间的距离
* @param start 起始位置
* @param start 结束位置
* @return 两个地址间的距离
*/
public long getDistanceByAddress(String start, String end) {
String startLonLat = getLonLat(start);
String endLonLat = getLonLat(end);
long dis = getDistance(startLonLat, endLonLat);
return dis;
}
/**
* 1.地址转换为经纬度
* @param address 地址
* @return 经纬度
*/
public String getLonLat(String address) {
// 返回输入地址address的经纬度信息, 格式是 经度,纬度
String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key="+GOULD_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方法转换地址
* @param getLng 经度
* @param getLat 纬度
* @return 地址名称
* @throws Exception
*/
public 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="+GOULD_KEY+"&radius=0&extensions=base";
System.out.println(getLat
);
System.out.println(url);
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.根据两个定位点的经纬度算出两点间的距离
* @param startLonLat 起始经纬度
* @param endLonLat 结束经纬度(目标经纬度)
* @return 两个定位点之间的距离
*/
private long getDistance(String startLonLat, String endLonLat) {
// 返回起始地startAddr与目的地endAddr之间的距离,单位:米
Long result = new Long(0);
String queryUrl = "http://restapi.amap.com/v3/distance?key="+GOULD_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.发送请求
* @param serverUrl 请求地址
*/
private 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();
}
}
地图在java中的运用 java实现地图导航
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java实现diff java实现地图导航
目录实现内容问题分析算法的选择权值向量表的设计 Floyd权值向量表 多段图权值向量表三种要求下的算法设计(一)—— 站点少 &n
Java实现diff java 后端 程序设计 权值 -
java实现微信登录注册界面
实验三 登录与注册目录实验三 登录与注册一、实验目的 1.熟练使用JSP 指令和动作标签; 2.熟练使用request等内置对象。二、实验要求(一)基本要求:(二)扩展要求:三、一些需用的技术1、表单2、利用表单
java实现微信登录注册界面 前端 javaee web html