Android Studio[百度地图SDK开发](一)
来源:互联网 发布:服务器 ftp端口号 编辑:程序博客网 时间:2024/05/16 05:12
百度SDK开发(一)基础使用
关于百度地图SDk的开发网上有很多的文章都是关于Eclipse的,正好最近用到了百度地图,所以写了一篇文章记录下使用的过程。
基础配置
先说下开发平台Studio2.0,compileSdkVersion 23,如果在使用的过程中有不一样的地方,还望指出。
- 先要使用百度地图SDk首先你得有一个百度账号,这个应该没问题,其次是需要一个密匙,申请地址:http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5
- 之后就需要去登录百度账号,点击申请,会进入到应用列表界面,左侧选择查看应用,右侧点击创建应用。
应用名称可以随便写,应用类型选择Android SDK,至于下面的发布版SHA1和开发版SHA1都写一样的,包名填app gradle中的applicationId。
Studio中的SHA1的获取可以通过在Studio的Terminal中输入命令获得具体方式可以参考:http://www.bubuko.com/infodetail-1031689.html
通过以上两步应该就能获得自己的appKey了,接下来需要去开发界面去下载你需要的SDK了。下载好压缩后,解压,会发现里面除了常用的一个.jar文件外,还有好几个文件夹,他们的作用就是用来沟通底层的,根据不同的设备去使用不同的文件。把解压好的libs文件夹复制粘贴到你的项目中app目录下中,之后在Project的gradle中添加sourceSet。主要把jar包引入一下。 - 接下来还需要配置一些百度地图中需要的权限,服务等。
基本使用
布局文件:直接创建一个MapView对象就可以。
<com.baidu.mapapi.map.MapView android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />
MainActivity:
public class MainActivity extends AppCompatActivity {MapView mMapView;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.mapview);}@Overrideprotected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy();}@Overrideprotected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume();}@Overrideprotected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause();}}
这样一个基本的设置就完成了。,当然了这样的地图离我们的需求还差的很多。接下来按照官方文档的说明来跑一遍。(如果你用的是genymotion模拟器的话,不知道最新的支不支持百度地图,反正我现在用的genymotion是不支持百度地图的。可以使用别的模拟器,比如逍遥啊,夜神啊,海马玩啊之类的都可以)
进阶使用
先来看一下基础地图,我现在使用的版本是最新的V3.7,如果有用旧版的可能出现不一样的,可以留言大家一起解决。目前百度地图SDK所提供的地图等级为3-21级,所包含的信息有建筑物、道路、河流、学校、公园等内容。
V3.7.0起,地图支持缩放至21级,暂不支持卫星图、热力图、交通路况图层的21级显示,打开以上类型图层,地图会自动缩放到20级。
所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线、多边形和圆等)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
百度地图SDK为广大开发者提供的基础地图和上面的各种覆盖物元素,具有一定的层级压盖关系,具体如下(从下至上的顺序):
1、基础底图(包括底图、底图道路、卫星图等);
2、瓦片图层(TileOverlay);
3、地形图图层(GroundOverlay);
4、热力图图层(HeatMap);
5、实时路况图图层(BaiduMap.setTrafficEnabled(true););
6、百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););
7、底图标注(指的是底图上面自带的那些POI元素);
8、几何图形图层(点、折线、弧线、圆、多边形);
9、标注图层(Marker),文字绘制图层(Text);
10、指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);
11、定位图层(BaiduMap.setMyLocationEnabled(true););
12、弹出窗图层(InfoWindow);
13、自定义View(MapView.addView(View););
以上内容来自广泛文档,读一下就可以了,还有就是注意一下常用的图层之间的上下关系,别的忽略。
地图类型分为三种:普通滴入,卫星地图,和空白地图,目前使用的大多是普通地图。
实时交通图用于路况查询。
城市热力图用于描述人群分布,密度,变化趋势。
地图手势和地图控制全部按照默认可以,除非有特殊的需求
标注覆盖物 Marker用于在地图上标注位置。上一段代码,看看效果。
mMapView = (MapView) findViewById(R.id.mapview); //获得百度地图对象,对地图做的操作都需要这个对象 baiduMap=mMapView.getMap(); //设置地图资源为普通地图(MAP_TYPE_SATELLITE卫星地图,MAP_TYPE_NONE空白地图) baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //开启交通图 baiduMap.setTrafficEnabled(true); //开启热力图 baiduMap.setBaiduHeatMapEnabled(true); //创建一个坐标点对象,第一个参数为纬度,第二个经度 LatLng point=new LatLng(39.876736,116.413333); //获得标记的图片 BitmapDescriptor bitmap= BitmapDescriptorFactory.fromResource(R.drawable.icon_locate); //创建一个Marker覆盖物(暂且这么理解吧) MarkerOptions overlay=new MarkerOptions().position(point).icon(bitmap); //添加到地图上 baiduMap.addOverlay(overlay); //设置显示的等级 baiduMap.setMaxAndMinZoomLevel(20,15);
代码中都有注释,一看就明白是什么意思了,上图,看下是什么效果。
可以看到地图上不同的颜色区域就是热力图,道路上有的是红色的,有的是黄色的就是交通图,箭头所指向的位置就是之前的坐标点,还调整了一下比例尺,初始就是500米而不是5公里。还有就是右下角的缩放工具好像与之前版本的不一样了。错觉吗?
接下来可以对这个Marker对象进行一些操作(我把热力图和交通图关了,有点卡)。上代码。
MarkerOptions overlay=new MarkerOptions().position(point).icon(bitmap).zIndex(9).draggable(true); //添加到地图上,获得一个Marker对象 Marker marker= (Marker) baiduMap.addOverlay(overlay); //创建一个弹窗对象 view=new TextView(this); view.setText("我在这"); view.setTextSize(TypedValue.COMPLEX_UNIT_SP,15); infoWindow=new InfoWindow(view,point,-30); //设置显示的等级 baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { //点击回调 baiduMap.showInfoWindow(infoWindow); return true; } }); //拖拽事件监听 baiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() { @Override public void onMarkerDrag(Marker marker) { //拖拽中回调 Log.d("TAG","onMarkerDrag"); } @Override public void onMarkerDragEnd(Marker marker) { //拖拽结束回调 Log.d("TAG","onMarkerDragEnd"); } @Override public void onMarkerDragStart(Marker marker) { //拖拽开始回调 baiduMap.hideInfoWindow(); Log.d("TAG","onMarkerDragStart"); } });
分别对Marker对象添加了单击和拖拽监听,创建一个弹出窗,看下效果
之前不知道为什么拖拽事件为什么不触发,查了些资料,才发现,原来需要长按才能触发,哎,搞了将近一个小时,各种尝试啊。不过还是实现了,挺高兴的,这样对于Marker对象的使用就差不多了。先写这么多吧,被这个拖拽搞得有点烦去,去看书,明天继续!!
- Android Studio[百度地图SDK开发](一)
- Android Studio 开发百度地图SDK应用
- Android Studio 开发百度地图SDK应用
- 百度地图sdk Android开发学习笔记(一)
- Android Studio地图开发(百度地图)
- Android Studio 百度地图开发(一) 环境
- android百度地图开发——android studio配置sdk
- Android百度地图SDK开发
- Android studio百度地图(一)
- Android 百度地图 SDK v3_3_0 (一) --- 基本地图
- 百度地图API Android SDK开发笔记一入门全过程
- Android Studio使用百度地图SDk
- Android Studio – 使用百度地图SDK
- Android Studio – 使用百度地图SDK
- Android Studio 百度地图开发
- Android Studio百度地图开发
- Android studio 开发百度地图
- android studio百度地图开发
- Linux下手动安装Apache2全过程
- Android Material Design之Toolbar与Palette实践 (必看!详细!)
- 利用UIGraphics绘制一个会走的时钟
- 关于Javascript对象的理解
- 八皇后
- Android Studio[百度地图SDK开发](一)
- 给Nginx配置一个自签名的SSL证书
- 布线问题
- 对于Xml中Classpath的理解
- java基础知识---集合框架
- UVALive 4650 (平面几何)
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
- Java基本知识之基本数据类型的使用
- ipv6 自从6月1号开始Appstore的审核需要支持ipv6