SpringBoot整合高德地图 地理编码\逆地理编码
SpringBoot整合高德地图 地理编码\逆地理编码
官方文档:
https://lbs.amap.com/api/webservice/guide/api/georegeo
地理编码
根据名称解析出经纬度等信息
产品介绍
地理编码/逆地理编码 API 是通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地址与经纬度之间的相互转化的能力。
结构化地址的定义: 首先,地址肯定是一串字符,内含国家、省份、城市、区县、城镇、乡村、街道、门牌号码、屋邨、大厦等建筑物名称。按照由大区域名称到小区域名称组合在一起的字符。一个有效的地址应该是独一无二的。注意:针对大陆、港、澳地区的地理编码转换时可以将国家信息选择性的忽略,但省、市、城镇等级别的地址构成是不能忽略的。暂时不支持返回台湾省的详细地址信息。
适用场景
地理编码:将详细的结构化地址转换为高德经纬度坐标。且支持对地标性名胜景区、建筑物名称解析为高德经纬度坐标。
结构化地址举例:北京市朝阳区阜通东大街6号转换后经纬度:116.480881,39.989410
地标性建筑举例:天安门转换后经纬度:116.397499,39.908722
逆地理编码:将经纬度转换为详细结构化的地址,且返回附近周边的POI、AOI信息。
例如:116.480881,39.989410 转换地址描述后:北京市朝阳区阜通东大街6号
使用说明
- 第一步,申请Web服务API类型Key;
- 第二步,参考接口参数文档发起HTTP/HTTPS请求,第一步申请的 Key
需作为必填参数一同发送; - 第三步,接收请求返回的数据(JSON或XML格式),参考返回参数文档解析数据。
- 如无特殊声明,接口的输入参数和输出数据编码全部统一为 UTF-8 编码方式。
创建应用,申请key
调用地理编码及逆地理编码,最主要的是把key搞到手。也不用依赖,直接使用httpClient远程调用即可
请求URL
https://restapi.amap.com/v3/geocode/geo?parameters
请求方式
GET
介绍到这里结束,开始粘代码
pom.xml
<!--httpclient-->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.4</version>
</dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version>
</dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version>
</dependency>
application.properties
server.port=2080#The config for HttpClient
http.maxTotal=300
http.defaultMaxPerRoute=50
http.connectTimeout=1000
http.connectionRequestTimeout=500
http.socketTimeout=5000
http.staleConnectionCheckEnabled=truegaode.key = 获取的key
LocationUtils
package com.zjy.map.utils;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.net.URI;
import java.util.Map;@Component
public class LocationUtils {/**日志对象*/private static final Logger logger = LoggerFactory.getLogger(LocationUtils.class);@Value("${gaode.key}")private String KEY;/*** 地理编码的url*/public final String LOCATION_URL = "https://restapi.amap.com/v3/geocode/geo?parameters";/*** 逆地理编码的url*/public final String COUNTER_LOCATION_URL = "https://restapi.amap.com/v3/geocode/regeo?parameters";/*** 发送get请求* @return*/public JSONObject getLocation(Map<String, String> params){JSONObject jsonObject = null;CloseableHttpClient httpclient = HttpClients.createDefault();// 创建URI对象,并且设置请求参数try {URI uri = getBuilderLocation(LOCATION_URL, params);// 创建http GET请求HttpGet httpGet = new HttpGet(uri);CloseableHttpResponse response = httpclient.execute(httpGet);// 判断返回状态是否为200jsonObject = getLocation(response);httpclient.close();} catch (Exception e) {e.printStackTrace();}return jsonObject;}/*** 根据地址获取到经纬度* @param response* @return*/private static JSONObject getLocation(CloseableHttpResponse response) throws Exception{JSONObject geocode = null;// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {String content = EntityUtils.toString(response.getEntity(), "UTF-8");logger.info("调用高德地图接口返回的结果为:{}",content);JSONObject jsonObject = (JSONObject) JSONObject.parse(content);JSONArray geocodes = (JSONArray) jsonObject.get("geocodes");geocode = (JSONObject) geocodes.get(0);logger.info("返回的结果为:{}",JSONObject.toJSONString(geocode));}return geocode;}/*** 地理编码封装URI* @param url* @param params* @return* @throws Exception*/private URI getBuilderLocation(String url, Map<String, String> params) throws Exception{// 详细地址String address = params.get("address");String city = params.get("city");URIBuilder uriBuilder = new URIBuilder(url);// 公共参数uriBuilder.setParameter("key", KEY);uriBuilder.setParameter("address", address);uriBuilder.setParameter("city", city);logger.info("请求的参数为:{}", JSONObject.toJSONString(uriBuilder));URI uri = uriBuilder.build();return uri;}/*** 逆地理编码* @return*/public JSONObject getCounterLocation(Map<String, String> params){JSONObject jsonObject = null;CloseableHttpClient httpclient = HttpClients.createDefault();// 创建URI对象,并且设置请求参数try {URI uri = getBuilderCounterLocation(COUNTER_LOCATION_URL, params);// 创建http GET请求HttpGet httpGet = new HttpGet(uri);CloseableHttpResponse response = httpclient.execute(httpGet);// 判断返回状态是否为200jsonObject = getCounterLocation(response);httpclient.close();} catch (Exception e) {e.printStackTrace();}return jsonObject;}/*** 逆地理编码封装URI* @param url* @param params* @return* @throws Exception*/private URI getBuilderCounterLocation(String url, Map<String, String> params) throws Exception{// 详细地址String location = params.get("location");URIBuilder uriBuilder = new URIBuilder(url);// 公共参数uriBuilder.setParameter("key", KEY);uriBuilder.setParameter("location", location);logger.info("请求的参数为:{}", JSONObject.toJSONString(uriBuilder));URI uri = uriBuilder.build();return uri;}/*** 根据地址获取到经纬度* @param response* @return*/private static JSONObject getCounterLocation(CloseableHttpResponse response) throws Exception{JSONObject regeocode = null;// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {String content = EntityUtils.toString(response.getEntity(), "UTF-8");logger.info("调用高德地图接口返回的结果为:{}",content);JSONObject jsonObject = (JSONObject) JSONObject.parse(content);regeocode = (JSONObject)jsonObject.get("regeocode");logger.info("返回的结果为:{}",JSONObject.toJSONString(regeocode));}return regeocode;}
}
LocationController
package com.zjy.map.controller;import com.alibaba.fastjson.JSONObject;
import com.zjy.map.utils.LocationUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;/*** 高德经纬度*/
@RestController
@RequestMapping("/location")
public class LocationController {/**日志对象*/private static final Logger logger = LoggerFactory.getLogger(LocationController.class);@Autowiredprivate LocationUtils locationUtils;/*** 地理编码* http://localhost:2080/location/get?address=大同市平城区南环路&city=大同* @param address* @param city* @return*/@GetMapping("/get")public JSONObject getLocation(@RequestParam String address, @RequestParam String city){Map<String, String> params = new HashMap<>();params.put("address", address);params.put("city", city);logger.info("获取地理编码,请求的参数为:{}", params);JSONObject map = locationUtils.getLocation(params);logger.info("获取地理编码,返回的请求结果为:{}", map);return map;}/*** 逆地理编码* http://localhost:2080/location/getCounter?location=113.300038,40.063278* @param location* @return*/@GetMapping("/getCounter")public JSONObject getCounterLocation(@RequestParam String location){Map<String, String> params = new HashMap<>();params.put("location", location);logger.info("获取逆地理编码,请求的参数为:{}", params);JSONObject map = locationUtils.getCounterLocation(params);logger.info("获取逆地理编码,返回的请求结果为:{}", map);return map;}
}
代码粘完了。开始测试
测试
官方接口文档,有详细入参,出参信息
https://lbs.amap.com/api/webservice/guide/api/georegeo#regeo
启动服务。访问2个接口
地理编码接口
逆地理编码接口
可根据自己项目需求来摘取自己有用的数据!
测试OK!
欢迎大神指导,可以留言交流!
======================
本人原创文章,转载注明出入!
=================
SpringBoot整合高德地图 地理编码\逆地理编码相关推荐
- 高德地图API-地理/逆地理编码开发
1.应用场景 ● 地理编码:将详细的结构化地址转换为高德经纬度坐标.且支持对地标性名胜景区.建筑物名称解析为高德经纬度坐标. 结构化地址举例:北京市朝阳区阜通东大街6号转换后经纬度:116.48088 ...
- 技巧 | 在R语言中使用高德地图的API进行地理/逆地理编码(地址与经纬度的相互转换)...
高德地图和百度地图都提供了坐标拾取系统,通过坐标查询或坐标反查操作可以查询一个地址对应的经纬度或经纬度对应的地址名称.但是,手动查询的方式效率很低,也不能进行批量查询. 本篇就来介绍在R语言中调用高德 ...
- 百度地图WEB服务-逆地理编码使用心得
百度地图WEB服务-逆地理编码使用心得 逆地理编码接口 Postman接口请求测试 POI信息召回 Postman接口请求测试 上一篇博文写了我开发项目中最长用的正地理编码接口的博文,这次想总结一下逆 ...
- 高德地图-web端根据地理编码和逆地理编码
首先,用地址生成器快速生成一张地图,网址为lbs.amap.com/console/show/tools: <!DOCTYPE html> <html> <head> ...
- 高德地图 SDK集成 定位 地理编码 搜索 经纬度获取 功能工具类
最近项目要集成高德地图,然后可以根据语音输入指令,进行定位和地理编码搜索功能,从而实现获取当前位置经纬度和根据地址获取经纬度的功能 下载文件之只放了libs和主要代码文件 https://downlo ...
- 百度地图api-全球逆地理编码
全球逆地理编码服务 (又名Geocoder)是一类Web API接口服务: 逆地理编码服务提供将坐标点(经纬度)转换为对应位置信息(如所在行政区划,周边地标点分布)功能. 服务同时支持全球行政区划位置 ...
- 微信小程序整合高德地图获取定位经纬度信息
1.登录高德地图https://lbs.amap.com/ a.创建新应用 这个key后边整合的时候会用到,精彩继续 b.下载SDK https://lbs.amap.com/api/wx/down ...
- Android+SpringBoot+Vue+高德地图实现后台查看车辆实时位置功能
场景 通过给车辆的驾驶员的手机安装app,管理员在后台可以实时查看车辆的实时位置. 实现思路: app中集成高德地图,app启动登录后,定时地获取当前定位信息连同当前账号上传到服务器后台. 后台将获取 ...
- Android 整合高德地图SDK实现 地图预览,定位,模拟导航
一.准备工作 1. 到高德地图官方网申请key: 我的应用 | 高德控制台 2. 申请key方法请参考:获取Key-创建工程-开发指南-Android 地图SDK | 高德地图API 3. 出现的问题 ...
- Android 高德地图对于城市定位做地理编码+逆地理编码处理
之前有需求需要对城市定位做处理 这里简单的写了一个方法,可以直观的把地址转换为坐标,并且实现城市的定位,方法里面直接传入城市名 --------- 直接上码 //切换城市private void ge ...
最新文章
- 基础数据类型之集合和深浅copy,还有一些数据类型补充
- [译] 新一代 JavaScript 的开发图谱(2017)
- 在没有网的windows环境下安装Python模块
- 电子商务公司的职能架构及基础岗位职能
- 详解MySQL中DROP,TRUNCATE 和DELETE的区别
- 实战:Redis哨兵模式(上)
- 【Python】time内置模块处理时间信息
- 【Kafka】Kafka Tool 2 使用教程 SASL_PLAINTEXT
- 医学数字成像设备中计算机系统的作用包括,医学影像实用技术教程全部习题答案...
- 简析:世博会燃印刷业激情
- LC谐振高频逆变电路
- c语言中ascii码的作用,C语言中ASCII码是什么意思?
- 价值百万的企业大数据分析报告是如何炼成的?
- python实现划词翻译
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛
- 网络安全实验:CCProxy缓冲区溢出攻击
- CMake基础教程(18)find_path查找文件路径
- GD32F330+DS18B20
- opencv柱面投影,C语言实现
- DAE模型——阅读和理解COLLADA文档(2)