安卓---项目中插入百度地图sdk
来源:互联网 发布:室内设计装修软件 编辑:程序博客网 时间:2024/06/05 05:04
百度地图
应用里面 自带地图 搜房网
- 下载百度地图的sdk 熟悉api 注册百度开发者的账号
- 2.12 只要有一个ak就可以 高版本需要提供应用程序的包名和签名返回开发者的序列号
使用百度地图步骤
- 申请api key
- 创建工程
- 引用函数库 armeabi 只能兼容arme cpu
- 联网权限
- 初始化地图引擎 (2.13 在代码中初始化, 高版本在清单文件中配置)
- 引用布局
MapView 显示地图 V
继承ViewGroup 自定义控件 专门用来显示地图
1. MapController getController() 获取到地图的控制器 2. 让mapView的生命周期 必须和anctivity绑死在一起 onResume onPause destroy3. setBuiltInZoomControls(boolean on) 设置是否启用内置的缩放控件回调 MKMapViewListener
BMapManager M
可以初始化地图引擎
1. destroy() 当程序退出的时候调用2. start() 当程序可见的时候调用3. stop() 当程序不可见的时候调用 4. init(String strKey, MKGeneralListener listener) 方法校验key信息, 回调
MapController 地图控制器 C
专门控制地图的操作
1. animateTo(GeoPoint point) 移动到指定位置2. setCenter(GeoPoint point) 在给定的中心点GeoPoint上设置地图视图。3. setZoom(float zoomLevel) 设置地图的缩放级别4. 缩放5. 旋转6. 修改俯视角度
图层
1. 卫星图层 mapView.setSatellite(true); 2. 交通图层 mapView.setTraffic(true);
覆盖物
覆盖物包括: 覆盖物的抽象基类: Overlay(核心类) 几何图形: GraphicsOverlay 文字: TextOverlay 分类条目: ItemizedOverlay 本地搜索: PoiOverlay 路线规划: RouteOverlay 换成路线: TransitOverlay 我的位置: MyLocationOverlay步骤: * 1.获取到地图上的覆盖物 List<Overlay> overlays = mapView.getOverlays(); * 2.创建新的覆盖物 几何GraphicsOverlay, 文字TextOverlay, 多条目(下面具体实现) * 3.拿到地图上的覆盖物 添加新的覆盖物 overlays.add(overlay); * 4.刷新地图 mapView.refresh();* GraphicsOverlay: GraphicsOverlay overlay = new GraphicsOverlay(mapView); // 描述一个集合图形 Geometry arg0=new Geometry(); // 图形的形状 arg0.setCircle(point, 1000); //参数1,圆心 参数2,半径 单位(米) Symbol arg1 = new Symbol(); //图形的样式 Symbol.Color color = new Symbol().new Color(); color.alpha=155; color.red=100; color.blue=200; color.green=0; // 设置图形的样式 arg1.setSurface(color, 1, 1); Graphic graphic=new Graphic(arg0, arg1); // 绘制 overlay.setData(graphic);* TextOverlay TextOverlay overlay=new TextOverlay(mapView); // 绘制 TextItem item=new TextItem(); item.align=TextItem.ALIGN_CENTER;// 居中对齐 item.pt=point;// 让文字显示在黑马这个位置 item.fontSize=14; item.fontColor=getColor(); item.text="黑马程序员"; overlay.addText(item);* ItemizedOverlay ItemizedOverlay<OverlayItem> itemizedOverlay = new ItemizedOverlay<OverlayItem>( getResources().getDrawable(R.drawable.eat_icon), mapView) { //条目的点击事件!!! @Override protected boolean onTap(int index) { OverlayItem item = getItem(index); GeoPoint point = item.getPoint(); //更新view气泡的的位置(之前已经初始化) mapView.updateViewLayout(pop, new MapView.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, point, MapView.LayoutParams.BOTTOM_CENTER)); pop.setVisibility(View.VISIBLE);// 让气泡显示出来 TextView tv=(TextView) pop.findViewById(R.id.title); tv.setText(item.getTitle()); // String snippet = item.getSnippet();//得到描述信息 // Toast.makeText(getApplicationContext(), snippet, 0).show(); return true;//表示消费掉了 } }; OverlayItem item = new OverlayItem(point, "黑马程序员", "不10000就业不交一分钱学费");// 1坐标点 2 标题 3 描述 itemizedOverlay.addItem(item); item = new OverlayItem(new GeoPoint(latitude + 1000, longitude), "向北", "增加纬度"); itemizedOverlay.addItem(item); item = new OverlayItem(new GeoPoint(latitude, longitude + 1000), "向东", "增加经度"); itemizedOverlay.addItem(item); item = new OverlayItem(new GeoPoint(latitude - 1000, longitude - 1000), "向西南", "减少经纬度"); itemizedOverlay.addItem(item); // 步骤3 overlays.add(itemizedOverlay); // 步骤4 mapView.refresh();* PoiOverlay: 搜索后显示本地覆盖物, 如下.* RouteOverlay: 驾车路线搜索后显示路线, 如下.* TransitOverlay: 公交换乘路线显示, 如下.* MyLocationOverlay: 我的位置覆盖物, 如下.
搜索
* 核心类: MKSearch和MKSearchListener 1. MKSearch 搜索的api 用于位置检索/周边检索/公交检索/范围检索/驾乘检索/步行检索 2. MKSearchListener 搜素结构 会回调到该接口里的方法 * 矩形/圆形/全城区域内 搜索比较兴趣点 MKSearch search = new MKSearch(); search.init(manager,MKSearchListener)//由于此接口的方法特别多, 此处可以使用适配器设计模式 //第一个参数:关键字(如宾馆) 第二个参数(左上角的点) 第三个参数(右下角的点) 1. search.poiSearchInbounds(String key, GeoPoint ptLB, GeoPoint ptRT) 矩形区域搜索 2. search.poiSearchNearBy(String key, GeoPoint pt, int radius) 圆形区域搜素 3. search.poiSearchInCity("北京", "麦当劳"); search.goToPoiPage(index);//显示下一页(一页显示10条) 在MKSearchListener里的onGetPoiResult()中回调. public void onGetPoiResult(MKPoiResult result, int type, int iError) { if(iError==0){ // 有结果 // 把结果绘制到手机屏幕(地图)上 // 步骤1 获取到所有的覆盖物 List<Overlay> overlays = mapView.getOverlays(); //步骤2 创建信的覆盖物 PoiOverlay overlay=new PoiOverlay(SearchInRectActivity.this, mapView); ArrayList<MKPoiInfo> allPoi = result.getAllPoi(); overlay.setData(allPoi); // 步骤3 把覆盖物添加到之前的覆盖物的集合上 overlays.add(overlay); //步骤4 刷新界面 mapView.refresh(); } }* 驾车/公交/步行路线搜索 // 1 开始的城市 2开始位置 3目的地城市 4目的地坐标 1.search.drivingSearch(String startCity, MKPlanNode start, String endCity, MKPlanNode end) //驾车 2.search.transitSearch(String startCity, MKPlanNode start, MKPlanNode end);//公交 3.search.walkingSearch(String startCity, MKPlanNode start, MKPlanNode end);//步行 //在MKSearchListener里的onGetDrivingRouteResult中回调. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MKSearch search=new MKSearch(); search.init(manager, new BusAdapter()); MKPlanNode start=new MKPlanNode();//地点: 包括位置和名字 start.pt=point; MKPlanNode end=new MKPlanNode(); end.pt=new GeoPoint(40065796, 116349868); search.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);// 设置开车的方案 search.drivingSearch("北京", start, "北京", end);//驾车(方式1) search.setTransitPolicy(MKSearch.EBUS_WALK_FIRST); search.transitSearch("北京", start, end); //公交(方式2) search.walkingSearch("北京", start, end); //步行(方式3) } private class BusAdapter extends MKSearchAdapter{ @Override public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) { if(iError==0){ //此处只显示了公交的回调, 驾车和步行没写, 详细见项目. // 公交的方案 MKTransitRoutePlan plan = result.getPlan(0); List<Overlay> overlays = mapView.getOverlays(); TransitOverlay overlay=new TransitOverlay(BusActivity.this, mapView); overlay.setData(plan); overlays.add(overlay); mapView.refresh(); } } }
定位:
* 定位的方式 1. gps 2. wifi 3. 基站 * 系统原生定位: //调用的是谷歌的API, 火星坐标, 不准确. LocationManager lm = (LocationManager)getSystemService(LOCATION_SERVICE);* 百度地图定位: 需要: liblocSDK.so locSDK.jar 核心API: LocationClient(LocationClientOption) BDLocationListener public class MyLocationActivity extends BaseActivity { public LocationClient mLocationClient = null; // 回调方法 public BDLocationListener myListener = new MyLocationListener(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类 mLocationClient.registerLocationListener(myListener); // 注册监听函数 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开GPS option.setAddrType("all");// 返回的定位结果包含地址信息 option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms option.disableCache(true);// 禁止启用缓存定位 option.setPoiNumber(5); // 最多返回POI个数 option.setPoiDistance(1000); // poi查询距离 option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息 mLocationClient.setLocOption(option); } @Override protected void onStart() { super.onStart(); mLocationClient.start(); if(mLocationClient!=null &&mLocationClient.isStarted()){ mLocationClient.requestLocation();// 请求定位的位置 } } @Override protected void onStop() { super.onStop(); mLocationClient.stop(); } public class MyLocationListener implements BDLocationListener { // 接受到了定位的位置 @Override public void onReceiveLocation(BDLocation location) { double latitude2 = location.getLatitude(); double longitude2 = location.getLongitude(); Toast.makeText(getApplicationContext(), latitude2+"..."+longitude2, 0).show(); MyLocationOverlay overlay=new MyLocationOverlay(mapView); LocationData data=new LocationData(); data.latitude=latitude2; data.longitude=longitude2; overlay.setData(data); mapView.getOverlays().add(overlay); mapView.refresh(); } // 接受到了 周围的兴趣点 @Override public void onReceivePoi(BDLocation arg0) { } } }
3 0
- 安卓---项目中插入百度地图sdk
- 百度地图SDK安卓开发
- 在项目中使用百度地图sdk
- 百度地图+安卓SDK开发学习之百度地图初始化
- 网页中插入百度地图
- 001 走上移动开发之安卓项目实战(百度地图:建立百度地图开发环境)
- 项目接入百度地图SDK环境配置
- 安卓百度地图开发
- 页面中插入百度地图(利用百度地图API)
- 安卓使用”百度地图SDK“的技术总结以及“常见错误处理”
- APP签名打包后百度地图安卓SDK验证密钥失败的问题
- 安卓开发使用百度地图sdk实现定位,添加marker,城市切换等功能
- 002 走上移动开发之安卓项目实战(百度地图:给地图添加标注物)
- 百度地图API 安卓项目 实时获取地图中心点经纬度
- 在网页中插入百度地图
- 在网页中插入百度地图(实例)
- 在网页中插入百度地图(实例)
- 在网页中插入百度地图
- 关于核方法的理解
- 【阅读理解】【2014 Multi-University Training Contest 3】The Great Pan
- 致我们失去的青春
- hdu-2522-A simple problem
- DBcheck操作指南
- 安卓---项目中插入百度地图sdk
- ActiveAndroid--Android轻量级ORM框架
- Extjs url直接传参 和使用params传参
- mysql的分页存储过程和注释
- java操作excel
- 【整理】HashMap的原理及遍历
- eclipse openRunDialog 查看详细加载过程
- 什么是Docker?
- OpenCV学习(一):IplImage结构