|
1.高德地图获取两个点的行车距离并计算俩个点之间车费是多少
1)需要去高德申请key值
2)根据位置获取经纬度,需要省市区详细地址
3)根据获取到的经纬度获取两个点之间的距离
4)计算俩个点之间的车费
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class GetDistance {
//高德地图 key
private static final String KEY = "申请的key值";
public static void main(String[] args){
String start = "";
String end = "";
String startLonLat = getLonLat(start);
String endLonLat = getLonLat(end);
System.out.println(startLonLat);
System.out.println(endLonLat);
Double dis = getDistance(startLonLat,endLonLat);
System.out.println(dis);
System.out.println(Transportfare(dis));
}
/**
* 根据地址 转换经纬度
* @param address
* @return
*/
public static String getLonLat(String address){
//返回输入地址address的经纬度信息, 格式是 经度,纬度
String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key="+KEY+"&address="+address;
String queryResult = getResponse(queryUrl); //高德接品返回的是JSON格式的字符串
JSONObject jo = JSONObject.fromObject(queryResult);
JSONArray ja = jo.getJSONArray("geocodes");
return JSONObject.fromObject(ja.getString(0)).get("location").toString();
}
/**
* 高德地图 距离测量
* @param startLonLat
* @param endLonLat
* @return
*/
public static Double getDistance(String startLonLat, String endLonLat){
//返回起始地startAddr与目的地endAddr之间的距离,单位:米
Double result = new Double(0);
String queryUrl = "http://restapi.amap.com/v3/distance?key="+KEY+"&origins="+startLonLat+"&destination="+endLonLat;
String queryResult = getResponse(queryUrl);
JSONObject jo = JSONObject.fromObject(queryResult);
JSONArray ja = jo.getJSONArray("results");
//获取距离 /米
Long distance = Long.parseLong(JSONObject.fromObject(ja.getString(0)).get("distance").toString());
//距离转换 /千米
result = Double.parseDouble(String.format("%.2f", (distance.doubleValue() / 1000)));
System.out.println("公里数:"+result);
return result;
}
/**
* 计算交通费
* @param distance 距离
* @return
*/
public static Double Transportfare(Double distance){
Double charge = new Double(0);
//计算交通费
if(distance != 0) {
if (distance > 3) {
BigDecimal initialFee = new BigDecimal(distance).subtract(new BigDecimal(3)).multiply(new BigDecimal(1.9));//三公里外总价钱
System.out.println("initialFee = " + initialFee);
BigDecimal cost = new BigDecimal(9).add(new BigDecimal(String.valueOf(initialFee)));
System.out.println("cost = " + cost);
charge = Double.parseDouble(String.format("%.2f", cost));
System.out.println("charge = " + charge);
} else {
charge = Double.parseDouble(String.format("%.2f", new BigDecimal(9)));
System.out.println("charge = " + charge);
}
}
return charge;
}
/**
* 解析数据
* @param serverUrl
* @return
*/
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();
}
} |
|