安卓---项目中插入百度地图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办法,虽然因 ...
随机推荐
- 浅谈MySQL 数据库性能优化
MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...
- 10165 - Stone Game(Nim游戏)
UVA 10165 - Stone Game 题目链接 题意:给定n堆石子,每次能在一堆取1到多个.取到最后一个赢,问谁赢 思路:就裸的的Nim游戏,利用定理求解 代码: #include <s ...
- .net三步配置错误页面,让你的站点远离不和谐的页面
假设你的站点出现一堆让人看不懂的报错,那么你就不是一个合格的程序猿.也不是一个合格的站长. 以下的方面能够帮助你的站点远离让人头大的页面. 第一步:配置web.config 打开web.config, ...
- React-TodoList
React入门最好的学习实例-TodoList 前言 React 的核心思想是:封装组件,各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件. 最近前端界闹的沸沸扬扬的技术当属react ...
- Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)
在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度 1.QObject类的定时器 QObje ...
- JSP中两种include的区别
首先说明这两种都是什么: <%@ include file=”relativeURI”%> 可以叫作静态include(静态包含),是jsp指令中的一种,(JSP指令控制JSP编译器如何去 ...
- java中synchronized的使用方法与具体解释
Java语言的keyword.当它用来修饰一个方法或者一个代码块的时候,可以保证在同一时刻最多仅仅有一个线程运行该段代码. 一.当两个并发线程訪问同一个对象object中的这个synchronized ...
- Swift - 解析XML格式数据(分别使用GDataXML和DDXML)
在做一些应用的时候经常需要用到XML解析,比如获取Web Service数据,读取RSS新闻或者博客数据源.下面演示了两个非常方便高效的XML库在Swift里的调用方法. 假设需要被解析的XML数据文 ...
- C#反射Assembly 具体说明
1.对C#反射机制的理解 2.概念理解后,必须找到方法去完毕,给出管理的主要语法 3.终于给出有用的样例,反射出来dll中的方法 反射是一个程序集发现及执行的过程,通过反射能够得到*.exe或*.dl ...
- Hbase集群环境搭建
Hbase数据库依赖 Hadoop和zookeeper,所以,安装Hbase之前,需要先把zookeeper集群搭建好.(当然,Hbase有内建的zookeeper,不过不建议使用).Hbase配置上 ...