前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >百度地图在Android中的使用

百度地图在Android中的使用

作者头像
提莫队长
发布2019-02-21 11:06:01
1.1K0
发布2019-02-21 11:06:01
举报
文章被收录于专栏:刘晓杰刘晓杰

有关百度地图的使用,(http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download)这个链接说明的很详细了,包括环境的搭建,接下来我主要说明我的demo的几个功能。最后给出源码。

1.引入百度地图

代码语言:javascript
复制
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.main);

mMapView = (MapView) findViewById(R.id.bmapView);

// 设置放大比例
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mBaiduMap.setMapStatus(msu);

这个官方文档上有详细说明

2.定位以及方向定位,模式的切换

locate函数实现定位和方向定位的(关键代码被我抠出来了)

代码语言:javascript
复制
        // 注册监听器
        mLocationListener = new MyLocationListener();
        mLocationClient = new LocationClient(this);
        mLocationClient.registerLocationListener(mLocationListener);

        // 配置定位SDK参数
        LocationClientOption option = new LocationClientOption();
        // 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setLocationMode(LocationMode.Hight_Accuracy);
        option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
        // 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setScanSpan(1000);
        option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
        option.setOpenGps(true);// 可选,默认false,设置是否使用gps
        mLocationClient.setLocOption(option);

        // 方向传感器,用来控制定位图标所指的方向
        myOrientationListener = new MyOrientationListener(
                getApplicationContext());
        myOrientationListener
                .setOnOrientationListenr(new OnOrientationListenr() {
                    @Override
                    public void onOrientationChanged(float x) {
                        mCurrentX = x;
                    }
                });

其中,MyOrientationListener.java文件中定义了一个MyOrientationListener用来通知主界面

代码语言:javascript
复制
public MyOrientationListener(Context context) {
    super();
    this.context = context;
}
public interface OnOrientationListenr {
    void onOrientationChanged(float x);
}

MyOrientationListener.java就是引入方向传感器来定位方向的。 但是Sensor.TYPE_ORIENTATION已过期 所以参考了http://blog.csdn.net/android_qhdxuan/article/details/7454313

模式切换比较简单 就是点击菜单键多出来的三个XX模式(普通,跟随,罗盘) menu/main.xml

代码语言:javascript
复制
<item
        android:id="@+id/normal"
        android:showAsAction="never"
        android:title="@string/normal"/>

    <item
        android:id="@+id/follow"
        android:showAsAction="never"
        android:title="@string/follow"/>

    <item
        android:id="@+id/compass"
        android:showAsAction="never"
        android:title="@string/compass"/>

然后在onOptionsItemSelected中

代码语言:javascript
复制
        case R.id.normal:
            // 普通态: 更新定位数据时不对地图做任何操作
            mode = MyLocationConfiguration.LocationMode.NORMAL;
            break;
        case R.id.follow:
            // 跟随态,保持定位图标在地图中心
            mode = MyLocationConfiguration.LocationMode.FOLLOWING;
            break;
        case R.id.compass:
            // 罗盘态,显示定位方向圈,保持定位图标在地图中心
            mode = MyLocationConfiguration.COMPASS

3.添加覆盖物

初始化图层

代码语言:javascript
复制
    private void addOverLay(List<Info> infos) {
        mBaiduMap.clear();
        LatLng latLng = null;
        Marker marker = null;
        OverlayOptions options;
        for (Info info : infos) {
            latLng = new LatLng(info.getLatitude(), info.getLongtitude());
            options = new MarkerOptions().position(latLng).icon(mMaker)
                    .zIndex(5);
            marker = (Marker) mBaiduMap.addOverlay(options);
            Bundle bundle = new Bundle();
            bundle.putSerializable("info", info);
            marker.setExtraInfo(bundle);
        }
        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
        mBaiduMap.setMapStatus(msu);
    }

然后为地图上的Marker添加点击事件:

代码语言:javascript
复制
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                Bundle bundle = marker.getExtraInfo();
                Info info = (Info) bundle.getSerializable("info");

                // 设置显示的参数
                ((ImageView) marker_layout.findViewById(R.id.info_img))
                        .setImageResource(info.getImgId());
                ((TextView) marker_layout.findViewById(R.id.info_distance))
                        .setText(info.getDistance());
                ((TextView) marker_layout.findViewById(R.id.info_name))
                        .setText(info.getName());
                ((TextView) marker_layout.findViewById(R.id.info_zan))
                        .setText(info.getZan() + "");

                // 点击覆盖物显示文本信息
                BitmapDescriptor bd = BitmapDescriptorFactory
                        .fromResource(R.drawable.locate);
                final LatLng latLng = marker.getPosition();
                Point point = mBaiduMap.getProjection()
                        .toScreenLocation(latLng);
                LatLng ll = mBaiduMap.getProjection().fromScreenLocation(point);
                InfoWindow infoWindow = new InfoWindow(bd, ll, 0,
                        new InfoWindow.OnInfoWindowClickListener() {

                            @Override
                            public void onInfoWindowClick() {
                                mBaiduMap.hideInfoWindow();
                            }
                        });
                mBaiduMap.showInfoWindow(infoWindow);

                marker_layout.setVisibility(View.VISIBLE);

                MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(msu);
                return true;
            }
        });

最后添加地图的单击事件,隐藏出现的详细信息布局和InfoWindow

代码语言:javascript
复制
mBaiduMap.setOnMapClickListener(new OnMapClickListener() {
            @Override
            public boolean onMapPoiClick(MapPoi arg0) {
                return false;
            }

            @Override
            public void onMapClick(LatLng arg0) {
                marker_layout.setVisibility(View.INVISIBLE);
                mBaiduMap.hideInfoWindow();
            }
        });

源码地址:http://download.csdn.net/detail/lxj1137800599/9508084

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.引入百度地图
  • 2.定位以及方向定位,模式的切换
  • 3.添加覆盖物
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档