根据地址查询经纬度

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();
        }
		//这里的key可以去高德地图官网申请,别用我的,(这个key我删了几位,不能让你们用)
        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>();
    	//这时就是json格式的数据了
        JSONObject resultJson = JSON.parseObject(sb.toString());

        //高德地图获取经纬度 json数据object和Array互换,用阿里的包com.alibaba.fastjson.JSON/JSONObject/JSONArray 记得导包
        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;
    }
  • 地理编码 API 服务地址
URLhttps://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();
    }

	//这里的ak,可以去百度地图官网申请,别用我的(这个ak我删了几位,不能让你们用)
    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 //GET请求
//注意:当前为V3.0版本接口文档,V2.0及以前版本自2019.6.18起新用户无法使用。老用户仍可继续使用V2.0及以前版本请求实现逆地理编码服务,为保障用户体验,建议您尽快迁移到V3.0版本。
  • 请求参数
参数名参数含义类型举例默认值是否必须
address待解析的地址。最多支持84个字节。 可以输入两种样式的值,分别是: 1、标准的结构化地址信息,【推荐,地址结构越完整,解析精度越高】2、支持“路与路交叉口”描述方式,第二种方式并不总是有返回结果,只有当地址库中存在该地址描述时才有返回。string北京市海淀区上地十街10号
city地址所在的城市名。用于指定上述地址所在的城市,当多个城市都有上述地址时,该参数起到过滤作用,但不限制坐标召回城市。string北京市
ret_coordtype可选参数,添加后返回国测局经纬度坐标或百度米制坐标 坐标系说明stringgcj02ll(国测局坐标)、bd09mc(百度墨卡托坐标)bd09ll(百度经纬度坐标)
ak用户申请注册的key,自v2开始参数修改为“ak”,之前版本参数为“key”申请akstring
sn若用户所用ak的校验方式为sn校验时该参数必须 sn生成string
output输出格式为json或者xmlstringjson或xmlxml
callback将json格式的返回值通过callback函数返回以实现jsonp功能stringcallback=showLocation(JavaScript函数名)
  • 返回结果参数
名称含义类型
status返回结果状态值, 成功返回0,其他值请查看下方返回码状态表。int
location经纬度坐标object
lat纬度值float
lng经度值float
precise位置的附加信息,是否精确查找。1为精确查找,即准确打点;0为不精确,即模糊打点。int
confidence描述打点绝对精度(即坐标点的误差范围)。int
comprehension描述地址理解程度。分值范围0-100,分值越大,服务对地址理解程度越高(建议以该字段作为解析结果判断标准);
//解析误差:地理编码服务解析地址得到的坐标位置,与地址对应的真实位置间的距离。
int
level能精确理解的地址类型,包含:UNKNOWN、国家、省、城市、区县、乡镇、村庄、道路、地产小区、商务大厦、政府机构、交叉路口、商圈、生活服务、休闲娱乐、餐饮、宾馆、购物、金融、教育、医疗 、工业园区 、旅游景点 、汽车服务、火车站、长途汽车站、桥 、停车场/停车区、港口/码头、收费区/收费站、飞机场 、机场 、收费处/收费站 、加油站、绿地、门址string

对你有用就点个赞吧

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里给出一个Java的示例代码,同样是使用地理编码服务API来根据地址查询经纬度: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class BaiduMapDemo { public static void main(String[] args) { String address = "北京市海淀区上地十街10号"; // 要查询地址 String output = "json"; // 输出格式 String ak = "Your_AK"; // 替换成你的Access Key try { address = URLEncoder.encode(address, "UTF-8"); // URL编码 String url = "http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=" + output + "&ak=" + ak; String result = sendGet(url); // 发送HTTP请求并获取响应结果 JSONObject json = JSON.parseObject(result); int status = json.getIntValue("status"); if (status == 0) { JSONObject location = json.getJSONObject("result").getJSONObject("location"); double lng = location.getDoubleValue("lng"); // 经度 double lat = location.getDoubleValue("lat"); // 纬度 System.out.println("经度:" + lng + ",纬度:" + lat); } else { System.out.println("查询失败"); } } catch (Exception e) { e.printStackTrace(); } } public static String sendGet(String url) throws IOException { URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); conn.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; StringBuilder result = new StringBuilder(); while ((line = in.readLine()) != null) { result.append(line); } in.close(); return result.toString(); } } ``` 同样需要替换掉AK为你自己的Access Key。这里使用了FastJSON来解析JSON响应结果,需要在项目中引入FastJSON的依赖。 另外,由于Java中的URL编码和解码方法不同于Python,所以需要使用`URLEncoder.encode()`方法将地址进行编码。同时,还需要注意请求频率和配额的问题,以免超过限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值