百度GPSutil「建议收藏」

百度GPSutil

大家好,又见面了,我是全栈君。

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

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("高雄")))); } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116359.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java中的substring截取字符串方法「建议收藏」

    Java中的substring截取字符串方法「建议收藏」1.在处理字符串的过程中有很多情况下会遇到需要截取字符串的情况,这个时候使用Java中提供的substring方法来截取就非常方便了2.其中比较经常使用到的方法有两个:①publicStringsubstring(intbeginIndex)这个方法截取的字符串是从索引beginIndex开始的,到整个字符串的末尾,例如:字符串Strings=”abcdef”;调…

    2022年5月24日
    43
  • 2000款商务通用PPT模板免费下载[通俗易懂]

    2000款商务通用PPT模板免费下载[通俗易懂]0001-大气黑金年终工作总结PPT模板.zip:https://baippt.ctfile.com/fs/5288276-3454633710002-简约大气工作总结PPT模板.zip:https://baippt.ctfile.com/fs/5288276-3454633380003-商务风职业规划PPT模板.zip:https://baippt.ctfile.com/fs/5288…

    2022年7月24日
    15
  • 测试技术提升分享_测试技术分享

    测试技术提升分享_测试技术分享在腾讯课堂上分享测试技术相关的课程也有一段时间了,同时在博客(http://blog.sina.com.cn/u/1760715297)和微信公众号上也分享了不少相关文档。现在已经有相当关注度,也有很多同学加入了我们的QQ群(867446822)积极地进行交流。但在交流过程中,也存在不少问题,有相当的同学不了解我们的课程,也不清楚如何学习,所以我写这篇文章,给大家做个指导:一,测…

    2022年9月15日
    6
  • Java :JDK下载与安装教程

    Java :JDK下载与安装教程万事开头难。在了解什么是Java、Java语言的特点以及学习方法之后,本节将介绍如何搭建编写Java程序所需要的开发环境——JDK(JavaDevelopmentKit)。JDK是一种用于构建在Java平台上发布的应用程序、Applet和组件的开发环境,即编写Java程序必须使用JDK,它提供了编译和运行Java程序的环境。在安装JDK之前,首先要到Oracle…

    2022年5月13日
    41
  • python贪吃蛇代码-Python编写简单的贪吃蛇核心代码[通俗易懂]

    python贪吃蛇代码-Python编写简单的贪吃蛇核心代码[通俗易懂]时间:2018-11-14概述:贪吃蛇Python贪吃蛇完整代码,代码注释比较多,可学习一下Python编写游戏的一些基本技巧,代码分享如下:#coding=utf-8importcursesimportthreadingimportrandom#importmsvcrt#fromcursesimporttextpad#!!!addch(y,x,ch)stdscr=curses….

    2022年8月10日
    17
  • Java不可重入锁和可重入锁理解[通俗易懂]

    Java不可重入锁和可重入锁理解[通俗易懂]最近正在阅读JavaReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步…

    2022年6月26日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号