Android Studio地图开发之根据地点查找、定位(百度地图API)

简述

Android Studio开发地图时(用的百度地图),需要根据地址查找地图,但是百度地图API好像没有直接给地址直接跳转到相应地图的简单操作,只给了根据经纬度跳转到相应位置。没细看,不确定。所以在网上查找了一些办法,试了几个,找到了一个好用简单的,下面给出了链接。

根据地址返回经纬度,用到了http连接

  • 代码java
package addresstoll_util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
 * Created by wanglei on 2017/6/20.
 * 根据百度地图API,根据地址得到经纬度
 */
public class AddressToLatitudeLongitude {
    private String address = "哈尔滨";//地址
    private double Latitude = 45.7732246332393;//纬度
    private double Longitude = 126.65771685544611;//经度

    public AddressToLatitudeLongitude(String addr_str) {
            this.address = addr_str;
    }
    /*
     *根据地址得到地理坐标
     */
    public void getLatAndLngByAddress(){
        String addr = "";
        String lat = "";
        String lng = "";
        try {
            addr = java.net.URLEncoder.encode(address,"UTF-8");//编码
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String url = String.format("http://api.map.baidu.com/geocoder/v2/?"
                +"address=%s&ak=4rcKAZKG9OIl0wDkICSLx8BA&output=json",addr);
        URL myURL = null;
        URLConnection httpsConn = null;
        //进行转码
        try {
            myURL = new URL(url);
        } catch (MalformedURLException e) {
                e.printStackTrace();
        }
        try {
            httpsConn = (URLConnection) myURL.openConnection();//建立连接
            if (httpsConn != null) {
                InputStreamReader insr = new InputStreamReader(//传输数据
                        httpsConn.getInputStream(), "UTF-8");
                BufferedReader br = new BufferedReader(insr);
                String data = null;
                if ((data = br.readLine()) != null) {
                    System.out.println(data);
                    //这里的data为以下的json格式字符串,因为简单,所以就不使用json解析了,直接字符串处理
                    //{"status":0,"result":{"location":{"lng":118.77807440802562,"lat":32.05723550180587},"precise":0,"confidence":12,"level":"城市"}}
                    lat = data.substring(data.indexOf("\"lat\":")+("\"lat\":").length(), data.indexOf("},\"precise\""));
                    lng = data.substring(data.indexOf("\"lng\":")+("\"lng\":").length(), data.indexOf(",\"lat\""));
                }
                insr.close();
                br.close();
            }
        } catch (IOException e) {
                e.printStackTrace();
        }
        this.Latitude = Double.parseDouble(lat);
        this.Longitude = Double.parseDouble(lng);
    }
    public Double getLatitude() {
            return this.Latitude;
    }
    public Double getLongitude() {
            return this.Longitude;
    }

    public static void main(String[] args) {
            AddressToLatitudeLongitude at = new AddressToLatitudeLongitude("安徽省亳州市亳州一中");
            at.getLatAndLngByAddress();
            System.out.println(at.getLatitude() + " " + at.getLongitude());
    }
}
  • 结果截图
    这里写图片描述

Android Studio应用

  • button按钮响应操作部分代码
button_site.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        final String site_str = myEditText_site.getText().toString();
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                AddressToLatitudeLongitude at = new AddressToLatitudeLongitude(site_str);
                                getLocationByLL(at.getLatitude(), at.getLongitude());
                            }
                        }).start();
                        //隐藏前面地址输入区域
                        myLinearLayout2.setVisibility(View.GONE);
                        //隐藏输入法键盘
                        InputMethodManager imm = (InputMethodManager) getSystemService(
                                Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    }
                });
  • 根据经纬度,地图跳转到相应位置代码
/*
     *根据经纬度前往
     */
    public void getLocationByLL(double la, double lg)
    {
        //地理坐标的数据结构
        LatLng latLng = new LatLng(la, lg);
        //描述地图状态将要发生的变化,通过当前经纬度来使地图显示到该位置
        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
        myBaiduMap.setMapStatus(msu);
    }
  • app效果截图
    Android Studio地图开发之根据地点查找、定位(百度地图API)_第1张图片
    Android Studio地图开发之根据地点查找、定位(百度地图API)_第2张图片

注意

android 主线程不能做http申请,必须在子线程下,切记!!!

参考如下链接

java调用百度地图API根据地理位置中文获取经纬度

你可能感兴趣的:(Android,Studio)