Android开发:如何通过已知经纬度获取到该地点的详细地址

1、测试Activity代码如下:

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                //Do your coding here with the formatted_address
                Toast.makeText(TestActivity.this, formatted_address, Toast.LENGTH_SHORT).show();
            }
        };
        download(handler, 39.915378, 116.403694, "此处字符串填写的是你申请百度地图sdk应用时自动生成的安全码,二选一即可");
    }

    private String formatted_address;

    public void download(final Handler handler, final Double latitude, final Double longitude, final String mCode) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //URL
                    String url_s = "http://api.map.baidu.com/geocoder/v2/?ak=IKp1vq8GAUq69GQh92GhXuLMdLqTXEYw&location=" + latitude + "," + longitude + "&output=json&pois=1&mcode=" + mCode;
                    URL url = new URL(url_s);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    //设置连接属性。不喜欢的话直接默认也可以
                    conn.setConnectTimeout(5000);  //设置超时
                    conn.setUseCaches(false);  //数据不多不用缓存了

                    //这里连接了
                    conn.connect();
                    //这里才真正获取到了数据
                    InputStream inputStream = conn.getInputStream();
                    InputStreamReader input = new InputStreamReader(inputStream);
                    BufferedReader buffer = new BufferedReader(input);
                    if (conn.getResponseCode() == 200) {  //200意味着返回的是"OK"
                        String inputLine;
                        StringBuffer resultData = new StringBuffer();  //StringBuffer字符串拼接很快
                        while ((inputLine = buffer.readLine()) != null) {
                            resultData.append(inputLine);
                        }
                        String text = resultData.toString();
                        parseJson(text);
                        handler.sendEmptyMessage(1);
                        Log.v("out---------------->", text);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private String parseJson(String text) {
        try {
            //这里的text就是上边获取到的数据,一个String.
            JSONObject jsonObject = new JSONObject(text);
            JSONObject result = jsonObject.getJSONObject("result");
            formatted_address = result.getString("formatted_address");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2、其中download方法的参数mCode指的是你申请百度地图sdk应用时自动生成的安全码,二选一即可,如下图所示:

3、其中download方法中的参数latitude和longitude分别为纬度和经度,而private属性formatted_address则是已知经纬度的详细地址字符串。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值