=================================================

package com.qcar.benz.biz.common;

import com.alibaba.citrus.util.StringUtil;
import com.alibaba.fastjson.JSON;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry; /**
* 地图查询相关工具类
*/
public class GPSUtil { private final static String url = "http://api.map.baidu.com/geocoder/v2/"; private final static String ak = "1b7NAfBZKaHuGnRgtD6wfloL";
private final static String sk = "zsHUBnMvE4KHzSEuYrXV1Hb46HtuCTXq"; /**
* 依据经纬度仅仅获取所在省份
*
* @param location 【字符串类型,格式:"经度,纬度"】
* @return
*/
public static String getProvinceByGps(String location) {
String province = "";
Map map = getDetail(location);
if (!CollectionUtils.isEmpty(map)) {
if (!CollectionUtils.isEmpty((Map) map.get("addressComponent"))) {
Map am = (Map) map.get("addressComponent");
if (!CollectionUtils.isEmpty(am)) {
province = (String) am.get("province");
}
}
}
return province; } /**
* 依据经纬度得到具体信息
*
* @param location 【字符串类型,格式:"经度,纬度"】
* @return
*/
public static Map getDetail(String location) {
if (StringUtil.isBlank(location)) {
return null;
}
String[] arr = location.split(",");
if (arr.length != 2) {
return null;
}
Map map = new HashMap();
HttpClient client = new HttpClient();
try {
String wholeUrl = new String(url + "?ak=" + ak + "&location=" + arr[1] + "," + arr[0] + "&output=json");
GetMethod get = new GetMethod(wholeUrl);
if (client.executeMethod(get) == HttpServletResponse.SC_OK) {
String str = new String(get.getResponseBody(), "UTF-8");
Map m = (Map) JSON.parse(str);
map = (Map) m.get("result");
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
} /**
* 转换经纬度顺序
* @return
*/
public static String reverseLocation(Map map) {
if (null == map) {
return "";
}
Map location = (Map) map.get("location");
return location.get("lng").toString() + "," + location.get("lat").toString();
} /**
* 依据具体地址获取经纬度,
*
* @param address
* @return
*/
public static Map getLocation(String address) {
if (StringUtil.isBlank(address)) {
return null;
}
Map map = new HashMap();
try {
Map paramsMap = new LinkedHashMap<String, String>();
paramsMap.put("address", address);
paramsMap.put("output", "json");
paramsMap.put("ak", GPSUtil.ak);
// 调用以下的toQueryString方法。对LinkedHashMap内全部value作utf8编码,拼接返回结果address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourak
String paramsStr = toQueryString(paramsMap); // 对paramsStr前面拼接上/geocoder/v2/?,后面直接拼接yoursk得到/geocoder/v2/? address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourakyoursk
String wholeStr = new String(url + "?" + paramsStr); HttpClient client = new HttpClient();
GetMethod get = new GetMethod(wholeStr);
if (client.executeMethod(get) == HttpServletResponse.SC_OK) {
String str = new String(get.getResponseBody(), "UTF-8");
Map m = (Map) JSON.parse(str);
map = (Map) m.get("result");
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
} /**
* 对Map内全部value作utf8编码,拼接返回结果
*
* @param data
* @return
* @throws java.io.UnsupportedEncodingException
*/
public static String toQueryString(Map<? , ? > data)
throws UnsupportedEncodingException {
StringBuffer queryString = new StringBuffer();
for (Entry<? , ? > pair : data.entrySet()) {
queryString.append(pair.getKey() + "=");
queryString.append(URLEncoder.encode((String) pair.getValue(),
"UTF-8") + "&");
}
if (queryString.length() > 0) {
queryString.deleteCharAt(queryString.length() - 1);
}
return queryString.toString();
} /**
* 来自stackoverflow的MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制
*
* @param md5
* @return
*/
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest
.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100)
.substring(1, 3));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
}
return null;
} public static void main(String[] args) {
//依据位置获取经纬度
System.out.println("location-新加坡:" + GPSUtil.getLocation("新加坡"));
System.out.println("省份-新加坡:" + getProvinceByGps("105.96171430209,26.258323531902")); System.out.println("location-贵州:" + GPSUtil.getLocation("贵州"));
System.out.println("省份-贵州:" + getProvinceByGps("106.7349961033,26.902825927797")); System.out.println("location-日本:" + GPSUtil.getLocation("日本"));
System.out.println("省份-日本:" + getProvinceByGps("99.778748988728,32.798321975722"));
//======================以下为依据逆地理信息获取===================================================
//依据经纬度获取国家、省、市、街道等具体信息
// System.out.println("gps:" + GPSUtil.getDetail("120.15759598139,30.252902354484"));

//依据经纬度仅仅获取省份
System.out.println("location-内蒙古自治区:" + GPSUtil.getLocation("内蒙古自治区"));
System.out.println("省份:" + getProvinceByGps(reverseLocation(GPSUtil.getLocation("内蒙古自治区")))); System.out.println("location-新疆维吾尔自治区:" + GPSUtil.getLocation("新疆维吾尔自治区"));
System.out.println("省份:" + getProvinceByGps(reverseLocation(GPSUtil.getLocation("新疆维吾尔自治区")))); System.out.println("location-广西壮族自治区:" + GPSUtil.getLocation("广西壮族自治区"));
System.out.println("省份:" + getProvinceByGps(reverseLocation(GPSUtil.getLocation("广西壮族自治区")))); System.out.println("location-西藏自治区:" + GPSUtil.getLocation("西藏自治区"));
System.out.println("省份:" + getProvinceByGps(reverseLocation(GPSUtil.getLocation("西藏自治区")))); System.out.println("location-台湾省:" + GPSUtil.getLocation("高雄"));
System.out.println("省份:" + getProvinceByGps(reverseLocation(GPSUtil.getLocation("高雄"))));
} }

百度GPSutil的更多相关文章

  1. 基于百度定位SDK的定位服务的实现

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/10179013 一.定位模块的需求:我们想知道使用我们应用的用户的大概位置,每隔五分钟 ...

  2. 百度地图和高德地图坐标系的互相转换 四种Sandcastle方法生成c#.net帮助类帮助文档 文档API生成神器SandCastle使用心得 ASP.NET Core

    百度地图和高德地图坐标系的互相转换   GPS.谷歌.百度.高德坐标相互转换 一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记 ...

  3. 高德,百度,Google地图定位偏移以及坐标系转换

    一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系 一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的 ...

  4. 简谈百度坐标反转至WGS84的三种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...

  5. 百度MIP页规范详解 —— canonical标签

    百度MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错: 强制性标签<link rel="/^(canonical)$/"> 缺失或错误 这 ...

  6. 百度推出新技术 MIP,网页加载更快,广告呢?

    我们在2016年年初推出了MIP,帮助移动页面加速(原理).内测数据表明,MIP页面在1s内加载完成.现在已经有十多家网站加入MIP项目,有更多的网站正在加入中.在我们收到的反馈中,大部分都提到了广告 ...

  7. 百度MIP移动页面加速——不只是CDN

    MIP是用CDN做加速的么?准确答案是:是,但不只是. MIP全称Mobile Instant Pages,移动网页加速器,是百度提出的页面加速解决方案.MIP从前端渲染和页面网络传输两方面进行优化, ...

  8. 如何用百度MIP快速搭建体验友好的移动页面

    在读这篇文章之前,请确定你已经了解MIP定义及加速原理.如果不确定的话,可以到MIP官网了解. 改造前期准备和注意事项: 你可以选择直接将原先的移动站点直接改成MIP站,也可以单独再做一套MIP站点与 ...

  9. 移动站应该尝试百度MIP的五个原因

    MIP是什么?MIP是百度在2016年提出的移动网页加速器项目. MIP能做什么?MIP能帮助站长和网站开发者快速搭建移动端页面. MIP怎么加速?MIP从前端渲染和页面网络传输两方面进行优化,杜绝页 ...

随机推荐

  1. InputStream中read()与read(byte[] b)

    原文:InputStream中read()与read(byte[] b) read()与read(byte[] b)这两个方法在抽象类InputStream中前者是作为抽象方法存在的,后者不是,JDK ...

  2. Testin_百度百科

    Testin_百度百科     Testin    编辑    目录     1测试平台     2三大特性    #1 真机终端云,节省测试设备购买租赁成本#2 自动化测试,节省测试人员成本及时间# ...

  3. TCP拥塞控制算法内核实现剖析(十)

    内核版本:3.2.12 主要源文件:linux-3.2.12/ net/ ipv4/ tcp_veno.c 主要内容:Veno的原理和实现 Author:zhangskd @ csdn blog 概要 ...

  4. c语言,变长数组

    下面这个结构体,可以在malloc的时候指定数据data的长度,这样的形式就是变长数组:typedef struct{ int data_len; char data[0];//或char data[ ...

  5. this小记

    this小记 太久没有研究底层的js相关,今晚差点被紫红爸爸上课了. 正题 var net=new Object(); //定义一个全局变量net net.AjaxRequest=function(u ...

  6. 云计算被视为继大型计算机、个人计算机、互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求(转)

    云计算被视为继大型计算机.个人计算机.互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求,成为引领当今世界信息技术变革的主力军.越来越多的金融企业认识到只有与云计算结合,才能 ...

  7. ajax动态加载的图标

    http://www.ajaxload.info/ 这个网站可以动态生成ajax加载样式的小图片,git格式,挺不错推荐给大家

  8. 社交舞 - 简介,释名,风格,舞步 - 金山词霸汉语 - HAPPY Life

    社交舞 - 简介,释名,风格,舞步 - 金山词霸汉语 - HAPPY Life 社交舞 编辑词条 创建词条 内容来源 社交舞(英语:ballroom dance),又称交谊舞或交际舞,是来源于西方的一 ...

  9. 解决java mail发送TXT附件被直接显示在正文中的问题

    这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀 ...

  10. CF 8D Two Friends (三分+二分)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :有三个点,p0,p1,p2.有两个人ali ...