百度地图

来源:互联网 发布:java官方下载地址 编辑:程序博客网 时间:2024/06/08 14:48

首先在此说明,这里的百度地图,或者其他的高德地图,谷歌地图等,这些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