百度地图 SDK v3.6.1——基本地图+控制
来源:互联网 发布:58中国网络经纪人app 编辑:程序博客网 时间:2024/05/16 19:35
百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口, 可以通过该接口实现丰富的LBS功能。练习使用了一下百度地图sdk,感觉还不错。
第一步:将百度地图的jar包和.so文件拷入到libs文件夹中。
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
2)添加所需权限
第三步:在布局xml文件中添加地图控件;
第四步:初始化地图。。。
基本地图
在使用地图控件之前必须调用SDKInitializer.initialize(Context)函数用以提供全局Context信息。
所以可以将SDKInitializer.initialize(Context)放在application文件中,确保初始化完成。
下面是SDKInitializer类的方法。
接着我们看一下VersionInfo类:
例如 可以通过直接调用VersionInfo.getApiVersion()获取当前的版本号 3.6.1。还有包名和当前版本信息都可以获取。
接着我们看一下地图的基础——MapView的方法:
MapView上面的方法中和activity的生命周期类似,我们应该将onPause onResume onDestroy方法放在对应的activity生命周期中。
默认的情况下,地图会带有缩放控件和比例尺 。可以通过mMapView.showZoomControls(show)和
mMapView.showScaleControl(boolean show)设置显示与否。
<span style="font-family:KaiTi_GB2312;font-size:18px;">mapView.showZoomControls(false);// 不显示默认的缩放控件mapView.showScaleControl(false);// 不显示默认比例尺控件</span>
一般情况下初始化显示的地图中心都是在天安门附近,如果想更改到其他地点呢?
那就要用到MapStatus MapStatus.Builder 类了,先看一下MapStatus.Builder 类的方法:
可以通过这种方法初始化地图:
LatLng p = new LatLng(39.963175, 116.400244); //设置中心点的坐标mMapView = new MapView(this,new BaiduMapOptions().mapStatus(new MapStatus.Builder().overlook(-30).rotate(0).zoom(10).target(p).build()));//设置俯视角 旋转角度 缩放级别 中心点。setContentView(mMapView);那么如何操作地图呢?
类 MapStatusUpdateFactory
缩放 级别3~20
MapStatusUpdate u = MapStatusUpdateFactory.zoomTo(5);mBaiduMap.animateMapStatus(u);旋转 -180~180
MapStatus ms = new MapStatus.Builder(mBaiduMap.getMapStatus()).rotate(rotateAngle).build();MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms);mBaiduMap.animateMapStatus(u);俯视 -45~0
MapStatus ms = new MapStatus.Builder(mBaiduMap.getMapStatus()).overlook(-30).build();MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms);mBaiduMap.animateMapStatus(u);
MapStaus.Builder中有一个设置地图中心点的方法:
,在MapStatusUpdateFactory中也有一个设置中心点的方法:。两个个都是设置中心点
可以使用MapStatusUpdateFactory的这个方法只改变中心点:MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(LatLng latLng);mBaiduMap.animateMapStatus(u);
而Builder中可以设置多个属性改变地图的俯视角、中心点、缩放级别等。
MapStatus ms = new MapStatus.Builder(mBaiduMap.getMapStatus()).overlook(-30).rotate(90).target(lat).build();MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms);mBaiduMap.animateMapStatus(u);
在BaiduMap中有一个截屏的回调接口和一个截图的请求方法:
很明显,调用这个截图请求方法,参数是上面的回调接口。在回调接口中只有一个方法:onSnapshotReady(Bitmap snapshot)。我们得到这个bitmap之后,就可以生成图片保存起来了。
有Bitmap转成图片就需要用到Bitmap.compress()方法:
mBaiduMap.snapshot(new SnapshotReadyCallback() { public void onSnapshotReady(Bitmap snapshot) {File file = new File("/mnt/sdcard/test.png");FileOutputStream out;try {out = new FileOutputStream(file);if (snapshot.compress(Bitmap.CompressFormat.PNG, 100, out)) {out.flush();out.close();}Toast.makeText(MapControl.this,"屏幕截图成功,图片存在: " + file.toString(),Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}});
package cn.vn.bdmapdemo;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Marker;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.OverlayOptions;import com.baidu.mapapi.model.LatLng;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class BaseMap extends Activity {MapView mMapView = null;private BaiduMap mBaiduMap;private Marker marker;// 初始化全局 bitmap 信息,不用时及时 recycleBitmapDescriptor bdA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);BitmapDescriptor bdB = BitmapDescriptorFactory.fromResource(R.drawable.icon_markb);BitmapDescriptor bdC = BitmapDescriptorFactory.fromResource(R.drawable.icon_markc);BitmapDescriptor bdD = BitmapDescriptorFactory.fromResource(R.drawable.icon_markd);BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.base_map); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() { public void onMarkerDrag(Marker marker) { //拖拽中 } public void onMarkerDragEnd(Marker marker) { //拖拽结束 } public void onMarkerDragStart(Marker marker) { //开始拖拽 } }); } @Overridepublic boolean onCreateOptionsMenu(Menu menu) { menu.add(1, 1, 1, "普通地图"); menu.add(1, 2, 2, "卫星地图"); menu.add(1, 3, 3, "开启交通图"); menu.add(1, 4, 4, "开启城市热力图"); menu.add(1, 5, 5, "标注"); return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch(item.getItemId()){case 1://普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;case 2://普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break;case 3:if(item.getTitle().toString().equals("开启交通图")){//开启交通图 mBaiduMap.setTrafficEnabled(true);item.setTitle("关闭交通图");}else{mBaiduMap.setTrafficEnabled(false);item.setTitle("开启交通图");}break;case 4:if(item.getTitle().toString().equals("开启城市热力图")){mBaiduMap.setBaiduHeatMapEnabled(true);item.setTitle("关闭城市热力图");}else{mBaiduMap.setBaiduHeatMapEnabled(false);item.setTitle("开启城市热力图");}break;case 5:if(item.getTitle().toString().equals("标注")){LatLng point = new LatLng(39.963175, 116.400244); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap) .draggable(true); //在地图上添加Marker,并显示 marker = (Marker) (mBaiduMap.addOverlay(option));item.setTitle("清除");}else{marker.remove();//清除具体某个标注。item.setTitle("标注");}}return super.onOptionsItemSelected(item);}/** * 清除所有Overlay * * @param view */public void clearOverlay(View view) {mBaiduMap.clear();}@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(); }}
- 百度地图 SDK v3.6.1——基本地图+控制
- 百度地图移动开发——(Android SDK v3.5.0)
- 百度地图v3.6.1接入1--基本地图功能
- 【百度地图】 SDK v3.0.0 (一)
- android百度地图 SDK v3.5.0
- Android 百度地图 SDK v3.0.0
- 百度地图SDK开发,版本V3.0.0(二)——申请百度地图开发ak密钥
- 百度地图SDK 基本使用
- 百度地图V3.0基本操作
- Android百度地图——定位SDK(版本v3.1)(一)
- Android百度地图——定位SDK(版本v3.1)(二)
- Android百度地图——定位SDK(版本v3.1)(三)
- 百度地图SDK开发,版本V3.0.0(一)——概述
- 百度地图SDK开发,版本V3.0.0(三)——hello baidumap
- Android中级篇之百度地图SDK v3.5.0-基础地图[图解百度地图基础教程]
- 最基本的百度地图SDK用法
- 百度地图API Android SDK v3.0.0 相关问题
- Android 百度地图 SDK v3.0.0 (一)
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- URL TOOLS
- HTTP请求协议格式
- ArcGIS教程:成本距离工具工作原理(二)
- oracle关于外键的使用
- 百度地图 SDK v3.6.1——基本地图+控制
- Redis与Memcached的比较
- MySQL分布式集群之MyCAT(二)schema详解(修正)
- 《CLR中的程序集加载》
- Java验证码生成
- mysql 联合索引
- 淘宝应对"双11"的技术架构分析
- customize-navigation-status-bar-ios-7
- 31,外部全局变量和内部全局变量