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

  • 这篇博客是在上一篇博客Android位置服务–BaiduMap的使用(1)的基础上实现的,如果有疑问,不妨先把上一篇博客看明白。
  • 这里我们实现的功能是能根据相应的地理位置名称,将其转化为坐标,同时在地图上相应的点上标记出来,同时可以将这些点通过折线连接在一起。
    Android位置服务--BaiduMap的使用(2)_第1张图片
    Android位置服务--BaiduMap的使用(2)_第2张图片

  • 总体的代码如下

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);
  • 这样就完成了上述的功能

你可能感兴趣的:(android,地图,baidumap,位置服务)