此工具类是, 模拟请求去调用百度地图api,来根据输入的地址获取相关信息、或者根据经纬度确定地址等。

注意看下面代码的注解,注解写的很清楚。

注意:需要自行申请百度key,在代码相应位置替换,参考官方地址:http://lbsyun.baidu.com/

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @function: 输入地名获取经纬度, 以及详细地址工具类* @auther: Create by lsy* @date: 2018/5/22* @version: v1.0*/public class LngAndLatUtil {/*** 功能:传入地址,返回字符串经纬度和详细地址和邮政编码** @param address* @return*/public static String getLngAndLatAndAddress(String address) {Map<String, Double> map = getLngAndLat(address);String info = "";if (map.size() != 0) {String addressInfo = getAddress(String.valueOf(map.get("lng")), String.valueOf(map.get("lat")));//String psotCode = getPostCode(addressInfo);info = map.get("lng") + "," + map.get("lat") + "," + addressInfo;}return info;}/*** 通过模糊地址获取经纬度** @param address* @return*/public static Map<String, Double> getLngAndLat(String address) {Map<String, Double> map = new HashMap<String, Double>();String url = "http://api.map.baidu.com/geocoder/v2/?address=" + address + "&output=json&ak=自己的key";String json = loadJSON(url);JSONObject obj = null;try {obj = JSONObject.fromObject(json);if (obj.get("status").toString().equals("0")) {double lng = obj.getJSONObject("result").getJSONObject("location").getDouble("lng");double lat = obj.getJSONObject("result").getJSONObject("location").getDouble("lat");map.put("lng", lng);map.put("lat", lat);//System.out.println("经度:" + lng + "---纬度:" + lat);} else {/* System.out.println("未找到相匹配的经纬度!");Integer lng[] = {113, 114, 119, 115};Integer lat[] = {34, 38, 26, 28};int random = CreateDataUtil.getGaussianRandom(0, 3);map.put("lng", lng[random].doubleValue());map.put("lat", lat[random].doubleValue());*/}} catch (Exception e) {e.printStackTrace();Integer lng[] = {113, 114, 119, 115};Integer lat[] = {34, 38, 26, 28};int random = CreateDataUtil.getGaussianRandom(0, 3);map.put("lng", lng[random].doubleValue());map.put("lat", lat[random].doubleValue());}return map;}public static String loadJSON(String url) {StringBuilder json = new StringBuilder();try {URL oracle = new URL(url);URLConnection yc = oracle.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));String inputLine = null;while ((inputLine = in.readLine()) != null) {json.append(inputLine);}in.close();} catch (MalformedURLException e) {} catch (IOException e) {}return json.toString();}/*** 功能:通过经纬度获取地址** @param lng* @param lat* @return*/public static String getAddress(String lng, String lat) {String add = getAdd(lng, lat);JSONObject jsonObject = JSONObject.fromObject(add);JSONArray jsonArray = JSONArray.fromObject(jsonObject.getString("addrList"));JSONObject j_2 = JSONObject.fromObject(jsonArray.get(0));String allAdd = j_2.getString("admName");String address_road = "";if (j_2.containsKey("addr")) {address_road = j_2.getString("addr");}String addressInfo = allAdd.replaceAll(",", "") + address_road;return addressInfo;}public static String getAdd(String log, String lat) {//lat 小  log  大//参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)String urlString = "http://gc.ditu.aliyun.com/regeocoding?l=" + lat + "," + log + "&type=010";String res = "";try {URL url = new URL(urlString);java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();conn.setDoOutput(true);conn.setRequestMethod("POST");java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {res += line + "\n";}in.close();} catch (Exception e) {System.out.println("error in wapaction,and e is " + e.getMessage());}return res;}/*** 通过地名获取邮政编码** @param address* @return*/public static String getPostCode(String address) {String postCode = "";String urlString = "http://cpdc.chinapost.com.cn/web/index.php?m=postsearch&c=index&a=ajax_addr&searchkey=" + address;String json = loadJSON(urlString);JSONObject obj = JSONObject.fromObject(json);if ((Integer) obj.get("now_num") > 0) {List list = (List) obj.get("rs");for (Object result : (List) obj.get("rs")) {JSONObject fromObject = JSONObject.fromObject(result);if (Integer.valueOf(fromObject.get("POSTCODE").toString()) != -1) {postCode = fromObject.get("POSTCODE").toString();break;}}} else {System.out.println("未找到相匹配的邮编地址!");}if (StringUtils.isEmpty(postCode)) {postCode = "000000";}return postCode;}
}

java获取经纬度和地址等工具类相关推荐

  1. Java 获取IP地址的工具类

    package cn.tolin.springboot.lab1.util;import javax.servlet.http.HttpServletRequest; import java.net. ...

  2. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  3. Java 获取主机ip地址(ipv4)

    在java 应用中, 有时需要获取应用所在服务器的ip地址, 比如说利用Zookeeper 做动态节点上下线时. java 提供了InetAddress 类来获取主机ip地址, 但是使用的时候需要注意 ...

  4. Java实现Google的S2算法工具类

    WGS84坐标系 GCJ02坐标系 BD09坐标系的各种转换 WGS84坐标系 GCJ02坐标系 BD09坐标系的各种转换 Google S2 经纬度 转 CellId 经纬度 转 cellToken ...

  5. JAVA获取主机IP地址

    JAVA获取主机IP地址 java 获取主机IP地址工具类 import org.springframework.web.context.request.RequestAttributes; impo ...

  6. (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入

    -- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...

  7. JS获取本机IP的工具类

    JS获取本机IP的工具类 /*** 获取ip地址*/ export function getUserIP(onNewIP) { // onNewIp - 回调函数//兼容for firefox and ...

  8. 获取SIM卡信息的工具类

    本工具类可以获取手机的IMSI.本机的手机号码.SIM卡的服务商. 移动.联通可正常获取到SIM卡的手机卡号,但是电信的获取不到.... 首先,需要在AndroidManifest.xml清单配置文件 ...

  9. Java学习总结:58(Collections工具类)

    Collections工具类 Java提供了一个集合的工具类--Collections,这个工具类可以实现List.Set.Map集合的操作.Collections类的常用方法如下: No. 方法 类 ...

最新文章

  1. 入门Web前端有哪些误区?该如何避免?
  2. linux配置服务器心得体会,linux 学习 linux上搭建dhcp服务器
  3. 数据结构之栈的应用(语法匹配)
  4. PowerDesigner生成的建表脚本中如何把对象的双引号去掉
  5. NYOJ33 - 蛇形填数
  6. Collectors.toSet()
  7. 2W+汉字转拼音JS字库(UTF-8生僻字等通用无乱码)
  8. 杭州吃喝玩乐便民大全
  9. 论文的摘要算不算字数?
  10. 【MODBUS通讯协议】
  11. 实例三十八:银行卡问题
  12. Java常用类:Data()的用法,获得当前日期和时间对象date 定义对象Date date1 = new Date(36000000);获得包含的日期和时间 比较date和date1是否相等
  13. Http请求的header头解析
  14. 工作第十六七周:生活这么繁琐,我们还要努力爱她
  15. 洛谷入门篇的相关题解
  16. 二进制转换十进制,十进制转换二进制
  17. JavaSwing多线程小游戏雷霆战机
  18. Start Additional NameNode
  19. OpenWrt 安装 mDNS,并设置 mDNS 映射
  20. js 实现pc端鼠标拖动触发横向滚动条的滚动(隐藏的滚动条)

热门文章

  1. saas(sccs)、less、stylus三者的区别
  2. Word VBA(批量复制Excel表格和Word表格到Word中)
  3. java中的字符retry: 是什么?
  4. win10共享计算机win7,Win7系统和win10系统设置共享打印机的方法
  5. C++环境下部署深度学习模型方案
  6. 【字节跳动】 https://job.bytedance.com/campus 内推码:MZ9BJHD 电话:13855119574 邮箱:yinxiang.stephen@bytedance.com
  7. 整理了100个Python精选库,建议收藏!
  8. IE无法查看源文件原因及解决办法
  9. mysql .myd_关于mysql 删除数据后(.MYD,MYI)物理空间未释放
  10. 蘑菇街暑期实习生一面面经 大三