Android百度地图开发

本文详细介绍了在Android项目中使用百度地图SDK的过程,包括初始化、定位、绘制Marker、线段、圆、文字、InfoWindow,以及实现定位动画、缩放地图、3D效果等功能。还分享了自定义Bitmap Marker、画纹理线、计算新坐标点和坐标系转换的实用技巧。
摘要由CSDN通过智能技术生成

开发项目经常用到百度地图sdk,

先在百度地图开发平台,注册账户,创建应用,获取AK

然后根据需要下载sdk,配置Android Studio

 具体的接入过程,可以直接查阅官方文档Android地图SDK | 百度地图API SDK (baidu.com)

目录

准备工作

定位信息

画Marker

用png等图片画Marker

用资源文件画marker

自己创建Bitmap画Marker

画线

线段

​编辑

纹理线

画圆

画文字

画InfoWindow

定位动画

Zoom地图

工具类

根据角度和距离计算另一个点

坐标系转换

总结

准备工作

MyApplication的onCreate中初始化

fun initBaiduMap(){
        // 是否同意隐私政策,默认为false
        SDKInitializer.setAgreePrivacy(instance, true)
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        SDKInitializer.initialize(instance)
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL)
    }

Activity中,具体使用,onCreate中先申请权限

    private fun requestLocationPermission() {
        requestPermission(
            arrayOf(
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
            ), REQUEST_PERMISSION_LOCATION
        )
    }

申请权限成功之后开启定位

    /**
     * 开启定位
     */
    private fun startBaiduMapLocationClient() {
        if (mLocationClient != null && mLocationClient!!.isStarted) {
            return
        }
        LocationClient.setAgreePrivacy(true)//同意隐私协议
        binding.mapView.map.isMyLocationEnabled = true
        binding.mapView.showZoomControls(false)//设置是否显示放大缩小按钮
        binding.mapView.map.uiSettings.isRotateGesturesEnabled = false//设置地图不能旋转
        mLocationClient = LocationClient(this)//声明LocationClient类
        mLocationClient?.registerLocationListener(MyLocationListener())//注册监听
        mLocationClient?.locOption = LocationClientOption().also {
            it.openGps = true//允许GPS
            it.coorType = "bd09ll"//坐标类型,和MyApplication中的设置成一样,两边都设置一下
            it.setScanSpan(1000)//心跳频率1s,这个设置了之后,地图会每隔设定时间自动定位
            it.setIsNeedAddress(true)//是否需要地址信息
            it.setIsNeedLocationDescribe(true)//是否需要位置描述信息
            it.setIsNeedLocationPoiList(false)//获得周边POI信息
        }
        mLocationClient?.start()
        //地图上线段(测量记录)点击事件监听
        binding.mapView.map.setOnPolylineClickListener(object : OnPolylineClickListener{
            override fun onPolylineClick(polyline: Polyline?): Boolean {
                Log.e(MyConstant.TAG, "setOnPolylineClickListener polyline")
                showPolylineDialog(polyline)
                return true
            }
        })
        //点击Marker的监听事件
        binding.mapView.map.setOnMarkerClickListener(object : OnMarkerClickListener{
            override fun onMarkerClick(marker: Marker?): Boolean {
                Log.e(MyConstant.TAG, "setOnMarkerClickListener marker")
                showMarkerInfoWindow(marker)
                return true
            }
        })
        //滑动地图的监听事件
        binding.mapView.map.setOnMapTouchListener(object : OnMapTouchListener{
            override fun onTouch(p0: MotionEvent?) {

            }

        })
    }

获取到定位的监听事件

    inner class MyLocationListener : BDAbstractLocationListener() {
        override fun onReceiveLocation(location: BDLocation?) {
            //mapView 销毁后不在处理新接收的位置
            if (location == null) {
                return
            }
            //更新了定位信息
            realLocation = location
            drawLocationMark(LatLng(location.latitude,location.longitude))
        }
    }

另外Activity的生命周期中,也要对mLocationClient做处理

    override fun onRestart() {
        super.onRestart()
        requestLocationPermission()
    }

    override fun onStart() {
        super.onStart()
        mLocationClient?.start()
    }

    override fun onStop() {
        super.onStop()
        mLocationClient?.stop()
    }

    override fun onDestroy() {
        super.onDestroy()
        mLocationClient?.stop()
        mLocationClient = null
    }

下面就是在地图上写写画画了。

定位信息

每次onReceiveLocation监听到新的定位信息,调用,可显示设备的当前定位,这个定位是不需要clear的,地图自动变更

    /**
     * 这个是画的是定位位置
     */
    private fun drawLocationMark(point: LatLng){
        val bitmap = BitmapDescriptorFactory
            .fromResource(R.mipmap.icon_location)
        val locData = MyLocat
  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值