【移动应用开发技术】百度地图开发总结_第1页
【移动应用开发技术】百度地图开发总结_第2页
【移动应用开发技术】百度地图开发总结_第3页
【移动应用开发技术】百度地图开发总结_第4页
【移动应用开发技术】百度地图开发总结_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】百度地图开发总结

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论