百度地图

首先在此说明,这里的百度地图,或者其他的高德地图,谷歌地图等,这些SDK都是开源的,供所有感兴趣的朋友们免费使用。下面将介绍使用百度地图的步骤:

详细的步骤百度上说得很详细,可以进入网址(百度地图)[http://developer.baidu.com/map/index.php?title=androidsdk/guide/introduction]查看这里只对一些不清楚的地方进行描述:

1、申请密钥

这是不可缺少的,也是第一步。Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key
安全码由两部分获得:数字签名;包名

首先,新建项目,在项目中会有包名。例如: package=”com.my.administrator.mylocationdemo”

然后打开cmd,输入cd .android如:C:\Users\Administrator>cd .android 回车进入后,在输入keytool -list -v -keystore debug.keystore
然后再回车,得到如下信息:
这里写图片描述

其中,SHA1 后面的内容就是数字签名,点击鼠标右键,标记,选择后点击右键就是复制完成,然后将它粘贴到申请密钥的安全码中
这里写图片描述

提交后即可得到密钥。

2、配置环境:

Eclipse
  • 工程配置方法

第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加)。

第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。

通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:

  1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;

  2. Project -> clean-> clean all .

Android Studio
  • 工程配置方法

第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,放入libBaiduMapSDK_vX_X_X_X.so如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。

第二步:导入jar包。菜单栏选择File->Project Structor->Modules->Dependencies,点击+号,选择File dependency,选择jar包导入。

通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

注意:在上面配置完后,一定要记得导入jar包。

3、显示出百度地图

在官网上有详细的讲解【http://developer.baidu.com/map/index.php?title=androidsdk/guide/hellobaidumap

4、定位功能

可取网址【http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
在application标签中声明service组件,每个app拥有自己单独的定位service:

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

声明使用权限

<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

设置AcessKey

SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。

设置AccessKey,在application标签中加入

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="key" />       //key:开发者申请的key

综合以上两个功能,可以使用简单的地图

MainActivity

public class MainActivity extends AppCompatActivity {
    private MapView mMapView;
    private Button mButtonLocation;
    private  Button mButtonSearch;
    private  Button mButtonLine;
    GeoCoder mSearch = null;
    BaiduMap mBaiduMap = null;
    public LocationClient mLocationClient = null;
    public BDLocationListener myListener = new MyLocationListener();
    private  List<LatLng> points = new ArrayList<LatLng>();//称将一个点的集合

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
        mLocationClient.registerLocationListener(myListener);    //注册监听函数
        setContentView(R.layout.activity_main);
        startLocation();
        initDrawLine();
        // 地图初始化
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();

        mButtonSearch = (Button) findViewById(R.id.buttonSearch);
        mButtonLocation = (Button) findViewById(R.id.buttonLocation);
        mButtonLine = (Button) findViewById(R.id.buttonLine);


// 初始化搜索模块,注册事件监听
        mSearch = GeoCoder.newInstance();
        mSearch.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
            @Override
            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
                if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                    Toast.makeText(MainActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG)
                            .show();
                    return;
                }
              //  mBaiduMap.clear();
                mBaiduMap.addOverlay(new MarkerOptions().position(geoCodeResult.getLocation())
                        .icon(BitmapDescriptorFactory
                                .fromResource(R.mipmap.ic_launcher)));
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(geoCodeResult
                        .getLocation()));
                points.add(geoCodeResult.getLocation());//得到这个点
                String strInfo = String.format("纬度:%f 经度:%f",
                        geoCodeResult.getLocation().latitude, geoCodeResult.getLocation().longitude);
                Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

            }
        });
        mButtonSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Geo搜索
                mSearch.geocode(new GeoCodeOption().city(
                        "北京").address(
                        "海淀区中关村海龙大厦"));
            }
        });
    }
    private  void startLocation(){
        mButtonLocation = (Button) findViewById(R.id.buttonLocation);
        mButtonLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                initLocation();//设置定位参数
                mLocationClient.start();
            }
        });
    }
//配置定位SDK参数
    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);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
        option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
        option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
        mLocationClient.setLocOption(option);
    }
//画线的方法
    private void initDrawLine() {
        mButtonLine = (Button) findViewById(R.id.buttonLine);
        mButtonLine.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OverlayOptions ooPolyline = new PolylineOptions().width(10)
                        .color(0xAAFF0000).points(points);
                mBaiduMap.addOverlay(ooPolyline);

            }
        });
    }
//实现BDLocationListener接口
    class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            if (location.getLocType()==BDLocation.TypeGpsLocation||location.getLocType()==BDLocation.TypeNetWorkLocation) {
                LatLng point = new LatLng(location.getLatitude(), location.getLongitude());
                points.add(point);
                mBaiduMap.addOverlay(new MarkerOptions().position(point)
                        .icon(BitmapDescriptorFactory
                                .fromResource(R.mipmap.ic_launcher)));
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(point));
                mLocationClient.stop();
            }
        }
    }
}

运行后如下图:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值