1.应用场景
● 地理编码:将详细的结构化地址转换为高德经纬度坐标。且支持对地标性名胜景区、建筑物名称解析为高德经纬度坐标。
结构化地址举例:北京市朝阳区阜通东大街6号转换后经纬度:116.480881,39.989410
地标性建筑举例:天安门转换后经纬度:116.397499,39.908722
● 逆地理编码:将经纬度转换为详细结构化的地址,且返回附近周边的POI、AOI信息。
例如:116.480881,39.989410 转换地址描述后:北京市朝阳区阜通东大街6号
2.准备工作
1.申请高德个人开发者账号
快速地址:高德开发平台地址
第一步:登录高德开放平台,注册个人账号(该账号是免费的,可以使用支付宝登录)
第二步:创建一个应用,然后配置web服务API类型Key
3.测试工作
1.前言
这里使用的地理/逆地理编码,就是将结构化地址转为经纬度或者经纬度转换为结构化地址
地理/逆地理编码地址:地理/逆地理编码接口文档
2.地理编码接口测试
1.地理编码接口文档
2.postman测试
这里直接使用postman进行测试,注意:实际接口返回的参数和官方文档对不上,应该是官方接口文档没有更新
3.逆地理编码接口测试
逆地理编码:将经纬度转换为详细结构化的地址,且返回附近周边的POI、AOI信息。
1.逆地理编码接口文档
2.postman测试
4.代码演示
1.地理编码接口代码测试
代码演示:
/***
* 地理编码:
* 通过结构化地址获取经纬度信息
*/
@Test
public void queryLocationTest() {
String url = "https://restapi.amap.com/v3/geocode/geo?key={key}&address={address}";
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("key", key);
map.put("address", "管城回族区");
// 注意: getForObject 请求,url需要提前指定好参数的位置.
String result;
try {
result = restTemplate.getForObject(url, String.class, map);
} catch (Exception e) {
throw new ExampleException(ExceptionEnum.OUTER_ERROR.getCode());
}
System.out.println(result);
}
输出结果:
{"status":"1","info":"OK","infocode":"10000","count":"1","geocodes":[{"formatted_address":"河南省郑州市管城回族区",
"country":"中国","province":"河南省","citycode":"0371","city":"郑州市","district":"管城回族区","township":[],
"neighborhood":{"name":[],"type":[]},"building":{"name":[],"type":[]},"adcode":"410104","street":[],"number":[],
"location":"113.677548,34.754500","level":"区县"}]}
2.逆地理编码接口测试
代码演示:
/**
* 逆地理编码
* 通过经纬度获取结构化地址
*/
@Test
public void queryLatitudeAndLongitude() {
String url = "https://restapi.amap.com/v3/geocode/regeo?key={key}&location={location}";
Map<String, String> parameters = Maps.newHashMapWithExpectedSize(2);
parameters.put("key", key);
parameters.put("location", "113.677548,34.754500");
String result;
try {
result = restTemplate.getForObject(url, String.class, parameters);
} catch (Exception e) {
throw new ExampleException(ExceptionEnum.OUTER_ERROR.getCode());
}
System.out.println(result);
}
输出结果:
{"status":"1","regeocode":{"addressComponent":{"city":"郑州市","province":"河南省","adcode":"410104",
"district":"管城回族区","towncode":"410104001000","streetNumber":{"number":"217号","location":"113.677500,34.754290",
"direction":"南","distance":"23.7611","street":"商城路"},"country":"中国","township":"北下街街道",
"businessAreas":[{"location":"113.686288,34.749987","name":"紫荆山","id":"410104"},
{"location":"113.690160,34.750173","name":"城东路","id":"410104"},
{"location":"113.671461,34.759608","name":"杜岭","id":"410105"}],
"building":{"name":[],"type":[]},"neighborhood":{"name":[],"type":[]},"citycode":"0371"},
"formatted_address":"河南省郑州市管城回族区北下街街道郑州市管城回族区人民政府"},"info":"OK","infocode":"10000"}
5.总结
1.需要提前注册一个高德账号,支付宝账户即可,然后申请个人开发者;
2.就是一个简单的请求第三方接口,注意地理编码和逆地理编码接口的出入参和官方文档出有些出入;
3.注意该地理/逆地理不能查询国外的经纬度,如果需要国外的经纬度,推荐使用百度。