热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

调用高德的接口,地理位置和经纬度相互转换

高德官方有详细的接口调用文档:http:lbs.amap.comapiwebserviceguideapigeoregeo我是在java项目中使用,下

高德官方有详细的接口调用文档:http://lbs.amap.com/api/webservice/guide/api/georegeo

我是在java项目中使用,下面以地理位置得到经纬度来举例。

首先,你需要注册高德的账号,并且获取一个key:http://lbs.amap.com/dev/key/app;

package com.yangfong.task.service;import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.log4j.Logger;import com.dz.utils.HttpclientUtil;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;public class AddressLngLatExchange {//写到配置文件中private static final String KEY = "123456789satawetfbsdrtsg4ts4y46";private static final String OUTPUT = "JSON";private static final String GET_LNG_LAT_URL = "http://restapi.amap.com/v3/geocode/geo";private static final String GET_ADDR_FROM_LNG_LAT = "http://restapi.amap.com/v3/geocode/regeo";private static final String EXTENSIONS_ALL = "all";private static final Logger LOGGER = Logger.getLogger(AddressLngLatExchange.class);/*** * @description 根据传进来的一个地址,查询对应的经纬度* @param * @return Pair 左节点值为经度,右节点值为纬度* @author jxp* @date 2017年7月12日*/public static Pair getLngLatFromOneAddr(String address) {if (StringUtils.isBlank(address)) {LOGGER.error("地址(" + address + ")为null或者空");return null;}Map params = new HashMap();params.put("address", address);params.put("output", OUTPUT);params.put("key", KEY);String result = HttpclientUtil.post(params, GET_LNG_LAT_URL);Pair pair = null;// 解析返回的xml格式的字符串result,从中拿到经纬度// 调用高德API,拿到json格式的字符串结果JSONObject jsonObject = JSONObject.fromObject(result);// 拿到返回报文的status值,高德的该接口返回值有两个:0-请求失败,1-请求成功;int status = Integer.valueOf(jsonObject.getString("status"));if (status == 1) {JSONArray jsonArray = jsonObject.getJSONArray("geocodes");for (int i = 0; i (longitude, latitude);}} else {String errorMsg = jsonObject.getString("info");LOGGER.error("地址(" + address + ")" + errorMsg);}return pair;}/*** * @description 根据经纬度查地址* @param lng:经度,lat:纬度* @return 地址* @author jxp* @date 2017年7月12日*/public static String getAddrFromLngLat(String lng, String lat) {Map params = new HashMap();params.put("location", lng + "," + lat);params.put("output", OUTPUT);params.put("key", KEY);params.put("extensions", EXTENSIONS_ALL);String result = HttpclientUtil.post(params, GET_ADDR_FROM_LNG_LAT);JSONObject json = JSONObject.fromObject(result);String status = json.getString("status");String address = null;if ("1".equals(status)) {JSONObject regeocode = JSONObject.fromObject(json.get("regeocode"));address = regeocode.getString("formatted_address");}return address;}
}

备注:1)此处用Pair类型返回值,只是个人偏好,这种返回方式无法返回高德的错误信息,不过在试验过程中,发现就算是胡乱写的地址,高德也会返回OK,只是经纬度为空,可能高德的错误信息指的是高德的程序异常,所以返回不OK的概率就比较小了,顾在此处仅记录在日志里。

2)HTTP的工具类可以在网上找,给一个参考的:http://lxy19791111.iteye.com/blog/341409

3)如有需要改进的地方,欢迎指正


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 基于Axis、XFire、CXF的webservice客户端调用示例
    本文介绍了如何使用Axis、XFire、CXF等工具来实现webservice客户端的调用,以及提供了使用Java代码进行调用的示例。示例代码中设置了服务接口类、地址,并调用了sayHello方法。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 学习mybatis的基础知识:mybatis入门教程(二)
    2019独角兽企业重金招聘Python工程师标准2.3MyBatisprintsql在log4j.properties配置文件中添加如下配置,让mybatis打 ... [详细]
  • 介绍怎样在IntellijIdea中通过创建mavenproject配置MapReduce的编程环境。一、软件环境我使用的软件版本号例如以下:IntellijIdea2017.1M ... [详细]
  • 线上问题:JavaBean赋值基础类型抛出异常
    1问题复现1.1问题实体(JavaBean规范)赋值时,抛出异常。1.2原因使用基础类型定义属性,当使用null给属 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
Vicki大毛美国代购
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有