




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于GoogleMap开发个人移动地图 江苏润和软件股份有限公司 课程目标 1 完成GoogleMap的开发2 完成文章管理器 课程目标 1 完成GoogleMap的开发2 完成文章管理器 本章目标 1 了解位置服务的概念2 了解地图密钥的申请方式3 掌握获取位置信息的方法4 掌握MapView和MapController的使用方法5 掌Google地图覆盖层的使用方法 1 位置服务 1 1介绍 位置服务位置服务 Location BasedServices LBS 又称定位服务或基于位置的服务 融合了GPS定位 移动通信 导航等多种技术 提供了与空间位置相关的综合应用服务位置服务首先在日本得到商业化的应用2001年7月 DoCoMo发布了第一款具有三角定位功能的手持设备2001年12月 KDDI发布第一款具有GPS功能的手机基于位置的服务发展迅速 已涉及到商务 医疗 工作和生活的各个方面 为用户提供定位 追踪和敏感区域警告等一系列服务提供位置服务 首先需要获得LocationManager对象 1 1位置服务 获取LocationManager可以通过调用android app Activity getSystemService 函数实现android app Activity getSystemService 函数代码如下代码第1行的Context LOCATION SERVICE指明获取的服务是位置服务代码第2行的getSystemService 函数 可以根据服务名称获取Android提供的系统级服务 1 1位置服务 Android支持的系统级服务表 1 1位置服务 在获取到LocationManager后 还需要指定LocationManager的定位方法 然后才能够调用LocationManagergetLastKnowLocation 方法获取当前位置LocationManager支持的定位方法有两种GPS定位 可以提供更加精确的位置信息 但定位速度和质量受到卫星数量和环境情况的影响网络定位 提供的位置信息精度差 但速度较GPS定位 1 1位置服务 LocationManager支持定位方法在指定LocationManager的定位方法后 则可以调用getLastKnowLocation 方法获取当前的位置信息 1 1位置服务 以使用GPS定位为例 获取位置信息的代码如下Stringprovider LocationManager GPS PROVIDER Locationlocation locationManager getLastKnownLocation provider 代码第2行返回的Location对象中 包含了可以确定位置的信息 如经度 纬度和速度等通过调用Location中的getLatitude 和getLonggitude 方法可以分别获取位置信息中的纬度和经度 示例代码如下doublelat location getLatitude doublelng location getLongitude 1 1位置服务 LocationManager提供了一种便捷 高效的位置监视方法requestLocationUpdates 可以根据位置的距离变化和时间间隔设定产生位置改变事件的条件 这样可以避免因微小的距离变化而产生大量的位置改变事件LocationManager中设定监听位置变化的代码如下第1个参数是定位的方法 GPS定位或网络定位第2个参数是产生位置改变事件的时间间隔 单位为微秒第3个参数是距离条件 单位是米第4个参数是回调函数 在满足条件后的位置改变事件的处理函数 1 1位置服务 实现locationListener的代码如下代码将产生位置改变事件的条件设定为距离改变10米 时间间隔为2秒LocationListenerlocationListener newLocationListener publicvoidonLocationChanged Locationlocation publicvoidonProviderDisabled Stringprovider publicvoidonProviderEnabled Stringprovider publicvoidonStatusChanged Stringprovider intstatus Bundleextras 1 1位置服务 第2行代码onLocationChanged 在设备的位置改变时被调用第4行的onProviderDisabled 在用户禁用具有定位功能的硬件时被调用第6行的onProviderEnabled 在用户启用具有定位功能的硬件时被调用第8行的onStatusChanged 在提供定位功能的硬件的状态改变时被调用 如从不可获取位置信息状态到可以获取位置信息的状态 反之亦然为了使GPS定位功能生效 还需要在AndroidManifest xml文件中加入用户许可实现代码如下 1 1位置服务 位置服务一般都需要使用设备上的硬件 最理想的调试方式是将程序上传到物理设备上运行 但在没有物理设备的情况下 也可以使用Android模拟器提供的虚拟方式模拟设备的位置变化 调试具有位置服务的应用程序首先打开DDMS中的模拟器控制 在LocationControls中的Longitude和Latitude部分输入设备当前的经度和纬度 然后点击Send按钮 就将虚拟的位置信息发送到Android模拟器中 1 1位置服务 在adbshell命令中可以确定经纬度 命令如下 geofix121 4669036865234431 22337141316801上海geofix113 2752227783203123 128994281453547广州geofix108 9496135711669934 266225427528674西安geofix116 3964986801147539 90861699713222北京geofix117 0224189758300836 67557848857602济南geofix118 784072399139432 041013054723734新街口 1 1位置服务 在程序运行过程中 可以在模拟器控制器中改变经度和纬度坐标值 程序在检测到位置的变化后 会将最新的位置信息显示在界面上但笔者在1 5版本的Android模拟器中进行调试时 发现模拟器控制器只能成功的将虚拟坐标发送到模拟器中2次 超过2次后模拟器对新发送的虚拟坐标不再响应 1 1位置服务 下面是CurrentLocationDemo示例中LocationBasedServiceDemo java文件的完整代码 packageedu hrbeu LocationBasedServiceDemo importandroid app Activity importandroid content Context importandroid os Bundle importandroid widget TextView importandroid location Location importandroid location LocationListener importandroid location LocationManager 1 1位置服务 publicclassLocationBasedServiceDemoextendsActivity OverridepublicvoidonCreate BundlesavedInstanceState super onCreate savedInstanceState setContentView R layout main StringserviceString Context LOCATION SERVICE LocationManagerlocationManager LocationManager getSystemService serviceString Stringprovider LocationManager GPS PROVIDER Locationlocation locationManager getLastKnownLocation provider getLocationInfo location locationManager requestLocationUpdates provider 2000 0 locationListener 1 1位置服务 privatevoidgetLocationInfo Locationlocation StringlatLongInfo TextViewlocationText TextView findViewById R id txtshow if location null doublelat location getLatitude doublelng location getLongitude latLongInfo Lat lat nLong lng else latLongInfo Nolocationfound locationText setText YourCurrentPositionis n latLongInfo privatefinalLocationListenerlocationListener newLocationListener OverridepublicvoidonLocationChanged Locationlocation getLocationInfo location 1 1位置服务 OverridepublicvoidonProviderDisabled Stringprovider getLocationInfo null OverridepublicvoidonProviderEnabled Stringprovider getLocationInfo null OverridepublicvoidonStatusChanged Stringprovider intstatus Bundleextras 2 申请地图密钥 2 1申请密钥的方法 DebugKeyStore的存放位置 exclipse下 window preferences android build Defaultdebugkeystore在dos下运行keytool list aliasandroiddebugkey keystore C DocumentsandSettings sdhbk android debug keystore storepassandroid keypassandroid在dos下运行生成的指纹认证如 48 35 92 1D DE BE AF B7 A1 54 6F DE 44 52 71 89 2 2注册密钥 打开 2 3在MapView中使用apiKey 使用得到的apiKey 在layout中加入MapView 2 4权限和library包 做GoogleMap的时候要有网络访问的权限Uses library包 3 使用GoogleMap 3 1使用GoogleMap MapView的地图的显示控件 可以设置不同的显示模式 例如卫星模式 街道模式或交通模式MapController则是MapView的控制器 可以控制MapView的显示中心和缩放级别等功能下面的内容以GoogleMapDemo为例 说明如何在Android系统中开发Google地图程序这个示例将在程序内部设置一个坐标点 然后在程序启动时 使用MapView控件在地图上显示这个坐标点的位置 3 1使用GoogleMap 在建立工程时将com google android maps的扩展库添加到工程中 这样就可以使用Google地图的所有功能添加com google android maps扩展库的方式是在创建工程时 在BuildTarget项中选择GoogleAPIs创建工程后 修改 res layout main xml文件 在布局中加入一个MapView控件 并设置刚获取的 地图密钥 3 1使用GoogleMap main xml文件的完整代码如下 3 1使用GoogleMap 仅在布局中添加MapView控件 还不能够直接在程序中调用这个控件 还需要将程序本身设置成MapActivity com google android maps MapActivity MapActivity类负责处理显示Google地图所需的生命周期和后台服务管理下面先给出整个GoogleMapDemo java文件的完整代码 3 1使用GoogleMap 3 1使用GoogleMap 3 1使用GoogleMap 第20行代码获取了MapController第22行和第23行代码设定的经度为126 676530486 1E6 纬度为45 7698895661 1E6的地理坐标点第26行代码将这个坐标转化为GeoPoint再使用第26行代码设置MapView的 显示中点 第27行代码设置放大层级在第28行代码将MapView显示区域的中心移动到第26行设置的 显示中心 3 1使用GoogleMap 第20行代码获取了MapController第22行和第23行代码设定的经度为126 676530486 1E6 纬度为45 7698895661 1E6的地理坐标点第26行代码将这个坐标转化为GeoPoint再使用第26行代码设置MapView的 显示中点 第27行代码设置放大层级在第28行代码将MapView显示区域的中心移动到第26行设置的 显示中心 3 1使用GoogleMap 第30行代码是设定MapView的地图显示模式是否为卫星模式 设置true则为卫星模式 设置false则为普通模式第34行代码isRouteDisplayed 方法 是用来统计程序是否显示在Google地图中显示路径信息 默认为不显示由于获取Google地图是需要使用互联网的 所以在运行前还需要在AndroidManifest xml文件中 添加允许访问互联网的许可AndroidManifest xml文件的完整代码如下 3 1使用GoogleMap 3 2运行结果图 运行结果如图地图模式 卫星模式 3 3OverLay的使用 通过在MapView上添加覆盖层 可以在指定的位置加添加注解 绘制图像或处理进行鼠标事件等Google地图上可以加入多个覆盖层 所有覆盖层均都在地图图层之上 每个覆盖层均可以对用户的点击事件做出响应创建覆盖层继承Overlay类的子类 并通过重载draw 方法为指定位置添加注解 重载onTap 方法处理用户的点击操作下面的代码是创建Overlay的最小代码集合 3 3OverLay的使用 3 3OverLay的使用 第3行代码中draw 方法 shadow变量是用来区分绘制图层的false表示在覆盖层上进行绘制true则表示在隐藏层上进行绘制第14行代码是onTap 方法的返回值返回false表示覆盖层不处理点击事件返回true则表示已经处理了点击事件在覆盖层绘制图形或文字需要使用 画布 Canvas 来实现 绘制的位置是屏幕坐标 这就需要将地图上的物理坐标与屏幕坐标进行转换 3 3OverLay的使用 Projection类提供了物理坐标和屏幕坐标的转换功能 可在经度和纬度表示的GeoPoint点和屏幕上Point点进行转换toPixels 方法将物理坐标转换为屏幕坐标fromPixels 方法将屏幕坐标转换为物
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮政行业职业技能鉴定预测复习附完整答案详解【考点梳理】
- 阿坝市重点中学2025-2026学年高三物理第一学期期末达标检测模拟试题
- 2025-2026学年浙江省嘉兴市物理高三第一学期期末经典试题
- 2025年广东省惠阳高级中学物理高三上期末学业水平测试试题
- 2026届贵州省乌江中学物理高三第一学期期末考试模拟试题
- 楚雄市重点中学2025-2026学年物理高三上期末复习检测模拟试题
- 湖北安陆一中2025年物理高三上期末质量检测模拟试题
- 2025-2026学年江西省九江市彭泽一中高三物理第一学期期末预测试题
- 江苏省南通市通州 海安2025年高三物理第一学期期末经典试题
- 《永遇乐•京口北固亭怀古》教学设计 2023-2024学年统编版高中语文必修上册
- 纪念抗战胜利80周年1
- 物业客服管理知识培训课件
- 2026届广东省广州市高三上学期8月调研考试语文试题(含答案)
- 2025海南省老干部服务管理中心招聘事业编制人员6人(第1号)考试备考题库及答案解析
- 江苏省南通市如皋市2025-2026学年高三上学期开学考试数学试卷
- 2025年高一语文开学第一课指导课件
- 居民体重管理核心知识课件
- 2025-2026学年湘教版(2024)初中数学八年级上册教学计划及进度表
- GB/T 45763-2025精细陶瓷陶瓷薄板室温弯曲强度试验方法三点弯曲或四点弯曲法
- 【MOOC】理解马克思-南京大学 中国大学慕课MOOC答案
- 齿轮的设计计算PPT学习教案
评论
0/150
提交评论