百度地图

简介

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

您可以通过该接口实现丰富的LBS功能:
开发者可在百度地图android SDK的下载页面下载到最新的地图SDK

下载地址为:
老官网:http://developer.baidu.com/map 仍可以跳转

官网:http://lbsyun.baidu.com/

申请秘钥

在申请密钥前还得激活开发者账号…按提示输入信息,激活完就可以申请密钥了



获取包名

获取SHA1,打开cmd进入.android文件夹下

记住两个命令

  • 调试版本使用指令:keytool -list -v -keystore debug.keystore
  • 发布版本请使用指令:keytool -list -v -keystore apk 的 keystore

调试版本(在开发时请使用调试版本)
若显示以下错误

则找到Java安装路径下找到keytool.exe;打开运行先转到你的keytool文件夹路径下,然后回车。再运行它(输入keytool.exe 快捷键是Tab建和Linux一样),然后在后边输入命令 -list -keystore 输上后后边跟的就是你的debug.keystore文件的对象路径。然后提示输入密库口令 输入android ,好再回车就看见你的Sha1了。



配置开发环境

首先你得下载SDK

http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar

下载所需要的功能后,解压,看到一个很明显的jar包

复制到项目的libs里

右键add as…

然后是so文件,跟之前使用某框架差不多,在src/main/目录下新建一个jniLibs目录,然后把刚才解压出来的除了jar包都扔进去

Hello BaiduMap

百度地图SDK为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:
参考:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/showmap

第一步:配置AndroidManifest.xml文件
1.在<application>中加入如下代码配置开发密钥(AK):

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

开发者 key就是之前申请的秘钥

  1. <application/>外部添加如下权限声明:
//获取设备网络状态,禁用后无法获取网络状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
//网络权限,当禁用后,无法进行检索等相关业务
<uses-permission android:name="android.permission.INTERNET" />
//读取设备硬件信息,统计数据
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
//读取系统信息,包含系统版本等信息,用作统计
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
//获取设备的网络状态,鉴权所需网络代理
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
//允许sd卡写权限,需写入地图数据,禁用后无法显示地图
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//这个权限用于进行网络定位
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
//这个权限用于访问GPS定位
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
//获取统计数据
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
//使用步行AR导航,配置Camera权限
<uses-permission android:name="android.permission.CAMERA" />
//程序在手机屏幕关闭后后台进程仍然运行
<uses-permission android:name="android.permission.WAKE_LOCK" />

第二步 在布局文件中添加地图容器
MapView是View的一个子类,用于在Android View中放置地图。MapView的使用方法与Android提供的其他View一样。

<com.baidu.mapapi.map.MapView  android:id="@+id/bmapView"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:clickable="true" />

第三步 地图初始化

注意:在SDK各功能组件使用之前都需要调用“SDKInitializer.initialize(getApplicationContext())”,因此建议在应用创建时初始化SDK引用的Context为全局变量。

新建一个自定义的Application,在其onCreate方法中完成SDK的初始化。示例代码如下:

public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//在使用SDK各组件之前初始化context信息,传入ApplicationContext   SDKInitializer.initialize(this);//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。SDKInitializer.setCoordType(CoordType.BD09LL);}
}

在AndroidManifest.xml文件中声明该Application

第四步 创建地图Activity,管理MapView生命周期

public class MainActivity extends Activity {  private MapView mMapView = null;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);  //获取地图控件引用  mMapView = (MapView) findViewById(R.id.bmapView);  }  @Override  protected void onResume() {  super.onResume();  //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  mMapView.onResume();  }  @Override  protected void onPause() {  super.onPause();  //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  mMapView.onPause();  } @Override  protected void onDestroy() {  super.onDestroy();  //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  mMapView.onDestroy();  }
}

完成以上工作即可在您的应用中显示地图:

通过添加View显示地图
百度地图SDK支持不用通过layout文件中添加MapView控件,直接在Java代码中添加MapView的方式来展示地图,示例如下:

1 创建MapView对象

MapView mapView = new MapView(this);

2添加MapView对象

setContentView(mapView);

另外,在Java代码中添加MapView的方式支持通过BaiduMapOptions对象根据需求构造包含特定地图状态类型和控件显示状态的MapView对象。示例如下:
1 定义BaiduMapOptions对象

BaiduMapOptions options = new BaiduMapOptions();

2设置需要的状态

//设置地图模式为卫星地图
options.mapType(BaiduMap.MAP_TYPE_SATELLITE);

3创建MapView对象

MapView mapView = new MapView(this, options);

4添加MapView对象

setContentView(mapView);

BaiduMapOptions类支持设置的状态如下:

状态 含义
mapStatus 地图状态
compassEnable 是否开启指南针,默认开启
mapType 地图模式,默认为普通地图
rotateGesturesEnabled 是否允许地图旋转手势,默认允许
scrollGesturesEnabled 是否允许拖拽手势,默认允许
overlookingGesturesEnabled 是否允许俯视图手势,默认允许
zoomControlsEnabled 是否显示缩放按钮控件,默认允许
zoomControlsPosition 设置缩放控件位置
zoomGesturesEnabled 是否允许缩放手势,默认允许
scaleControlEnabled 是否显示比例尺控件,默认显示
scaleControlPosition 设置比例尺控件位置
logoPosition 设置Logo位置

地图类型及显示层级

  • 百度地图SDK支持21级的地图显示,如下为地图类型和图层支持层级说明
地图类型或图层 显示层级
2D地图 4-21
3D地图 19-21
卫星图 4-20
路况交通图 11-21
百度城市热力图 11-21
室内图 17-22
  • 下表为显示层级与比例尺的对应关系
显示层级 比例尺/米
4 1000000
5 500000
6 200000
7 100000
8 50000
9 25000
10 20000
11 10000
12 5000
13 2000
14 1000
15 500
16 200
17 100
18 50
19 20
20 10
21 5

注意:检查室内图当前状态,自v5.0.0起,将地图缩放等级由3-21调整为4-21,优化南北极地区展示效果(当开启室内图时,最大缩放等级增大至22级),请开发者注意。
可以通过如下代码设置地图的缩放级别:

MapStatus.Builder builder = new MapStatus.Builder();
builder.zoom(18.0f);
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

常用地图容器
地图SDK底层运用两种GLSurfaceView和TextureView两种OpenGL ES组件构建地图。下面简要介绍。

  • GLSurfaceView:

包括MapView,MapFragment和SupportMapFragment三种容器。MapFragment和SupportMapFragment用于在 Android Fragment 中放置地图。适合需要使用Fragment的开发场景,方便您实现灵活的布局。MapFragment和SupportMapFragment分别是android.app.Fragment和android.support.v4.app,Fragment的子类,MapFragment需要在android3.0以上的版本中使用。

  • TextureView:

包括TexureMapView,TextureMapFragment和TextureSupportMapFragment三种容器。使用场景:您将MapView与其他的GLSurfaceView(比如相机)叠加展示,或者是在ScrollView中加载地图时,建议使用TextureMapView及SupportTextureMapFragment来展示地图,可以有效解决 GLSurfaceView 叠加时出现的穿透、滚动黑屏等问题。如果使用TextureMapView请确保:Android 4.4以上系统,在AndroidManifest.xml中配置硬件加速选项。

SupportMapFragment
此处示例代码简要介绍SupportMapFragment使用。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fragment);manager = getSupportFragmentManager();//获取到SupportMapFragment实例mSupportMapFragment = SupportMapFragment.newInstance(mapOptions);//将fragment添加至Activitymanager.beginTransaction().add(R.id.map_container, mapFragment).commit();
}

另外,您也可以使用replace的方法替换已有的fragment。

manager.beginTransaction().replace(R.id.map_container, mapFragment).commit();

多实例显示地图
开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。 示例代码:在布局文件中添加多个SupportMapFragment

<fragmentandroid:id="@+id/map1"android:layout_width="match_parent"android:layout_height="0dp"android:layout_margin="5dp"android:layout_weight="1"class="com.baidu.mapapi.map.SupportMapFragment" />
<fragmentandroid:id="@+id/map2"android:layout_width="match_parent"android:layout_height="0dp"android:layout_margin="5dp"android:layout_weight="1"class="com.baidu.mapapi.map.SupportMapFragment" />

在Activity中管理地图容器

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_multi_map_demo);LatLng GEO_BEIJING = new LatLng(39.945, 116.404);LatLng GEO_SHANGHAI = new LatLng(31.227, 121.481);//北京为地图中心,logo在左上角MapStatusUpdate status1 = MapStatusUpdateFactory.newLatLng(GEO_BEIJING);SupportMapFragment map1 = (SupportMapFragment) (getSupportFragmentManager().findFragmentById(R.id.map1));map1.getBaiduMap().setMapStatus(status1);map1.getMapView().setLogoPosition(LogoPosition.logoPostionleftTop);//上海为地图中心MapStatusUpdate status2 = MapStatusUpdateFactory.newLatLng(GEO_SHANGHAI);SupportMapFragment map2 = (SupportMapFragment) (getSupportFragmentManager().findFragmentById(R.id.map2));map2.getBaiduMap().setMapStatus(status2);
}

基础地图

普通地图

mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
//普通地图 ,mBaiduMap是地图控制器对象
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

卫星图

     //获取地图控件引用mMapView = (MapView) findViewById(R.id.bmapView);baiduMap=mMapView.getMap();//获取地图baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);


交通地图,只需添加下面一段代码

baiduMap.setTrafficEnabled(true);


标注覆盖物

//定义Maker坐标点
LatLng point = new LatLng(39.963175, 116.400244);//经纬度
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.zz2);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
//在地图上添加Marker,并显示
baiduMap.addOverlay(option);


详细参考相关文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/maptype

POI检索

POI(Point of Interest),即“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个景点、一个邮筒或者一个公交站等。

百度地图SDK提供三种类型的POI检索:城市内检索、周边检索和区域检索(即矩形区域检索)。下面分别对三种POI检索服务的使用方法作说明。

城市内检索
实例化POI检索工具

poiSearch=PoiSearch.newInstance();

创建POI检索监听器

        OnGetPoiSearchResultListener poiSearchResultListener=new OnGetPoiSearchResultListener() {@Overridepublic void onGetPoiResult(PoiResult poiResult) {//获取POI检索结果}@Overridepublic void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {//获取place详情页检索结果}@Overridepublic void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {}@Overridepublic void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {}};//设置检索监听器poiSearch.setOnGetPoiSearchResultListener(poiSearchResultListener);

发起一个检索请求

/***  PoiCiySearchOption 设置检索属性*  city 检索城市*  keyword 检索内容关键字*  pageNum 分页页码*///发起一个检索请求,异步过程poiSearch.searchInCity((new PoiCitySearchOption()).city("北京").keyword("美食").pageNum(10));

释放检索实例

poiSearch.destroy();

获取POI检索结果,并标注

public void onGetPoiResult(PoiResult poiResult) {//获取POI检索结果List<PoiInfo> poiInfos=poiResult.getAllPoi();for (PoiInfo p:poiInfos){Log.i("food",p.address+"-"+p.city+"-"+p.phoneNum);BitmapDescriptor bd=BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);OverlayOptions option = new MarkerOptions().position(p.location).icon(bd);baiduMap.addOverlay(option);}}


详细参考文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/poi

定位

配置AndroidManifest.xml文件

<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>

开启地图的定位图层

mBaiduMap.setMyLocationEnabled(true);

构造地图数据

public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 销毁后不在处理新接收的位置if (location == null || mMapView == null){return;}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}
}

通过LocationClient发起定位

//定位初始化
mLocationClient = new LocationClient(this);//通过LocationClientOption设置LocationClient相关参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);//设置locationClientOption
mLocationClient.setLocOption(option);//注册LocationListener监听器
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
//开启地图定位图层
mLocationClient.start();
mLocationClient.requestLocation();//发送请求

正确管理各部分的生命周期

@Override
protected void onResume() {mMapView.onResume();super.onResume();
}@Override
protected void onPause() {mMapView.onPause();super.onPause();
}@Override
protected void onDestroy() {mLocationClient.stop();mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();
}


详细参考文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/location

Android学习——地图(百度地图)相关推荐

  1. android应用 百度地图,Android学习之百度地图API的应用(一)

    现在的地图API很多,我就从百度地图开始了,为了方面自己以后回顾,我会把所有学到的东西记录下来,下面是学习记录: 要使用百度地图首先得申请一个KEY,可以到这里申请(需要注册一个百度账号),申请完之后 ...

  2. Android端地图,百度地图学习(II)-Android端的定位

    哎,经历了小编的最近时间的研究,我的百度定位终于成功啦,刹那间觉得自己萌萌哒啦(- ̄▽ ̄)- 话不多说,直接进入正题: 首先,我们来看一下效果: [分析定位原理] [编码分析] 2)增加布局信息:此处 ...

  3. Android studio显示百度地图及闪退问题的解决

    Android studio引入百度地图包括解决真机闪退问题 引入百度地图方法 申请百度地图key 百度地图SDK下载即配置 完整代码及部分解释 MainActivity.java AndroidMa ...

  4. Android开发之百度地图定位打卡

    Android开发之百度地图定位打卡 一.效果图 二.下载百度地图SDK 三.代码实现 1.布局文件(activity_main) 2.布局文件(activity_map) 3.在res文件夹下新建m ...

  5. Android Studio调用百度地图(二):实现地图显示后台定位和步行导航

    先看一下运行效果: 实现功能:后台定位+步行导航(可通过长按屏幕自定义终点,起点为定位点) 后台定位即当程序在后台时依旧执行定位功能,步行导航支持30米-50千米范围内的导航 一 导入SDK并配置相关 ...

  6. Android实现高德地图上拉,ScrollLayout:上拉滑动上滑拖出,类似高德地图百度地图抽屉拖拽效果...

    摘要 在ScrollView或者ListView里面使用ViewPager.支持手势上拉滑出,中途停顿,下滑退出页面,类似高德地图百度地图内场景抽屉拖拽效果效果 Gif动画 类似使用 Demo 下载A ...

  7. Android开发之百度地图定位

    Android开发之百度地图定位 一.效果图 二.下载百度地图SDK 1.打开[百度地图](https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9% ...

  8. Flutter对接第三方高德地图+百度地图基础定位实现

    Flutter对接第三方高德地图+百度地图基础定位实现 原创:@As.Kai 博客地址:https://blog.csdn.net/qq_42362997 如果以下内容对您有帮助,点赞点赞点赞~ 高德 ...

  9. H5页面唤醒高德地图|百度地图App

    H5页面唤醒高德地图|百度地图App 移动端H5页面唤醒app,若唤醒失败则跳转到应用商城下载. 唤醒前需要检测当前操作系统,不同的操作系统用不同的协议 我这里的需求是唤醒失败就跳转到网页版的地图,若 ...

  10. 5张对比图告诉你,天地图,高德地图,百度地图,谷歌地图区别

    先来看看传说中最争议的天地图吧. 最大放大距离,每厘米25米. 我们用这个体育场和下面的大厦做对比..其实还有大厦下的车..(这张图上的车看不清,真有,没骗你们....) 再上一张高德的, 最大50M ...

最新文章

  1. 行情跌宕起伏,或许你可以买这个代币?
  2. 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。
  3. mysql基数是什么意思_谈谈MySQL中的基数是啥?
  4. python3.7 6如何安装-centos安装python3.7
  5. redis--Sentinel
  6. java 僵尸进程_孤儿进程与僵尸进程
  7. Java并行程序基础
  8. 复合机 涂布机_涂布复合机适用的范围在那些地方?
  9. 短语密码_使用密码短语以提高安全性
  10. flash遨游缓存问题
  11. 常用选择器(CSS+JQuery)
  12. hibernate在不联网或者网络异常时不能解析配置文件
  13. 服务器内的虚拟机无法上网,VMware虚拟机中无法上网如何解决
  14. JDBC更新10W级以上数据性能优化
  15. 付费率第一 亏损显著收窄 网易云音乐将实现盈利?
  16. Excel——公式与函数基础
  17. 根据身份证号码获取年龄
  18. Spire.Cloud 在线协同编辑Word文档
  19. win7系统服务器无法局域网访问,Win7局域网无法访问如何解决?
  20. namespace is terminated

热门文章

  1. 计算机学院科技节活动背景,计算机技术系第五届电脑科技节策划书.doc
  2. wordpress的构建——WEB服务器架设(多站点配置)
  3. 什么是家?该如何理解思想意识中的家?
  4. 麻雀算法优化长短期记忆网络进行水位水库预测
  5. 关于编写故事卡的一些经验
  6. 精品软件 推荐   Adobe Photoshop CC 2015(ps cc下载)16.0.0.88官方中文版
  7. 分享个病毒扫描引擎站VirusTotal
  8. linux 目录结构_Linux目录结构,解释
  9. vmware未能启动虚拟机
  10. java7 新特性 总结版