Android位置服务--BaiduMap的使用(2)

来源:互联网 发布:ipp6.0软件下载 编辑:程序博客网 时间:2024/05/21 06:20
  • 这篇博客是在上一篇博客Android位置服务–BaiduMap的使用(1)的基础上实现的,如果有疑问,不妨先把上一篇博客看明白。
  • 这里我们实现的功能是能根据相应的地理位置名称,将其转化为坐标,同时在地图上相应的点上标记出来,同时可以将这些点通过折线连接在一起。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • 总体的代码如下

public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private MapView mapView;    private LocationManager locationManager;    private Location location;    private Button button1,button2,button3;    //地图对象的实例    private BaiduMap baiduMap;    //搜索模块,也可以去掉地图模块独立使用    private GeoCoder search;    private List<LatLng> points;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //使用BaiduMap SDK        //在使用SDK个组件之前初始化context信息,传入ApplicationContext        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.activity_main);        init();        //初始化搜索模块,注册事件监听        search.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {            @Override            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {                //当未能找到搜索的位置,或者网络问题,无法找到结果的时候执行                if (geoCodeResult==null||geoCodeResult.error!= SearchResult.ERRORNO.NO_ERROR){                    Toast.makeText(MainActivity.this, "抱歉未找到结果", Toast.LENGTH_SHORT).show();                    return;                }                //设置我们搜素地点的图标标识                baiduMap.addOverlay(new MarkerOptions().position(geoCodeResult.getLocation()).icon(BitmapDescriptorFactory.fromResource(R.mipmap.red_dot)));                //设置我们当前的地图的中心点                baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(geoCodeResult.getLocation()));                String str=String.format("经度:%f 纬度%f",geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);                Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();                //传入经度和纬度                LatLng point = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);                points.add(point);            }            @Override            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {}        });    }    private void init() {        mapView= (MapView) findViewById(R.id.mapView);        //获取地图的对象实例        baiduMap=mapView.getMap();        //将搜索模块实例化        search=GeoCoder.newInstance();        button1= (Button) findViewById(R.id.button_address1);        button2= (Button) findViewById(R.id.button_address2);        button3= (Button) findViewById(R.id.button_line);        button1.setOnClickListener(this);        button2.setOnClickListener(this);        button3.setOnClickListener(this);        points=new ArrayList<>();    }    @Override    protected void onDestroy() {        super.onDestroy();        mapView.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        mapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        mapView.onPause();    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.button_address1:                search.geocode(new GeoCodeOption().city("北京市").address("海淀区中关村海龙大厦"));                break;            case R.id.button_address2:                search.geocode(new GeoCodeOption().city("北京市").address("西城区西便门"));                break;            case R.id.button_line:                //设置折现的属性:颜色,宽度,折线要穿过的点等信息                OverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);                //添加折线                baiduMap.addOverlay(ooPolyline);                break;        }    }}
  • 代码中已经有很详细的注释,这里就只在将划线的逻辑讲解一下
  • 首先,我们实例化一个全局的List对象,用于存放我们标记的点的信息
private List<LatLng> points;
  • 传入经度和纬度,获取点的实例
  • 同时将点放进集合
LatLng point = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);points.add(point);
  • 设置折现的属性:颜色,宽度,折线要穿过的点等信息
  • 添加折线
OverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);baiduMap.addOverlay(ooPolyline);
  • 这样就完成了上述的功能
0 0