Presentation is loading. Please wait.

Presentation is loading. Please wait.

第10章 GPS位置服务与地图编程.

Similar presentations


Presentation on theme: "第10章 GPS位置服务与地图编程."— Presentation transcript:

1 第10章 GPS位置服务与地图编程

2 本章知识结构图

3 支持位置服务的核心API 位置服务(Location-Based Services,LBS),又称定位服务或基于位置的服务,融合了GPS定位、移动通信、导航等多种技术,提供了与空间位置相关的综合应用服务。 Android为支持位置服务,提供了android.location包,该包中包含了与位置信息密切相关的类和接口,主要有:LocationManager、LocationProvider、Location、LocationListener。 LocationManager(定位管理者)类是访问Android系统位置服务的入口,所有定位相关的服务、对象都将由该类的对象来产生。和其他服务一样,程序不能直接创建LocationManager对象,而是通过Context的getSystemService()方法来获取。 LocationManager locMg=getSystemService(Context.LOCATION_SERVICE);

4 LocationManager中的常用方法
public String getBestProvider(Criteria criteria, boolean enabledOnly):根据指定条件返回最优的LocationProvider;criteria表 示过滤条件,enabledOnly表示是否要求处于启用状态。 public Location getLastKnownLocation(String provider):根据 LocationProvider获取最近一次已知的Location,provider表示提供上 次位置的LocationProvider名称。 public LocationProvider getProvider(String name):根据名称返回 LocationProvider。 public List<String> getProviders(boolean enabledOnly):获取所有 可用的LocationProvider。 public void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener):通过指定的 LocationProvider周期性地获取定位信息,并触发listener所对应的触发 器。

5 LocationManager中的常用方法
public void addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent):添加一个临近 警告,即不断监听手机的位置,当手机与固定点的距离小于指定范围时, 系统将会触发相应事件,进行处理。latitude指定中心点的经度, longitude指定中心点的纬度,radius指定一个半径长度,expiration指 定经过多少毫秒后该临近警告就会过期失效,-1指定永不过期,intent 指定临近该固定点时触发该intent对应的组件。 public void requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent):通过指定的 LocationProvider周期性地获取定位信息,并通过intent启动相应的组 件,进行事件处理,provider表示LocationProvider的名称,mimTime 表示每次更新的时间间隔,单位为毫秒,minDistance表示更新的最近 位置,单位为米,intent每次更新时启动的组件。

6 支持位置服务的核心API LocationProvider(定位提供者)类是对定位组件的抽象表示,用来提供定位信息,能够周期性的报告设备的地理位置,Android中支持多种LocationProvider,它们以不同的技术提供设备的当前位置,区别在于定位的精度、速度和成本等方面。 常用的LocationProvider主要有以下两种: network:由LocationManager.NETWORK_PROVIDER常量表示,代表通过网络获取定位信息的Location Provider对象; gps:由LocationManager.GPS_PROVIDER常量表示,代表通过GPS获取定位信息的LocationProvider对象。 GPS精度更高,但只能在户外工作,很费电,并且不能像用户期望的那样立即就能返回位置信息,而网络位置提供器使用手机发射塔或Wi-Fi信号来判断用户位置,在室内室外都能工作、响应速度快,并且更加省电。

7 支持位置服务的核心API LocationProvider中的常用方法
int getAccuracy():返回LocationProvider的精度; int getPowerRequirement():返回LocationProvider对电量的要求; String getName():返回LocationProvider的名称; boolean hasMonetaryCost():判断LocationProvider是否收费; boolean supportsAltitude():判断LocationProvider是否支持高度信息; boolean supportsBearing():判断LocationProvider是否支持方向信息; boolean supportsSpeed():判断LocationProvider是否支持速度信息;

8 支持位置服务的核心API Location类是代表位置信息的抽象类,通过Location可获取定位信息的精度、高度、方向、纬度、经度、速度以及该位置的LocationProvider等信息。 LocationListener接口用于监听定位信息的监听器,必须在定位管理器中注册该对象,当位置发生变化时将触发相应的方法进行事件处理,该监听器包含的方法如下。 public abstract void onLocationChanged(Location location):位置发生改变时回调该方法; public abstract void onProviderDisabled(String provider):Provider禁用时回调该方法; public abstract void onProviderEnabled(String provider):Provider启用时回调该方法; public abstract void onStatusChanged(String provider, int status, Bundle extras):Provider状态发生变化时回调该方法;

9 简单位置服务应用 获取位置信息的一般步骤: 1、通过位置服务获取系统的LocationManager对象;
2、使用Locationmanager,通过指定LocationProvider来获取Location对象,表示定位信息; 3、从Location对象中获取位置信息; 注意:获取用户的位置,涉及到用户的隐私,需要添加相关权限,并且需要用户授权方能访问。

10 百度地图编程 百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口。 通过该套 SDK可以开发适用于Android系统移动设备的地图应用,可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。 地图:提供地图展示和地图操作功能,其中地图展示包括普通地图 (2D,3D)、卫星图和实时交通图;地图操作包括地图的点击、双 击、长按、缩放、旋转、改变视角等操作。 POI检索:支持周边检索、区域检索和城市内检索。周边检索是指 以某一点为中心,指定距离为半径,根据用户输入的关键词进行POI 检索;区域检索是指在指定矩形区域内、根据关键词进行POI检索; 城市内检索是指在某一城市内,根据用户输入的关键字进行POI检索; POI详情检索是指根据POI的ID信息,检索该兴趣点的详情。

11 百度地图编程 地理编码:提供地理坐标和地址之间相互转换的能力。正向地理编码: 实现了将中文地址或地名描述转换为地球表面上相应位置的功能;反向 地理编码:将地球表面的地址坐标转换为标准地址的过程。 线路规划:支持公交信息查询、公交换乘查询、驾车线路规划和步行路 径检索。公交信息查询可对公交详细信息进行查询;公交换乘查询可根 据起、终点,查询策略,进行线路规划方案;驾车线路规划提供不同策 略,规划驾车路线;步行路径检索支持步行路径的规划。 地图覆盖物:百度地图SDK支持多种地图覆盖物,展示更丰富的地图。 目前支持的地图覆盖物有:定位图层、地图标注(Marker)、几何图 形(点、折线、弧线、多边形等)、地形图图层、POI检索结果覆盖物、 线路规划结果覆盖物、热力图图层、瓦片图层等。 定位:采用GPS、WIFI、基站、IP混合定位模式,可使用Android定位 SDK获取定位信息,使用地图SDK定位图层进行位置展示。

12 使用百度地图的准备工作 1、申请百度地图API Key。打开百度地图API官方网站: baidu .com/map/。将鼠标移动到“开发”导航菜单上,将显示下拉列表。选择其中的Android地图SDK或者Android定位SDK。

13 使用百度地图的准备工作 2、获取密钥的前提是要开发者登录,如果没有登录账号,则会跳转到登录界面。如果没有百度账号建议去注册一个,如果有百度账号则输入用户名密码直接登录,登录成功后进入下图所示页面。

14 使用百度地图的准备工作 3、单击创建应用按钮后,进入应用基本信息填写页面,在此需要填写应用名称、应用类型、数字签名、包名。

15 使用百度地图的准备工作 4、应用创建成功后,将会生成一个访问应用AK。

16 使用百度地图的准备工作 5、下载百度地图SDK,单击相关下载,选择一键下载即可。

17 百度地图中的核心API MapView:显示地图的控件,主要获取地图数据并显示,能够捕捉屏幕触控、手势等操作,根据用户操作实时更新地图数据的显示。在使用该控件之前一定要确保已调用SDKInitializer.initialize(Context)方法执行初始化操作,通过该控件可获取具体的地图对象。 BaiduMap:百度地图对象,该类封装了地图对象的操作方法和接口,例如可为其添加各种事件监听器、设置地图显示的类型(普通图、卫星图)、改变地图状态(如缩放级别)、添加图层(如添加标记)等。 MapStatusUpdate:描述地图状态将要发生的变化,例如缩放级别的变化等; LatLng:地图上位置信息的封装,包括经度、纬度信息; Marker:标记,用于突出地图上的某个位置或建筑物信息; MarkerOptions:用于设置标记的一些属性信息,例如标记的图标、标记的位置坐标、标记的标题、标记是否可拖动等;

18 根据位置信息在地图上显示标记 设计并实现右图所示功能效果。输入任意经纬度后,单击定位按钮,即可在地图上标记该位置,并能缩放地图。为地图提供两种显示模式:普通模式和卫星模式。通过单选按钮可在两种模式间切换显示。

19 案例开发过程如下: (1)根据向导创建一个Android项目,导入百度地图SDK。具体做法是切换到Project视图,将下载的jar包拷贝到项目的libs文件夹下,然后在src/main文件夹下创建一个jniLibs文件夹,将下载的so文件拷贝到jniLibs文件夹下,如图所示。其中arm64-v8a、armeabi 、arm64-v7a、x86、x86_64等文件夹用于适配不同模拟器的CPU/ABI,可根据实际情况选择其中一个,建议全部导入。

20 (2)在AndroidManifest.xml文件中添加开发密钥、所需权限等信息。在< application>标签下添加开发密钥,具体如下:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="shXnSyoNrlCQgwDXACC3QvSo" /> </application> 由于要调用百度地图的相关数据,因此需要添加相应的权限,那么究竟需要添加哪些权限?可以通过查看下载的百度地图的示例文件,从它的AndroidManifest.xml中进行拷贝即可,或者运行时根据提示信息一个个进行添加;

21 (3)在布局xml文件中添加地图控件。此处界面布局比较简单,只列出MapView控件的相关属性,代码如下。
<com.baidu.mapapi.map.MapView android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> (4)由于应用需要获取位置信息,需要用户动态授权,如果授权则执行初始化操作,否则直接提示用户无法定位。

22 (5)管理MapView的生命周期,让其随着Activity的变化而变化。调用MapView的生命方法之前,要先根据id找到这个控件。
(6)为单选按钮添加切换模式事件处理,判断选中的是哪个模式,然后设置显示模式,由于只有两种模式,非此即彼,所以在此只需判断普通模式是否选中即可,选中时显示普通视图,否则显示卫星视图。 (7)为定位按钮添加事件处理,首先获取用户输入的经纬度值,然后将其封装成LatLng对象,再根据坐标信息在地图上添加一个标记即可。 (8)为地图添加标记单击事件处理,单击标记后显示提示信息。

23


Download ppt "第10章 GPS位置服务与地图编程."

Similar presentations


Ads by Google