百度地图
来源:互联网 发布: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的话,需要对开发环境进行相应的设置,方法如下:
在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;
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(); } } }}
运行后如下图:
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- WAS 忘记控制台密码
- Unix环境编程学习笔记------在进程间传送文件描述符
- 中级篇——最小生成树
- iOS项目更新之升级Xcode7 & iOS9 & swift2.0
- HDU 3874 Necklace(树状数组离线处理)
- 百度地图
- opencv link libary
- eclipse安装tomcat插件
- iOS8中Today Extension删除
- JAVA Game: learning addition
- 使用Windows Live Writer 常见的几个Blog接口
- C语言程序初体验-第六课-第二题:三个整数比较
- 安卓开机动画的制作
- 同步,异步,全双工,半双工区别(总结)——扫盲篇