• JAVA使用经纬度通过腾讯地图API获取详细地址


    官方文档:https://lbs.qq.com/service/webService/webServiceGuide/webServiceGcoder

    package com.weixin.map;
    
    import net.sf.json.JSONObject;
    import org.apache.commons.lang.StringUtils;
    
    import javax.net.ssl.*;
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    import java.net.URL;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    
    public class Test {
    
    
        /**
         * 通过腾讯地图将经纬度转成详细地址
         *
         * @param lat 纬度
         * @param lng 经度
         * @param key 开发密钥(Key) 需自行申请
         * @return
         */
    
        public static JSONObject getLatAndLng(String lat, String lng, String key) {
            try {
                String hsUrl = "https://apis.map.qq.com/ws/geocoder/v1/?location="+lat+","+lng+"&key="+key+"&get_poi=1";
    
                URL url;
    
                url = new URL(hsUrl);
                HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
                con.setRequestMethod("GET");// 提交模式
                X509TrustManager xtm = new X509TrustManager() {
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        // TODO Auto-generated method stub
                        return null;
                    }
    
                    @Override
                    public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                            throws CertificateException {
                        // TODO Auto-generated method stub
    
                    }
    
                    @Override
                    public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                            throws CertificateException {
                        // TODO Auto-generated method stub
    
                    }
                };
    
                TrustManager[] tm = {xtm};
    
                SSLContext ctx = SSLContext.getInstance("TLS");
                ctx.init(null, tm, null);
    
                con.setSSLSocketFactory(ctx.getSocketFactory());
                con.setHostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String arg0, SSLSession arg1) {
                        return true;
                    }
                });
    
    
                InputStream inStream = con.getInputStream();
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = inStream.read(buffer)) != -1) {
                    outStream.write(buffer, 0, len);
                }
                byte[] b = outStream.toByteArray();//网页的二进制数据
                outStream.close();
                inStream.close();
                String rtn = new String(b, "utf-8");
                if (StringUtils.isNotBlank(rtn)) {
                    JSONObject object = JSONObject.fromObject(rtn);
                    if (object != null) {
                        if (object.has("status") && object.getInt("status") == 0) {
                            JSONObject result = JSONObject.fromObject(object.get("result"));
                            if (result != null) {
                                JSONObject addressComponent = JSONObject.fromObject(result.get("address_component"));
                                if (addressComponent != null) {
                                    return addressComponent;
                                }
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args) {
            System.out.println(getLatAndLng("39.984154", "116.307490", "OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"));
        }
    }

    输出结果

    {"nation":"中国","province":"北京市","city":"北京市","district":"海淀区","street":"北四环西路","street_number":"北四环西路66号"}

  • 相关阅读:
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列(important!)
    从上往下打印二叉树
    最小的k个数(important!)
    扑克牌顺子
    栈的压入、弹出序列(important!)
    和为s的连续正数序列(important!)
    数组中只出现一次的数字
    fgets()函数以及fputs()函数
    C语言中的指针
  • 原文地址:https://www.cnblogs.com/pxblog/p/12916950.html
Copyright © 2020-2023  润新知