1、根据地址查询经纬度
1.1、高德地图
推荐使用这个,每日免费次数多一些,并发高
public Map<String, Object> getLatAndLngByAddress(String addr) {
String address = "";
try {
address = java.net.URLEncoder.encode(addr,"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String url = "https://restapi.amap.com/v3/geocode/geo?address= "+address + "&output=JSON&key=" + "1cc533db4482c9bc9daece853e2";
URL myURL = null;
URLConnection httpsConn = null;
try {
myURL = new URL(url);
} catch (MalformedURLException e) {
}
StringBuffer sb = new StringBuffer();
try {
httpsConn = (URLConnection) myURL.openConnection();
if (httpsConn != null) {
InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(insr);
String data = null;
while ((data = br.readLine()) != null) {
sb.append(data);
}
insr.close();
}
} catch (IOException e) {
}
Map<String, Object> map = new HashMap<String, Object>();
JSONObject resultJson = JSON.parseObject(sb.toString());
JSONArray geocodes = resultJson.getJSONArray("geocodes");
JSONObject jsonObject = geocodes.getJSONObject(0);
String location = jsonObject.getString("location");
String district = jsonObject.getString("district");
String lng = StringUtils.substringBefore(location, ",");
String lat = StringUtils.substringAfter(location, ",");
map.put("lat", lat);
map.put("lng", lng);
map.put("area",district);
return map;
}
URL | https://restapi.amap.com/v3/geocode/geo?parameters |
---|
请求方式 | GET |
参数名 | 含义 | 规则说明 | 是否必须 | 缺省值 |
---|
key | 高德Key | 用户在高德地图官网申请Web服务API类型Key | 必填 | 无 |
address | 结构化地址信息 | 规则遵循:国家、省份、城市、区县、城镇、乡村、街道、门牌号码、屋邨、大厦,如:北京市朝阳区阜通东大街6号。如果需要解析多个地址的话,请用"|“进行间隔,并且将 batch 参数设置为 true,最多支持 10 个地址进进行”|"分割形式的请求。 | 必填 | 无 |
city | 指定查询的城市 | 可选输入内容包括:指定城市的中文(如北京)、指定城市的中文全拼(beijing)、citycode(010)、adcode(110000),不支持县级市。当指定城市查询内容为空时,会进行全国范围内的地址转换检索。adcode信息可参考城市编码表获取 | 可选 | 无,会进行全国范围内搜索 |
batch | 批量查询控制 | batch 参数设置为 true 时进行批量查询操作,最多支持 10 个地址进行批量查询。batch 参数设置为 false 时进行单点查询,此时即使传入多个地址也只返回第一个地址的解析查询结果。 | 可选 | false |
sig | 数字签名 | 请参考数字签名获取和使用方法 | 可选 | 无 |
output | 返回数据格式类型 | 可选输入内容包括:JSON,XML。设置 JSON 返回结果数据将会以JSON结构构成;如果设置 XML 返回结果数据将以 XML 结构构成。 | 可选 | JSON |
callback | 回调函数 | callback 值是用户定义的函数名称,此参数只在 output 参数设置为 JSON 时有效。 | 可选 | 无 |
名称 | | 含义 | 规则说明 |
---|
status | | | 返回值为 0 或 1,0 表示请求失败;1 表示请求成功。 |
count | | 返回结果数目 | 返回结果的个数。 |
info | | 返回状态说明 | 当 status 为 0 时,info 会返回具体错误原因,否则返回“OK”。详情可以参阅info状态表 |
geocodes | | 地理编码信息列表 | 结果对象列表,包括下述字段: |
| formatted_address | 结构化地址信息 | 省份+城市+区县+城镇+乡村+街道+门牌号码 |
| country | 国家 | 国内地址默认返回中国 |
| province | 地址所在的省份名 | 例如:北京市。此处需要注意的是,中国的四大直辖市也算作省级单位。 |
| city | 地址所在的城市名 | 例如:北京市 |
| citycode | 城市编码 | 例如:010 |
| district | 地址所在的区 | 例如:朝阳区 |
| street | 街道 | 例如:阜通东大街 |
| number | 门牌 | 例如:6号 |
| adcode | 区域编码 | 例如:110101 |
| location | 坐标点 | 经度,纬度 |
| level | 匹配级别 | 参见下方的地理编码匹配级别列表 |
1.2、百度地图
public Map<String, Object> getLatAndLngByAddress(String addr) {
String address = "";
try {
address = java.net.URLEncoder.encode(addr,"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String url = "http://api.map.baidu.com/geocoding/v3/?address="+ address + "&output=json&ak=" + "oKdLH6xcnuIeGvfuDwrYwyUH";
URL myURL = null;
URLConnection httpsConn = null;
try {
myURL = new URL(url);
} catch (MalformedURLException e) {
}
StringBuffer sb = new StringBuffer();
try {
httpsConn = (URLConnection) myURL.openConnection();
if (httpsConn != null) {
InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(insr);
String data = null;
while ((data = br.readLine()) != null) {
sb.append(data);
}
insr.close();
}
} catch (IOException e) {
}
Map<String, Object> map = new HashMap<String, Object>();
JSONObject resultJson = JSON.parseObject(sb.toString());
JSONObject jsonArray = (JSONObject)resultJson.get("result");
JSONObject locationObj = (JSONObject)jsonArray.get("location");
String lng = (String)locationObj.get("lng");
String lat = (String)locationObj.get("lat");
map.put("lat", lat);
map.put("lng", lng);
return map;
}
http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
参数名 | 参数含义 | 类型 | 举例 | 默认值 | 是否必须 |
---|
address | 待解析的地址。最多支持84个字节。 可以输入两种样式的值,分别是: 1、标准的结构化地址信息,【推荐,地址结构越完整,解析精度越高】2、支持“路与路交叉口”描述方式,第二种方式并不总是有返回结果,只有当地址库中存在该地址描述时才有返回。 | string | 北京市海淀区上地十街10号 | 无 | 是 |
city | 地址所在的城市名。用于指定上述地址所在的城市,当多个城市都有上述地址时,该参数起到过滤作用,但不限制坐标召回城市。 | string | 北京市 | 无 | 否 |
ret_coordtype | 可选参数,添加后返回国测局经纬度坐标或百度米制坐标 坐标系说明 | string | gcj02ll(国测局坐标)、bd09mc(百度墨卡托坐标) | bd09ll(百度经纬度坐标) | 否 |
ak | 用户申请注册的key,自v2开始参数修改为“ak”,之前版本参数为“key”申请ak | string | | 无 | 是 |
sn | 若用户所用ak的校验方式为sn校验时该参数必须 sn生成 | string | | 无 | 否 |
output | 输出格式为json或者xml | string | json或xml | xml | 否 |
callback | 将json格式的返回值通过callback函数返回以实现jsonp功能 | string | callback=showLocation(JavaScript函数名) | 无 | 否 |
名称 | | 含义 | 类型 |
---|
status | | 返回结果状态值, 成功返回0,其他值请查看下方返回码状态表。 | int |
location | | 经纬度坐标 | object |
| lat | 纬度值 | float |
| lng | 经度值 | float |
precise | | 位置的附加信息,是否精确查找。1为精确查找,即准确打点;0为不精确,即模糊打点。 | int |
confidence | | 描述打点绝对精度(即坐标点的误差范围)。 | int |
comprehension | | 描述地址理解程度。分值范围0-100,分值越大,服务对地址理解程度越高(建议以该字段作为解析结果判断标准); //解析误差:地理编码服务解析地址得到的坐标位置,与地址对应的真实位置间的距离。 | int |
level | | 能精确理解的地址类型,包含:UNKNOWN、国家、省、城市、区县、乡镇、村庄、道路、地产小区、商务大厦、政府机构、交叉路口、商圈、生活服务、休闲娱乐、餐饮、宾馆、购物、金融、教育、医疗 、工业园区 、旅游景点 、汽车服务、火车站、长途汽车站、桥 、停车场/停车区、港口/码头、收费区/收费站、飞机场 、机场 、收费处/收费站 、加油站、绿地、门址 | string |
对你有用就点个赞吧