精华内容
下载资源
问答
  • 百度地图多边型覆盖物对区域进行覆盖选择和自定义覆盖物
  • 相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标相距过远,导致在视觉上看Marker移动就像“僵尸跳”一样,一蹦一蹦的给...
  • 自己用心二次制作的百度地图API开发定位小图标,内含多种样式与不同颜色的(marker)标注,很实用哦,百度地图二次开发必备,分享给你们!
  • //百度地图+定位+marker比较简单 我就不放到全局去了 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_show_map); //获取地图控件引用 mMapView = (MapView) ...

    配置环境

    1.获取AppKey

    1.创建应用地址:http://lbsyun.baidu.com/apiconsole/key


    2.创建应用:


    3.获取SHA1值,首先cmd打开dos窗口



    4.cd .android 切换到 .android目录

     

    5.使用keytool -list -v -keystore debug.keystore获取指纹整数中的SHA1值,输入口令直接回车或者输入android即可:



    6.得到的指纹整数SHA1值



    7.获取应用的包名(PackageName):

    这个是包名 PackageName

    8.把SHA1和PackageName放到对应的位置点击确定,得到APPKEY


    2.配置AndroidManifest.xml文件

    1.设置你的APPKEY

    <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="你的 AppKey" />


    2.添加用户权限

    <!-- 百度地图需要的权限 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    3.基础地图实现

    效果图

    1.在布局文件添加地图控件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.demo.baidumapblog.ShowMapActivity">
    
        <com.baidu.mapapi.map.MapView
            android:id="@+id/bmapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true" />
    
    </RelativeLayout>

    2.初始化地图控件并管理控件的生命周期

    package com.demo.baidumapblog;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.MapView;
    
    public class ShowMapActivity extends AppCompatActivity {
    
        private MapView mMapView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext
            //注意该方法要再setContentView方法之前实现
            //使用百度地图的任何功能都需要先初始化这段代码  最好放在全局中进行初始化
            //百度地图+定位+marker比较简单 我就不放到全局去了
            SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_show_map);
            //获取地图控件引用
            mMapView = (MapView) findViewById(R.id.bmapView);
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
            mMapView.onDestroy();
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
            mMapView.onResume();
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
            mMapView.onPause();
        }
    }
    


    4.实现定位功能

    效果图  和基础地图没有什么区别 因为没有加中心点以及marker 但是已经获取到了经纬度坐标


    1.在AndroidManifest.xml中注册广播  注意这个广播一定要注册 否则定位会失败

    <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>

    2.添加定位需要的权限 去重之后的:

    <!-- 这个权限用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
        <!-- 这个权限用于访问GPS定位-->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
        <!-- 用于读取手机当前的状态-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
        <!-- SD卡读取权限,用户写入离线定位数据-->
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

    3.正式写代码 定位功能的全部代码:

    package com.demo.baidumapblog;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.location.Poi;
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.MapView;
    
    import java.util.List;
    
    public class ShowMapActivity extends AppCompatActivity {
    
        private MapView mMapView;
        public LocationClient mLocationClient = null;
        public BDLocationListener myListener = new MyLocationListener();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext
            //注意该方法要再setContentView方法之前实现
            //使用百度地图的任何功能都需要先初始化这段代码  最好放在全局中进行初始化
            //百度地图+定位+marker比较简单 我就不放到全局去了
            SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_show_map);
            //获取地图控件引用
            mMapView = (MapView) findViewById(R.id.bmapView);
    
            //声明LocationClient类
            mLocationClient = new LocationClient(getApplicationContext());
            //注册监听函数
            mLocationClient.registerLocationListener( myListener );
    
            //配置定位参数
            initLocation();
            //开始定位
            mLocationClient.start();
        }
    
        /**
         * 配置定位参数
         */
        private void initLocation(){
            LocationClientOption option = new LocationClientOption();
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
            );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
            option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
            int span=1000;
            option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
            option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
            option.setOpenGps(true);//可选,默认false,设置是否使用gps
            option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
            option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
            option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
            option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
            option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
            option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
            mLocationClient.setLocOption(option);
        }
    
        /**
         * 实现定位监听 位置一旦有所改变就会调用这个方法
         * 可以在这个方法里面获取到定位之后获取到的一系列数据
         */
        public class MyLocationListener implements BDLocationListener {
    
            private double lat;
            private double lon;
    
            @Override
            public void onReceiveLocation(BDLocation location) {
                //Receive Location
                StringBuffer sb = new StringBuffer(256);
                sb.append("time : ");
                sb.append(location.getTime());
                sb.append("\nerror code : ");
                sb.append(location.getLocType());
                sb.append("\nlatitude : ");
                sb.append(location.getLatitude());
                sb.append("\nlontitude : ");
                sb.append(location.getLongitude());
                sb.append("\nradius : ");
                sb.append(location.getRadius());
                lat = location.getLatitude();
                lon = location.getLongitude();
                if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
                    sb.append("\nspeed : ");
                    sb.append(location.getSpeed());// 单位:公里每小时
                    sb.append("\nsatellite : ");
                    sb.append(location.getSatelliteNumber());
                    sb.append("\nheight : ");
                    sb.append(location.getAltitude());// 单位:米
                    sb.append("\ndirection : ");
                    sb.append(location.getDirection());// 单位度
                    sb.append("\naddr : ");
                    sb.append(location.getAddrStr());
                    sb.append("\ndescribe : ");
                    sb.append("gps定位成功");
    
                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
                    sb.append("\naddr : ");
                    sb.append(location.getAddrStr());
                    //运营商信息
                    sb.append("\noperationers : ");
                    sb.append(location.getOperators());
                    sb.append("\ndescribe : ");
                    sb.append("网络定位成功");
                } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
                    sb.append("\ndescribe : ");
                    sb.append("离线定位成功,离线定位结果也是有效的");
                } else if (location.getLocType() == BDLocation.TypeServerError) {
                    sb.append("\ndescribe : ");
                    sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                    sb.append("\ndescribe : ");
                    sb.append("网络不同导致定位失败,请检查网络是否通畅");
                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                    sb.append("\ndescribe : ");
                    sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
                }
                sb.append("\nlocationdescribe : ");
                sb.append(location.getLocationDescribe());// 位置语义化信息
                List<Poi> list = location.getPoiList();// POI数据
                if (list != null) {
                    sb.append("\npoilist size = : ");
                    sb.append(list.size());
                    for (Poi p : list) {
                        sb.append("\npoi= : ");
                        sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
                    }
                }
                Log.v("pcw","lat : " + lat+" lon : " + lon);
                Log.i("BaiduLocationApiDem", sb.toString());
            }
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
            mMapView.onDestroy();
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
            mMapView.onResume();
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
            mMapView.onPause();
        }
    }
    

    4.声明LocationClient类 并注册监听函数

    //声明LocationClient类
            mLocationClient = new LocationClient(getApplicationContext());
            //注册监听函数
            mLocationClient.registerLocationListener( myListener );
    

    5.配置定位参数

    /**
         * 配置定位参数
         */
        private void initLocation(){
            LocationClientOption option = new LocationClientOption();
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
            );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
            option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
            int span=1000;
            option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
            option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
            option.setOpenGps(true);//可选,默认false,设置是否使用gps
            option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
            option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
            option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
            option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
            option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
            option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
            mLocationClient.setLocOption(option);
        }


    6.实现定位监听

     /**
         * 实现定位监听 位置一旦有所改变就会调用这个方法
         * 可以在这个方法里面获取到定位之后获取到的一系列数据
         */
        public class MyLocationListener implements BDLocationListener {
    
            private double lat;
            private double lon;
    
            @Override
            public void onReceiveLocation(BDLocation location) {
                //Receive Location
                StringBuffer sb = new StringBuffer(256);
                sb.append("time : ");
                sb.append(location.getTime());
                sb.append("\nerror code : ");
                sb.append(location.getLocType());
                sb.append("\nlatitude : ");
                sb.append(location.getLatitude());
                sb.append("\nlontitude : ");
                sb.append(location.getLongitude());
                sb.append("\nradius : ");
                sb.append(location.getRadius());
                lat = location.getLatitude();
                lon = location.getLongitude();
                if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
                    sb.append("\nspeed : ");
                    sb.append(location.getSpeed());// 单位:公里每小时
                    sb.append("\nsatellite : ");
                    sb.append(location.getSatelliteNumber());
                    sb.append("\nheight : ");
                    sb.append(location.getAltitude());// 单位:米
                    sb.append("\ndirection : ");
                    sb.append(location.getDirection());// 单位度
                    sb.append("\naddr : ");
                    sb.append(location.getAddrStr());
                    sb.append("\ndescribe : ");
                    sb.append("gps定位成功");
    
                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
                    sb.append("\naddr : ");
                    sb.append(location.getAddrStr());
                    //运营商信息
                    sb.append("\noperationers : ");
                    sb.append(location.getOperators());
                    sb.append("\ndescribe : ");
                    sb.append("网络定位成功");
                } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
                    sb.append("\ndescribe : ");
                    sb.append("离线定位成功,离线定位结果也是有效的");
                } else if (location.getLocType() == BDLocation.TypeServerError) {
                    sb.append("\ndescribe : ");
                    sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                    sb.append("\ndescribe : ");
                    sb.append("网络不同导致定位失败,请检查网络是否通畅");
                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                    sb.append("\ndescribe : ");
                    sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
                }
                sb.append("\nlocationdescribe : ");
                sb.append(location.getLocationDescribe());// 位置语义化信息
                List<Poi> list = location.getPoiList();// POI数据
                if (list != null) {
                    sb.append("\npoilist size = : ");
                    sb.append(list.size());
                    for (Poi p : list) {
                        sb.append("\npoi= : ");
                        sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
                    }
                }
                Log.v("pcw","lat : " + lat+" lon : " + lon);
                Log.i("BaiduLocationApiDem", sb.toString());
            }
        }

    5.设置中心点和marker

    效果图


    1.基础地图+定位+设置中心点+marker 所有代码


    package com.demo.baidumapblog;
    
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.location.Poi;
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.MapStatus;
    import com.baidu.mapapi.map.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.model.LatLng;
    
    import java.util.List;
    
    public class ShowMapActivity extends AppCompatActivity {
    
        private MapView mMapView;
    
        private boolean isFirstLocation = true;
    
        public LocationClient mLocationClient = null;
        public BDLocationListener myListener = new MyLocationListener();
        private BaiduMap mBaiduMap;
    
        private double lat;
        private double lon;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext
            //注意该方法要再setContentView方法之前实现
            //使用百度地图的任何功能都需要先初始化这段代码  最好放在全局中进行初始化
            //百度地图+定位+marker比较简单 我就不放到全局去了
            SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_show_map);
            //获取地图控件引用
            mMapView = (MapView) findViewById(R.id.bmapView);
            //获取BaiduMap对象
            mBaiduMap = mMapView.getMap();
            //声明LocationClient类
            mLocationClient = new LocationClient(getApplicationContext());
            //注册监听函数
            mLocationClient.registerLocationListener(myListener);
    
            //配置定位参数
            initLocation();
            //开始定位
            mLocationClient.start();
    
        }
    
    
        /**
         * 添加marker
         */
        private void setMarker() {
            Log.v("pcw","setMarker : lat : "+ lat+" lon : " + lon);
            //定义Maker坐标点
            LatLng point = new LatLng(lat, lon);
            //构建Marker图标
            BitmapDescriptor bitmap = BitmapDescriptorFactory
                    .fromResource(R.drawable.location_marker);
            //构建MarkerOption,用于在地图上添加Marker
            OverlayOptions option = new MarkerOptions()
                    .position(point)
                    .icon(bitmap);
            //在地图上添加Marker,并显示
            mBaiduMap.addOverlay(option);
        }
    
        /**
         * 设置中心点
         */
        private void setUserMapCenter() {
            Log.v("pcw","setUserMapCenter : lat : "+ lat+" lon : " + lon);
            LatLng cenpt = new LatLng(lat,lon);
            //定义地图状态
            MapStatus mMapStatus = new MapStatus.Builder()
                    .target(cenpt)
                    .zoom(18)
                    .build();
            //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
            //改变地图状态
            mBaiduMap.setMapStatus(mMapStatusUpdate);
    
        }
    
        /**
         * 配置定位参数
         */
        private void initLocation(){
            LocationClientOption option = new LocationClientOption();
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
            );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
            option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
            int span=1000;
            option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
            option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
            option.setOpenGps(true);//可选,默认false,设置是否使用gps
            option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
            option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
            option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
            option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
            option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
            option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
            mLocationClient.setLocOption(option);
        }
    
        /**
         * 实现定位监听 位置一旦有所改变就会调用这个方法
         * 可以在这个方法里面获取到定位之后获取到的一系列数据
         */
        public class MyLocationListener implements BDLocationListener {
    
            @Override
            public void onReceiveLocation(BDLocation location) {
                //Receive Location
                StringBuffer sb = new StringBuffer(256);
                sb.append("time : ");
                sb.append(location.getTime());
                sb.append("\nerror code : ");
                sb.append(location.getLocType());
                sb.append("\nlatitude : ");
                sb.append(location.getLatitude());
                sb.append("\nlontitude : ");
                sb.append(location.getLongitude());
                sb.append("\nradius : ");
                sb.append(location.getRadius());
    
                if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
                    sb.append("\nspeed : ");
                    sb.append(location.getSpeed());// 单位:公里每小时
                    sb.append("\nsatellite : ");
                    sb.append(location.getSatelliteNumber());
                    sb.append("\nheight : ");
                    sb.append(location.getAltitude());// 单位:米
                    sb.append("\ndirection : ");
                    sb.append(location.getDirection());// 单位度
                    sb.append("\naddr : ");
                    sb.append(location.getAddrStr());
                    sb.append("\ndescribe : ");
                    sb.append("gps定位成功");
    
                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
                    sb.append("\naddr : ");
                    sb.append(location.getAddrStr());
                    //运营商信息
                    sb.append("\noperationers : ");
                    sb.append(location.getOperators());
                    sb.append("\ndescribe : ");
                    sb.append("网络定位成功");
                } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
                    sb.append("\ndescribe : ");
                    sb.append("离线定位成功,离线定位结果也是有效的");
                } else if (location.getLocType() == BDLocation.TypeServerError) {
                    sb.append("\ndescribe : ");
                    sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                    sb.append("\ndescribe : ");
                    sb.append("网络不同导致定位失败,请检查网络是否通畅");
                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                    sb.append("\ndescribe : ");
                    sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
                }
                sb.append("\nlocationdescribe : ");
                sb.append(location.getLocationDescribe());// 位置语义化信息
                List<Poi> list = location.getPoiList();// POI数据
                if (list != null) {
                    sb.append("\npoilist size = : ");
                    sb.append(list.size());
                    for (Poi p : list) {
                        sb.append("\npoi= : ");
                        sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
                    }
                }
                lat = location.getLatitude();
                lon = location.getLongitude();
                
                //这个判断是为了防止每次定位都重新设置中心点和marker
                if(isFirstLocation){
                    isFirstLocation = false;
                    setMarker();
                    setUserMapCenter();
                }
                Log.v("pcw","lat : " + lat+" lon : " + lon);
                Log.i("BaiduLocationApiDem", sb.toString());
            }
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
            mMapView.onDestroy();
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
            mMapView.onResume();
        }
    
        /**
         * 必须要实现
         */
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
            mMapView.onPause();
        }
    }
    

    2.设置中心点的代码:

     /**
         * 设置中心点
         */
        private void setUserMapCenter() {
            Log.v("pcw","setUserMapCenter : lat : "+ lat+" lon : " + lon);
            LatLng cenpt = new LatLng(lat,lon);
            //定义地图状态
            MapStatus mMapStatus = new MapStatus.Builder()
                    .target(cenpt)
                    .zoom(18)
                    .build();
            //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
            //改变地图状态
            mBaiduMap.setMapStatus(mMapStatusUpdate);
    
        }

    3.添加marker:

    /**
         * 添加marker
         */
        private void setMarker() {
            Log.v("pcw","setMarker : lat : "+ lat+" lon : " + lon);
            //定义Maker坐标点
            LatLng point = new LatLng(lat, lon);
            //构建Marker图标
            BitmapDescriptor bitmap = BitmapDescriptorFactory
                    .fromResource(R.drawable.location_marker);
            //构建MarkerOption,用于在地图上添加Marker
            OverlayOptions option = new MarkerOptions()
                    .position(point)
                    .icon(bitmap);
            //在地图上添加Marker,并显示
            mBaiduMap.addOverlay(option);
        }



    展开全文
  • 该文件包括拖动地图根据中心点定位,根据定位显示附近的信息,自动搜索提示等功能
  • 资源博客地址:https://blog.csdn.net/lanrenxiaowen/article/details/83375248
  • 百度地图城市中心

    2018-07-30 09:59:54
    百度地图城市中心坐标,百度地图全国城市中心坐标级默认显示级数JSON数据
  • 百度定位加POI搜索附近兴趣,自定义兴趣图标,代码经过验证,稳定,基本可以直接导入项目,代码中有详细注释
  • 百度地图根据地名定位,输入地名,在地图上定位(附源代码).zip
  • 主要介绍了Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡的相关资料,需要的朋友可以参考下
  • 在开发移动端 web 或者webapp时,使用百度地图 API 的过程中,经常需要通过手机定位获取当前位置并在地图上居中显示出来,这就需要用到html5的地理定位功能。 复制代码代码如下: navigator.geolocation....
  • 最新的百度地图api方法 实现了百度地图定位功能+百度地图周边浮点显示以及点击效果+详细文档
  • 百度地图SDK集成文档参考官方文档,这里贴出demo的代码: public class MainActivity extends AppCompatActivity { private MapView mMapView; private BaiduMap mBaiduMap; private LocationClient ...

    效果:

    在这里插入图片描述

    代码:

    百度地图SDK集成文档参考官方文档,这里贴出demo的代码:

    public class MainActivity extends AppCompatActivity {
    
        private MapView mMapView;
        private BaiduMap mBaiduMap;
        private LocationClient mLocationClient;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mMapView = findViewById(R.id.mapview);
            mBaiduMap = mMapView.getMap();
            mBaiduMap.setCompassEnable(true);
            mBaiduMap.setMyLocationEnabled(true);
            mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(19));
            mMapView.showZoomControls(false);
            //定位初始化
            mLocationClient = new LocationClient(this);
            //通过LocationClientOption设置LocationClient相关参数
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true); // 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setScanSpan(1000);
            option.setIsNeedAddress(true);
            //设置locationClientOption
            mLocationClient.setLocOption(option);
            //注册LocationListener监听器
            MyLocationListener myLocationListener = new MyLocationListener();
            mLocationClient.registerLocationListener(myLocationListener);
            //开启地图定位图层
            mLocationClient.start();
            mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
                @Override
                public void onMapStatusChangeStart(MapStatus mapStatus) {
    
                }
    
                @Override
                public void onMapStatusChangeStart(MapStatus mapStatus, int i) {
    
                }
    
                @Override
                public void onMapStatusChange(MapStatus mapStatus) {
    
                }
    
                @Override
                public void onMapStatusChangeFinish(MapStatus mapStatus) {
                    LatLng mCenterLatLng = mapStatus.target;
    //                double latitude = mCenterLatLng.latitude;
    //                double longitude = mCenterLatLng.longitude;
    //                mBaiduMap.clear();
    //                LatLng point = new LatLng(latitude, longitude);
    //                MarkerOptions options = new MarkerOptions().position(mCenterLatLng)
    //                        .icon(bitmapDescriptor);
    //                mBaiduMap.addOverlay(options);
                    //实例化一个地理编码查询对象
                    GeoCoder geoCoder = GeoCoder.newInstance();
                    //设置反地理编码位置坐标
                    ReverseGeoCodeOption op = new ReverseGeoCodeOption();
                    op.location(mCenterLatLng);
                    geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
                        @Override
                        public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
    
                        }
    
                        @Override
                        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
                            String address = reverseGeoCodeResult.getAddress();
                            if (TextUtils.isEmpty(address) || reverseGeoCodeResult.getLocation() == null) {
                                return;
                            }
                            ((TextView) findViewById(R.id.address)).setText(address);
                        }
                    });
                    geoCoder.reverseGeoCode(op);
                }
            });
        }
    
        public class MyLocationListener extends BDAbstractLocationListener {
            @Override
            public void onReceiveLocation(BDLocation location) {
                //mMapView 销毁后不在处理新接收的位置
                if (location == null || mMapView == null) {
                    return;
                }
                mLocationClient.stop();
                mLocationClient.unRegisterLocationListener(this);
                MyLocationData locData = new MyLocationData.Builder()
                        .accuracy(location.getRadius())
                        // 此处设置开发者获取到的方向信息,顺时针0-360
                        .direction(location.getDirection()).latitude(location.getLatitude())
                        .longitude(location.getLongitude()).build();
                mBaiduMap.setMyLocationData(locData);
                LatLng ll = new LatLng(location.getLatitude(),
                        location.getLongitude());
                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(u);
    
                String city = location.getCity();    //获取城市
                String district = location.getDistrict();    //获取区县
                String street = location.getStreet();    //获取街道信息
                String address = location.getAddress().address;
                ((TextView) findViewById(R.id.address)).setText(address);
            }
        }
    
        @Override
        protected void onResume() {
            mMapView.onResume();
            super.onResume();
        }
    
        @Override
        protected void onPause() {
            mMapView.onPause();
            super.onPause();
        }
    
        @Override
        protected void onDestroy() {
            mMapView.onDestroy();
            super.onDestroy();
        }
    }
    
    

    代码传送门

    展开全文
  • 百度滑动地图定位坐标的动态效果,坐标动态跳跃的效果,离线地图的导入,隐藏百度地图图标,隐藏缩放控件
  • android 百度地图定位中间篮圈

    千次阅读 2015-04-08 15:01:48
    然后我自己查了百度地图的文档,实验了一下, 其实那个大的篮圈是定位的图层,圈越小定位精度越高, 当然我说的不是中间那个蓝色圆形图标, 把如下代码注释了: 在初始化定位的时候 // 开启定位图层  ...

    一直有人问定位的中间那个蓝圈是什么,怎么修改。

    然后我自己查了百度地图的文档,实验了一下,

    其实那个大的篮圈是定位的图层,圈越小定位精度越高,

    当然我说的不是中间那个蓝色圆形图标,

    把如下代码注释了:

    在初始化定位的时候

    // 开启定位图层
      mBaiduMap.setMyLocationEnabled(true);

    然后那个圆圈就没了

    展开全文
  • 百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/...
  • 主要介绍了html5定位并在百度地图上显示的示例,需要的朋友可以参考下
  • 百度地图,单点定位,指南针,自动回复所在位置,适用于android开发新手学习,应用,每句话有对应注解
  • 5.1百度地图的地图搜索兴趣 27 5.2百度地图的地图导航 28 5.3百度地图的公交路线站点查询 30 5.4百度地图定位当前所在地 31 5.5离线地图功能 34 5.6地理位置分享功能 36 第6章 结论 38 6.1 开发中遇到的问题 38 ...
  • android基于百度地图api接口的定位加标注 百度地图定位加标注DEMO
  • 百度地图API获取屏幕中心坐标,计算两距离定位当前位置,
  • 实现自动定位以及通过坐标定位的功能,6.0以上版本安装apk后无法定位,可在权限管理下打开定位权限
  • 简单的百度地图定位及覆盖物添加的Demo
  • 前一段时间研究百度地图路书,查了很多资料也看源码,总结了一下,动态改变标注的位置就类似于路书而且运动速度和轨迹可以随意控制,高速运动的标注也可以触发点击事件,添加多个互不影响其它标注和地图性能,可参考...
  • ip地址定位,标注多个,传递事件参数,单移动,地图单击事件。 等等
  • 百度地图定位(带图片)
  • 通过利用百度地图API进行当前位置的定位,并提供“普通”、“跟随”和“罗盘”三个选项。
  • 百度地图更改默认定位中心

    千次阅读 2018-10-18 11:11:02
    //设定中心坐标 LatLng cenpt = new LatLng(30.259244461536102,120.2193754157201); //定义地图状态 MapStatus mMapStatus = new MapStatus.Builder() .target(cenpt) .zoom(18) .build(); //定义MapStatusUpdate...
    //设定中心点坐标
    LatLng cenpt = new LatLng(30.259244461536102,120.2193754157201);
    //定义地图状态
    MapStatus mMapStatus = new MapStatus.Builder()
    .target(cenpt)
    .zoom(18)
    .build();
    //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
    MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
    //改变地图状态
    mBaiduMap.setMapStatus(mMapStatusUpdate);

     

    展开全文
  • 基于百度sdk的一套程序,可以定位到当前位置,在地图上标注当前位置。可以手动在地图上选择,点击标注,获取标注的信息。http://blog.csdn.net/wangkaichenjuan/article/details/50515504
  • Echarts+百度地图 展示标注详细信息 ,可放大查看标注具体位置~

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,588
精华内容 7,035
关键字:

百度地图设置定位点