android百度地图选点/maker标记/显示默认位置

文档说明:使用百度地图,实现 设置默认地图中心点+地图选点+maker标记 功能(后面会增加对该点进行poi搜索功能,实现获取更详细的的位置信息,等一系列常用功能模块实现)。文中出现不对的地方,欢迎指正。后面持续更新。

一、首先配置地图,这个就不细说了,参考官方api文档,下面给出直通车。

1.注册和获取秘钥
2.Android Studio工程配置
3.显示地图

二、设置默认位置

mBaiduMap.setMapStatus(MapStatusUpdateFactory
                .newLatLngZoom(new LatLng(Double.valueOf(Config.latitude),
                        Double.valueOf(Config.longitude)), 18.0f));

三、实现地图的监听,设置mark标记,获取地理位置address

mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                //获取经纬度
                double latitude = latLng.latitude;
                double longitude = latLng.longitude;
                //清除图层
                mBaiduMap.clear();
                // 定义Maker坐标点
                LatLng point = new LatLng(latitude, longitude);
                //定义options设置maker属性
                OverlayOptions options = new MarkerOptions().position(point).icon(bitmap);
                //将maker添加到地图
                mBaiduMap.addOverlay(options);
                //实例化一个地理编码查询对象
                GeoCoder geoCoder = GeoCoder.newInstance();
                //设置反地理编码位置坐标
                ReverseGeoCodeOption op = new ReverseGeoCodeOption();
                op.location(point);
                //发起反地理编码请求(经纬度->地址信息)
                geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
                    @Override
                    public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
                        if (geoCodeResult == null
                                || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                            Toast.makeText(getContext(), "没有检测到结果", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
                        if (reverseGeoCodeResult == null
                                || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                            Toast.makeText(getContext(), "没有检测到结果", Toast.LENGTH_SHORT).show();
                        } else {
                            //获取点击的坐标地址
                            String address = reverseGeoCodeResult.getAddressDetail().countryName
                                    + reverseGeoCodeResult.getAddressDetail().province
                                    + reverseGeoCodeResult.getAddressDetail().city
                                    + reverseGeoCodeResult.getAddressDetail().district
                                    + reverseGeoCodeResult.getAddressDetail().street
                                    + reverseGeoCodeResult.getAddressDetail().town;
                            //这里获取到的address显示到控件中。
                            tvAddress.setText(address);
                        }
                    }
                });
                geoCoder.reverseGeoCode(op);
                // 释放实例
                geoCoder.destroy();
            }

            @Override
            public boolean onMapPoiClick(MapPoi mapPoi) {
                return false;
            }
        });

四、下面贴出完整代码

MainActivity

public class MainActivity extends BaseActivity {

    private TextureMapView mMapView;
    private BaiduMap mBaiduMap;
    private BitmapDescriptor bitmap;

    private TextView tvAddress;

    @Override
    public void initView() {
        setContentView(R.layout.activity_main);
        mMapView = findViewById(R.id.MapView);
        mBaiduMap = mMapView.getMap();
        tvAddress = findViewById(R.id.tv_adress);


        initMap();
    }

    @Override
    public void initData() {
        addMaker(bitmap);
    }

    /**
     * 初始化配置地图
     */
    private void initMap() {
        //生成maker点图标
        bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_map_marker);
        // 隐藏LOGO
        View child = mMapView.getChildAt(1);
        if (child != null && (child instanceof ImageView || child instanceof ZoomControls)) {
            child.setVisibility(View.INVISIBLE);
        }
        // 隐藏比例尺
        mMapView.showScaleControl(false);
        // 隐藏缩放控件
        mMapView.showZoomControls(false);

        //开启交通图
//        mBaiduMap.setTrafficEnabled(true);
        //设置地图显示类型   普通/卫星/空白
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

        //设置地图的默认显示地点和缩放级别
        mBaiduMap.setMapStatus(MapStatusUpdateFactory
                .newLatLngZoom(new LatLng(Double.valueOf(Config.latitude),
                        Double.valueOf(Config.longitude)), 18.0f));

        //监听
        mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                //获取经纬度
                double latitude = latLng.latitude;
                double longitude = latLng.longitude;
                //清除图层
                mBaiduMap.clear();
                // 定义Maker坐标点
                LatLng point = new LatLng(latitude, longitude);
                //定义options设置maker属性
                OverlayOptions options = new MarkerOptions().position(point).icon(bitmap);
                //将maker添加到地图
                mBaiduMap.addOverlay(options);
                //实例化一个地理编码查询对象
                GeoCoder geoCoder = GeoCoder.newInstance();
                //设置反地理编码位置坐标
                ReverseGeoCodeOption op = new ReverseGeoCodeOption();
                op.location(point);
                //发起反地理编码请求(经纬度->地址信息)
                geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
                    @Override
                    public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
                        if (geoCodeResult == null
                                || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                            Toast.makeText(getContext(), "没有检测到结果", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
                        if (reverseGeoCodeResult == null
                                || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                            Toast.makeText(getContext(), "没有检测到结果", Toast.LENGTH_SHORT).show();
                        } else {
                            //获取点击的坐标地址
                            String address = reverseGeoCodeResult.getAddressDetail().countryName
                                    + reverseGeoCodeResult.getAddressDetail().province
                                    + reverseGeoCodeResult.getAddressDetail().city
                                    + reverseGeoCodeResult.getAddressDetail().district
                                    + reverseGeoCodeResult.getAddressDetail().street
                                    + reverseGeoCodeResult.getAddressDetail().town;
                              tvAddress.setText(address);
//                            Toast.makeText(MainActivity.this, "位置:" + address, Toast.LENGTH_LONG).show();
                        }
                    }
                });
                geoCoder.reverseGeoCode(op);
                // 释放实例
                geoCoder.destroy();
            }

            @Override
            public boolean onMapPoiClick(MapPoi mapPoi) {
                return false;
            }
        });
    }

    private void addMaker(BitmapDescriptor bitmap) {
        //构建中心点
        LatLng point = new LatLng(Double.valueOf(Config.latitude), Double.valueOf(Config.longitude));
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions().position(point).icon(bitmap).draggable(true);
        //在地图上添加Marker,并显示
        mBaiduMap.addOverlay(option);
    }


    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }
}

activity_main.xml




    

    
    


用到的图标icon_map_marker


icon_map_marker.png

你可能感兴趣的:(android百度地图选点/maker标记/显示默认位置)