安卓---项目中插入百度地图sdk
百度地图
应用里面 自带地图 搜房网
- 下载百度地图的sdk 熟悉api 注冊百度开发人员的账号
- 2.12 仅仅要有一个ak就能够 高版本号须要提供应用程序的包名和签名返回开发人员的序列号
使用百度地图步骤
- 申请api key
- 创建project
- 引用函数库 armeabi 仅仅能兼容arme cpu
- 联网权限
- 初始化地图引擎 (2.13 在代码中初始化, 高版本号在清单文件里配置)
- 引用布局
MapView 显示地图 V
继承ViewGroup 自己定义控件 专门用来显示地图
1. MapController getController() 获取到地图的控制器
2. 让mapView的生命周期 必须和anctivity绑死在一起 onResume onPause destroy
3. 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)//因为此接口的方法特别多, 此处能够使用适配器设计模式
//第一个參数:keyword(如宾馆) 第二个參数(左上角的点) 第三个參数(右下角的点)
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) {
}
}
}
安卓---项目中插入百度地图sdk的更多相关文章
- Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误
Android Studio 项目中集成百度地图SDK报以下错误: java.lang.UnsatisfiedLinkError: Native method not found: com.baidu ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- 【月入41万】Mono For Android中使用百度地图SDK
借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...
- IOS学习:在工程中添加百度地图SDK
1.将下载下来的sdk中的inc文件夹.mapapi.bundle.libbaidumapapi.a添加到工程中,其中libbaiduapi.a有两个,一个对应模拟器一个对应真机,导入方法如下: 第一 ...
- MVC项目中使用百度地图
已经很久没更新博客了,因为最近一直在学习前端的知识,没那么多时间,写博客或者写文章不但没有钱,写得好还好说,如果写得不好,一些吃瓜群众,不仅要喷你,搞不好还要人身攻击就不好了.所以写博客的人,脸皮得厚 ...
- vue 项目中引用百度地图
新建map.js export const BaiduMap = { init: function() { const BMapURL = 'https://api.map.baidu.com/api ...
- 如何在HTMl网页中插入百度地图
方法/步骤 1.打开"百度地图生成器"的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 如下图: 2.在"1 ...
- vue项目中使用百度地图的方法
1.在百度地图申请密钥: http://lbsyun.baidu.com/ 将 <script type="text/javascript" src="http: ...
- react项目中引入百度地图打包报错问题
一.我正常引入百度地图,调试时候是好使的,但是打包时候就报错 引入方法如下: 报错如图 正常调试是好使的,但是打包报这个错,解析不了这个BMap,那么怎么办呢? 然后我就转用了window办法,虽然因 ...
随机推荐
- JDBC使用数据库来完成分页功能
本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实 ...
- A - Alignment of Code(推荐)
You are working in a team that writes Incredibly Customizable Programming Codewriter (ICPC) which is ...
- python基础教程_学习笔记1:序列-1
序列 数据结构:通过某种方式组织在一起的数据元素的集合,这些数据元素能够是数字或者字符,甚至能够是其它数据结构. python中,最主要的数据结构是序列. 序列中的每一个元素被分配一个序号--即元素的 ...
- Android CTS 结果 testResult.xml 修改 fail 项 为 notExecuted 项 分析
这两天一直在搞 Android 4.1 CTS ,每次完整跑完一遍后总有几百项 failed,用编辑器手动改为 notExecuted 项后重新跑,有很多项第二次都跑过了. 但是发现直接修改也带来很多 ...
- 《转载》值得学习!Google的编程样式指南
原网址:http://www.csdn.net/article/2012-10-12/2810689-Google-styleguide 本文分享了Google众多编程语言的样式指南,其中包括C语言. ...
- Oracle控制文件操作
控制文件是连接instance和 database的纽带.记录了database的结构信息. 控制文件是1个2进制文件.记录的是当前database的状态. 控制文件可以有多个,在参数文件中通过con ...
- UVA 10245 The Closest Pair Problem 最近点问题 分治算法
题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY. 纯暴力是会超时的,所以得另辟蹊径,用分治算法. 递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中 ...
- linux下的开源移动图像监测程序--motion编译与配置
前几天在网上偶然看到一篇博客,是利用linxu下的开源的motion搭建嵌入式视频动态监控系统,感觉很好很强大于,是就想自己编译移植一下试试. 所谓移动图像监测,简单来说就是利用摄像头定点监测某个区域 ...
- Eclipse乱码怎么办
Eclipse里设置编码有三个层次:全局.工程.文件. 文件的编码会覆盖工程的编码,工程的编码会覆盖全局的编码. 我猜测:虽然你的工程编码更改为GBK,但只对新建文件有效. 如果工程中旧有的文件是UT ...
- OCA读书笔记(14) - 备份和恢复基本概念
备份恢复概念 如何判断数据库的一致性 在mount状态下,oracle如何判断数据库的一致性 scn:system change number,它是数据库时钟 如何查询当前系统的scn: select ...