package com.sinosoft.common;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.log4j.Logger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
/**
* Created by zhuxl on 2017/3/8.
*/
public class GeoUtils {
private static Logger logger=Logger.getLogger("根据经纬度计算:");
public static final String KEY="B3pm8MYFWyuYAPoNRdtaWwcOG8qWsGdV";//AK 根据百度地图申请 认证 给的ak 该AK 不对任何ip 限制 0.0.0.0/00
/**
* 计算两经纬度点之间的距离(单位:米)
* @param lng1 经度
* @param lat1 纬度
* @param lng2
* @param lat2
* @
* @return
*/
public static double getDistance(double lng1,double lat1,double lng2,double lat2){
double radLat1 = Math.toRadians(lat1);
double radLat2 = Math.toRadians(lat2);
double a = radLat1 - radLat2;
double b = Math.toRadians(lng1) - Math.toRadians(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1)
* Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
s = Math.round(s * 10000) / 10000;
logger.info("两个位置之间的距离是"+s+"米");
return s;
}
/**
*
* @param Lat 经度
* @param Long 纬度
* @des 根据经纬度得出来 具体的位置
* @ user zhuxl
* @return
*/
public static Map<String, String> LatlongPositon(String Lat,String Long){
//请求百度地图的ip地址
String url="http://api.map.baidu.com/geocoder/v2/?ak="+KEY+"&location="+Lat+","+Long+"&output=json&pois=0";
logger.info(url);
InputStream is = null;
try {
is = new URL(url).openStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
StringBuilder jsonText = new StringBuilder();
String len="";
while ((len = rd.readLine()) != null) {
jsonText.append(len);
}
JSONObject json= JSON.parseObject(jsonText.toString());
// JSON//Object json = JSONPObject.
logger.info("定位得出的参数=="+json);
String city="";//市
String country="";//国家
String province="";//省
String district="";//区
//当status =0 代表成功解析到地址
if (json!=null&&"0".equals(json.getString("status"))) {
JSONObject result=json.getJSONObject("result");//解析result
if (result!=null) {
JSONObject addressComponent=result.getJSONObject("addressComponent");
city=addressComponent.getString("city");
country=addressComponent.getString("country");
province=addressComponent.getString("province");
district=addressComponent.getString("district");
}
}
Map<String, String> resMap=new HashMap<String, String>();
resMap.put("city", city);
resMap.put("country", country);
resMap.put("province", province);
resMap.put("district", district);
logger.info(resMap);
return resMap;
}catch(Exception e){
e.printStackTrace();
return null;
} finally {
try {
if(is!=null)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args){
// //得出来两个地方的距离 根据经纬度
// logger.info(getDistance(121.446014,31.215937,121.446028464238,31.2158502442799 ));
LatlongPositon("22.284681", "114.158177");
}
}