package com.fr.tx.common.util;

import it.sauronsoftware.base64.Base64;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;

import net.sf.json.JSONObject;

public class LatitudeUtil {
	
private static final String URL_B_1 = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=";
	
	private static final String URL_B_2 = "+&y=";
	
	private static final String URL_B_3 = "&callback=BMap.Convertor.cbk_7594";

	public static double convertData(String data) {

		BigDecimal bd = new BigDecimal(data);
		BigDecimal zz = bd.setScale(0, BigDecimal.ROUND_HALF_UP);
		BigDecimal du = zz.divideToIntegralValue(new BigDecimal(100));
		BigDecimal fen = zz.divideAndRemainder(new BigDecimal(100))[1];
		BigDecimal miao = bd.subtract(zz).multiply(new BigDecimal(60));

		BigDecimal newlatlng = du.add(
				new BigDecimal(fen.doubleValue() / 60).setScale(7,
						BigDecimal.ROUND_HALF_UP)).add(
				new BigDecimal(miao.doubleValue() / 3600).setScale(7,
						BigDecimal.ROUND_HALF_UP));
		newlatlng = newlatlng.setScale(7, BigDecimal.ROUND_HALF_UP);

		return newlatlng.doubleValue();
	}

	public static void main(String[] args) {
		convertGpsToBd("12019.12240", "3154.29846");
	}
	
	/**
	 * 
	 * @param longitude
	 * @param latiude
	 * @return
	 */
	public static String[] convertGpsToBd(String longitude, String latiude) {
		
		String[] ret = new String[]{"", ""};
		// 经度
		double x = convertData(longitude);
		// 纬度
		double y = convertData(latiude);
		System.out.println(x);
		System.out.println(y);
		//
		// double x = 116.397428;
		// double y = 39.90923;
		// google 坐标转百度链接
		// //http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=116.32715863448607&y=39.990912172420714&callback=BMap.Convertor.cbk_3694
		// gps坐标的type=0
		// google坐标的type=2
		// baidu坐标的type=4
		String path = URL_B_1
				+ x + URL_B_2 + y + URL_B_3;
		try {
			// 使用http请求获取转换结果
			URL url = new URL(path);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(5 * 1000);
			InputStream inStream = conn.getInputStream();

			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = inStream.read(buffer)) != -1) {
				outStream.write(buffer, 0, len);
			}
			// 得到返回的结果
			String res = outStream.toString();
			
			// 处理结果
			if (res.indexOf("(") > 0 && res.indexOf(")") > 0) {
				String str = res.substring(res.indexOf("(") + 1,
						res.indexOf(")"));
				String err = res.substring(res.indexOf("error") + 7,
						res.indexOf("error") + 8);
				if ("0".equals(err)) {
					JSONObject js = JSONObject.fromObject(str);
					// 编码转换
					String x1 = new String(Base64.decode(js.getString("x")));
					String y1 = new String(Base64.decode(js.getString("y")));
					System.out.println(x1+"|"+y1);
					ret = new String[]{x1, y1};
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return ret;
	}
	
//	private static final String URL_B_1 = "http://api.map.baidu.com/geoconv/v1/?";
//	
//	private static final String URL_B_2 = "coords=";
//	
//	private static final String URL_B_3 = "&ak=CG8eakl6UTlEb1OakeWYvofh&from=1&to=5";
//
//	public static double convertData(String data) {
//
//		BigDecimal bd = new BigDecimal(data);
//		BigDecimal zz = bd.setScale(0, BigDecimal.ROUND_HALF_UP);
//		BigDecimal du = zz.divideToIntegralValue(new BigDecimal(100));
//		BigDecimal fen = zz.divideAndRemainder(new BigDecimal(100))[1];
//		BigDecimal miao = bd.subtract(zz).multiply(new BigDecimal(60));
//		BigDecimal newlatlng = du.add(
//				new BigDecimal(fen.doubleValue() / 60).setScale(7,
//						BigDecimal.ROUND_HALF_UP)).add(
//				new BigDecimal(miao.doubleValue() / 3600).setScale(7,
//						BigDecimal.ROUND_HALF_UP));
//		newlatlng = newlatlng.setScale(7, BigDecimal.ROUND_HALF_UP);
//
//		return newlatlng.doubleValue();
//	}
//
//	public static void main(String[] args) {
//		convertGpsToBd("12019.12240", "3154.29846");
//	}
//	
//	/**
//	 * 
//	 * @param longitude
//	 * @param latiude
//	 * @return
//	 */
//	public static String[] convertGpsToBd(String longitude, String latiude) {
//		
//		String[] ret = new String[]{"", ""};
//		// 经度
//		double x = convertData(longitude);
//		// 纬度
//		double y = convertData(latiude);
//		System.out.println(x);
//		System.out.println(y);
//		//
//		// double x = 116.397428;
//		// double y = 39.90923;
//		// google 坐标转百度链接
//		// //http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=116.32715863448607&y=39.990912172420714&callback=BMap.Convertor.cbk_3694
//		// gps坐标的type=0
//		// google坐标的type=2
//		// baidu坐标的type=4
//		String path = URL_B_1
//				+ URL_B_2 + x + "," + y + URL_B_3;
//		System.out.println();
//		System.out.println(path + "-----------------------------------------");
//		try {
//			// 使用http请求获取转换结果
//			URL url = new URL(path);
//			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//			conn.setRequestMethod("GET");
//			conn.setConnectTimeout(5 * 1000);
//			InputStream inStream = conn.getInputStream();
//
//			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//			byte[] buffer = new byte[1024];
//			int len = 0;
//			while ((len = inStream.read(buffer)) != -1) {
//				outStream.write(buffer, 0, len);
//			}
//			// 得到返回的结果
//			String res = outStream.toString();
//			// 处理结果
//			System.out.println(res + "-----------------------------------------");
//			if (res.indexOf("(") > 0 && res.indexOf(")") > 0) {
//				String str = res.substring(res.indexOf("(") + 1,
//						res.indexOf(")"));
//				String err = res.substring(res.indexOf("error") + 7,
//						res.indexOf("error") + 8);
//				if ("0".equals(err)) {
//					JSONObject js = JSONObject.fromObject(str);
//					// 编码转换
//					String x1 = new String(Base64.decode(js.getString("x")));
//					String y1 = new String(Base64.decode(js.getString("y")));
//					
//					ret = new String[]{x1, y1};
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//
//		return ret;
//	}

}
