版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】百度地图开发总结
1.
怎么接入百度SDK,百度文档说得很明白,我就不说了。2.
注意
1)初始化的时候,上下文用全局的,即ApplicationContext。
2)要在Activity的相应生命周期方法里调用MapView对应的生命周期方法。3.
百度地图的核心类:
1)SDKInitializer百度地图初始化类
》》注册网络错误、key验证错误的广播
这样一样百度地图崩溃了,或者出异常了,就知道有没有可能是这一块出现了问题。private
void
initSDK()
{
SDKInitializer.initialize(getApplicationContext());
//注册网络错误和KEY验证失败的广播
IntentFilter
filter
=
new
IntentFilter();
filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
registerReceiver(new
MyReceiver(),
filter);
}
class
MyReceiver
extends
BroadcastReceiver
{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
String
action
=
intent.getAction();
if(action.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)){
Toast.makeText(getApplicationContext(),
"网络错误",
0).show();
}else
if(action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)){
Toast.makeText(getApplicationContext(),
"key验证失败",
0).show();
}
}
}
2)MapView
显示百度地图的组件
》》设置绽放按钮显示与隐藏
mMapView.showZoomControls(false);
》》设置比例尺显示与隐藏
mMapView.showScaleControl(false);
》》替换百度地图logo
将"baidumapapi_v3_3_0.jar"复制到桌面,然后解压,将assets目录下的logo_h,logo_l
用自己的图片替换掉。然后再将jar包拷贝回去。
可以做addView操作,而BaiduMap是addOverlay()添加覆盖物。
3)BaiduMap
控制器
通过MapView.getMap()获取
》》设置地图的状态
map.setMapStatus(MapStatusUpdate)
通过MapStatusUpdateFactory.方法()可以得到参数
//设置地图的绽放级别
MapStatusUpdate
zoom
=
MapStatusUpdateFactory.zoomTo(18);
map.setMapStatus(zoom);
//设置中心点,注意LatLng的构造函数latitude,longtitude,分别为纬度、经度,在百度地
图上查的坐标与这个正好相反的。
map.setMapStatus(MapStatusUpdateFactory.newLatLng(
new
LatLng(40.050513,116.30361)));
Android百度地图默认位置中心点设置
/xyy410874116/article/details/32094157
//旋转百度地图(以中心点)
//得到地图之前的状态和角度
MapStatus
mapStatus
=
map.getMapStatus();
float
preRotate
=
mapStatus.rotate;
//利用MapStatus.Builder静态内部类来构造新的状态,对之前状态的角度累加一个
值。
Builder
builder
=
new
MapStatus.Builder();
MapStatus
newStatus
=
builder.rotate(preRotate
+
30).build();
//将新的状态设置给百度地图
map.setMapStatus(MapStatusUpdateFactory.newMapStatus(newStatus));
//翻转百度地图(以直线),改变俯角,也就是看百度地图的角度。
MapStatus
mapStatus2
=
map.getMapStatus();
float
preOverlook
=
mapStatus2.overlook;
Builder
builder2
=
new
MapStatus.Builder();
MapStatus
newStatus2
=
builder2.overlook(preOverlook
-
5
).build();
map.setMapStatus(MapStatusUpdateFactory.newMapStatus(newStatus2));
//移动百度地图到指定中心点
animateMapStatus方法有重载形式,可以指定动画的时长。(默认300ms)
MapStatusUpdate
statusUpdate
=
MapStatusUpdateFactory.newLatLng(
LatLng(39.979982,
116.309258));
map.animateMapStatus(statusUpdate);
》》更改底图和添加交通图图层
//底图设置为默认的
map.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//底图设置成卫星图
map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
//显示交通图图层
map.setTrafficEnabled(true);
4)OverlayOptions本地覆盖物的抽象基类
OverlavOptions关于覆盖物的操作:
1)创建覆盖物
2)给覆盖物添加数据
一般都要设置坐标(覆盖物具体摆在哪儿)
其它的。。。
3)把覆盖物添加到地图上
例1:添加圆形覆盖物
CircleOptions
//创建圆形覆盖物
CircleOptions
options
=
new
CircleOptions();
//设置数据
//圆心坐标
options.center(new
LatLng(40.050513,116.30361))
//圆半径
.radius(1000)
//填充颜色
.fillColor(Color.BLUE)
//圆的边框宽度和颜色
.stroke(new
Stroke(5,
Color.RED));
//将覆盖物添加到地图上
map.addOverlay(options);
效果如下图:
例2:添加文字覆盖物
TextOptions
TextOptions
options
=
new
TextOptions();
options.fontColor(Color.BLUE)
.fontSize(100)
.bgColor(0x3300ff00)
.rotate(30)
.typeface(Typeface.SERIF)
.position(new
LatLng(40.050513,116.30361))
.text("我在北京");
map.addOverlay(options);
效果如下图:
通过上面的两个例子,发现,文字(包括百度地图本身的文字)并不会随着地图一起缩放,
但是圆形覆盖物会随着地图一起缩放。
例3:添加标记覆盖物
MarkerOptions
MarkerOptions
options
=
new
MarkerOptions();
BitmapDescriptor
icon;
options.position(testPos)
.title("我在北京")
//是否可拖拽
.draggable(true)
//图标(工厂创建)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.eat_icon));
map.addOverlay(options);
作为一个注重产品性能的程序员,应该在设置icon的时候创建一个BitmapDescriptor的引用,
在onDestroy里回收资源
//释放图片资源
bitmapDescriptor.recycle();
4)OverlavManager搜索覆盖物的抽象基类
显示和管理多个Overlay的基类
|--本地搜索覆盖物:PoiOverlay
|--驾车路线覆盖物:DrivingRouteOverlay
|--步行路线覆盖物:WalkingRouteOverlay
|--换乘路线覆盖物:TransitOverlay
|--公交路线覆盖物:BusLineOverlay
百度地图移动版API集成搜索服务包括
|位置检索、周边检索、范围检索
(点搜索)
使用PoiSearch和OnGetPoiSearchResultListener核心类
|公交检索、驾乘检索、步行检索
(线搜索)
使用RoutePlanSearch和OnGetRoutePlanResultListener核心类
POI(PointofInterest兴趣点)搜索有三种方式
根据范围和检索词发起范围检索searchInBound
周边检索searchNearby
城市poi检索searchInCity
poi详细信息检索searchPoiDetail
结果的展示:PoiOverlay
例1:搜索指定范围内的加油站(矩形区域搜索)
private
void
search()
{
PoiSearch
search
=
PoiSearch.newInstance();
search.setOnGetPoiSearchResultListener(new
MyOnGetPoiSearchResultListener());
//范围内搜索
PoiBoundSearchOption
boundOption
=
new
PoiBoundSearchOption();
//搜索关键字
boundOption.keyword("加油站");
//搜索范围
LatLngBounds
latLngBounds
=
new
LatLngBounds.Builder()
.include(new
LatLng(39.98,
116.310))
.include(new
LatLng(39.96,
116.30))
.build();
boundOption.bound(latLngBounds);
search.searchInBound(boundOption);
}
class
MyOnGetPoiSearchResultListener
implements
OnGetPoiSearchResultListener
{
@Override
public
void
onGetPoiDetailResult(PoiDetailResult
arg0)
{
//详情搜索在此处理结果
}
@Override
public
void
onGetPoiResult(PoiResult
result)
{
if(result
==
null
||
result.error
==
SearchResult.ERRORNO.RESULT_NOT_FOUND)
{
return
;
//无搜索结果
}
//找到搜索结果
//创建覆盖物
MyOverlay
overlay
=
new
MyOverlay(map);
//++++++++监听覆盖物的点击事件++++++++++
map.setOnMarkerClickListener(overlay);
//为覆盖物绑定数据
overlay.setData(result);
//将覆盖物添加到地图上
overlay.addToMap();
//显示全部的搜索结果
overlay.zoomToSpan();
}
}
//自定义一个实现了点击事件的覆盖物
class
MyOverlay
extends
PoiOverlay
{
public
MyOverlay(BaiduMap
arg0)
{
super(arg0);
}
@Override
public
boolean
onPoiClick(int
index)
{
PoiResult
result
=
getPoiResult();
//在搜索集中找到被点击的覆盖物的信息
PoiInfo
poiInfo
=
result.getAllPoi().get(index);
Toast.makeText(getApplicationContext(),
poiInfo.address,
0).show();
return
super.onPoiClick(index);
}
}
例2:搜索周边的地铁站(圆形区域搜索)
原理和加油站的搜索一下,只是PoiSearch调用的方法及方法的参数不同,监听者不用改变。
可以进行共用。
PoiNearbySearchOption
nearbySearchOption
=
new
PoiNearbySearchOption();
nearbySearchOption.keyword("地铁站")
.radius(1000)
.location(testPos);
search.searchNearby(nearbySearchOption);
上面两个例子,MyOverlay在监听点击的时候,得到了覆盖物的PoiInfo,通过PoiInfo又可以得
到uid,根据uid就可以发起详情搜索:
//详情搜索
protected
void
detailSearch(PoiInfo
poiInfo)
{
PoiDetailSearchOption
detailSearchOption
=
new
PoiDetailSearchOption();
detailSearchOption.poiUid(poiInfo.uid);
search.searchPoiDetail(detailSearchOption);
}
监听详情搜索结果
@Override
public
void
onGetPoiDetailResult(PoiDetailResult
result)
{
if(result
==
null
||
result.error
==
SearchResult.ERRORNO.RESULT_NOT_FOUND)
{
return
;
}
Toast.makeText(getApplicationContext(),"电话:"
+
result.getTelephone(),
0).show();
}
例3:城市搜索
//城市搜索
private
void
citySearch()
{
PoiCitySearchOption
citySearchOption
=
new
PoiCitySearchOption();
citySearchOption.city("北京")
.keyword("武术馆")
.pageNum(pageIndex
++);
//分布显示数据
search.searchInCity(citySearchOption);
}
注意分页显示数据的时候,要清除之前的数据,在onGetPoiResult方法里:
//清除数据,防止分布的时候显示前一页的数据。
map.clear();
4.
百度地图高级开发:
案例1:泡泡提示信息
第1步:初始化PopView,并添加到MapView当中,隐藏PopView
private
void
initPop()
{
pop
=
View.inflate(getApplicationContext(),
R.layout.mark_item,
null);
tip
=
(TextView)
pop.findViewById(R.id.tv);
MapViewLayoutParams
params
=
new
MapViewLayoutParams.Builder()
.layoutMode(ELayoutMode.mapMode)
.position(testPos)
.width(MapViewLayoutParams.WRAP_CONTENT)
.height(MapViewLayoutParams.WRAP_CONTENT)
.build();
mMapView.addView(pop,params);
pop.setVisibility(View.INVISIBLE);
}
第2步:为BaiduMap添加Marker覆盖物的点击监听
map.setOnMarkerClickListener(this);
第3步:处理点击事件
将PopView定位到Marker的位置、获得Marker的信息并展示到PopView上去。
@Override
public
boolean
onMarkerClick(Marker
marker)
{
MapViewLayoutParams
params
=
new
MapViewLayoutParams.Builder()
.layoutMode(ELayoutMode.mapMode)
.position(marker.getPosition())
.width(MapViewLayoutParams.WRAP_CONTENT)
.height(MapViewLayoutParams.WRAP_CONTENT)
.build();
mMapView.updateViewLayout(pop,
params);
pop.setVisibility(View.VISIBLE);
tip.setText(marker.getTitle());
return
true;
}
效果图如下:
4.
百度地图定位SDK使用:
上面讲的的这些,都是地图SDK的开发。下面要说的就是定位SDK使用,就是定位手机当前的
位置。照着百度定位SDK开发文档做,但是代码需要有一定的改动。
代码如下:public
class
LocateActivity
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
);
//注册监听函数
initLocation();
}
@Override
protected
void
onStart()
{
super.onStart();
mLocationClient.start();
}
@Override
protected
void
onStop()
{
super.onStop();
mLocationClient.stop();
}
private
void
initLocation(){
LocationClientOption
option
=
new
LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int
span=1000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新媒体数据分析 实训 项目1 实训1-新媒体的概念与特征
- 2024公司用工劳动合同
- 2024包船运输合同参考模板
- 2024保证担保合同书模板
- 2024个人股份代持协议
- 2024养鸡场出售合同书
- 2024二手房交易合同书
- 2024司机保密协议书
- 残联一岗双责责任书
- 山东省淄博市2024年高二上学期期末测试英语试题含解析
- 两票培训演示
- 新能源公司组织架构及部门职责(修改稿)
- 硬笔书法考级专用纸(4—5级)
- 三年级学生学情分析
- 超星尔雅学习通《高级英语写作》章节测试含答案
- 悬臂式挡土墙计算
- 口腔修复学专业英语词汇整理
- 高一主题班会《对自己负责》.ppt
- 四年级下册数学三角形优秀复习课件
- 试论如何在初中道德与法治课堂培养学生的公民意识
评论
0/150
提交评论