基于googlemap开发个人移动地.ppt

上传人:牧羊曲112 文档编号:6262239 上传时间:2023-10-11 格式:PPT 页数:52 大小:295.50KB
返回 下载 相关 举报
基于googlemap开发个人移动地.ppt_第1页
第1页 / 共52页
基于googlemap开发个人移动地.ppt_第2页
第2页 / 共52页
基于googlemap开发个人移动地.ppt_第3页
第3页 / 共52页
基于googlemap开发个人移动地.ppt_第4页
第4页 / 共52页
基于googlemap开发个人移动地.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《基于googlemap开发个人移动地.ppt》由会员分享,可在线阅读,更多相关《基于googlemap开发个人移动地.ppt(52页珍藏版)》请在三一办公上搜索。

1、基于Google Map 开发个人移动地图,江苏润和软件股份有限公司,课程目标,1.完成Google Map的开发2.完成文章管理器,课程目标,1.完成Google Map的开发2.完成文章管理器,本章目标,1.了解位置服务的概念2.了解地图密钥的申请方式3.掌握获取位置信息的方法4.掌握MapView和MapController的使用方法5.掌Google地图覆盖层的使用方法,1、位置服务,1.1介绍,位置服务位置服务(Location-Based Services,LBS),又称定位服务或基于位置的服务,融合了GPS定位、移动通信、导航等多种技术,提供了与空间位置相关的综合应用服务位置服务

2、首先在日本得到商业化的应用2001年7月,DoCoMo发布了第一款具有三角定位功能的手持设备2001年12月,KDDI发布第一款具有GPS功能的手机基于位置的服务发展迅速,已涉及到商务、医疗、工作和生活的各个方面,为用户提供定位、追踪和敏感区域警告等一系列服务提供位置服务,首先需要获得LocationManager对象,1.1位置服务,获取LocationManager可以通过调用()函数实现()函数代码如下代码第1行的Context.LOCATION_SERVICE指明获取的服务是位置服务代码第2行的getSystemService()函数,可以根据服务名称获取Android提供的系统级服务

3、,1.1位置服务,Android支持的系统级服务表,1.1位置服务,在获取到LocationManager后,还需要指定LocationManager的定位方法,然后才能够调用LocationManagergetLastKnowLocation()方法获取当前位置LocationManager支持的定位方法有两种GPS定位:可以提供更加精确的位置信息,但定位速度和质量受到卫星数量和环境情况的影响网络定位:提供的位置信息精度差,但速度较GPS定位,1.1位置服务,LocationManager支持定位方法在指定LocationManager的定位方法后,则可以调用getLastKnowLocat

4、ion()方法获取当前的位置信息,1.1位置服务,以使用GPS定位为例,获取位置信息的代码如下String provider=LocationManager.GPS_PROVIDER;Location location=locationManager.getLastKnownLocation(provider);代码第2行返回的Location对象中,包含了可以确定位置的信息,如经度、纬度和速度等通过调用Location中的getLatitude()和getLonggitude()方法可以分别获取位置信息中的纬度和经度,示例代码如下double lat=location.getLatitude

5、();double lng=location.getLongitude();,1.1位置服务,LocationManager提供了一种便捷、高效的位置监视方法requestLocationUpdates(),可以根据位置的距离变化和时间间隔设定产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件LocationManager中设定监听位置变化的代码如下第1个参数是定位的方法,GPS定位或网络定位第2个参数是产生位置改变事件的时间间隔,单位为微秒第3个参数是距离条件,单位是米第4个参数是回调函数,在满足条件后的位置改变事件的处理函数,1.1位置服务,实现locationL

6、istener的代码如下代码将产生位置改变事件的条件设定为距离改变10米,时间间隔为2秒LocationListener locationListener=new LocationListener()public void onLocationChanged(Location location)public void onProviderDisabled(String provider)public void onProviderEnabled(String provider)public void onStatusChanged(String provider,int status,Bund

7、le extras);,1.1位置服务,第2行代码onLocationChanged()在设备的位置改变时被调用第4行的onProviderDisabled()在用户禁用具有定位功能的硬件时被调用第6行的onProviderEnabled()在用户启用具有定位功能的硬件时被调用第8行的onStatusChanged()在提供定位功能的硬件的状态改变时被调用,如从不可获取位置信息状态到可以获取位置信息的状态,反之亦然为了使GPS定位功能生效,还需要在AndroidManifest.xml文件中加入用户许可实现代码如下,1.1位置服务,位置服务一般都需要使用设备上的硬件,最理想的调试方式是将程序上

8、传到物理设备上运行,但在没有物理设备的情况下,也可以使用Android模拟器提供的虚拟方式模拟设备的位置变化,调试具有位置服务的应用程序首先打开DDMS中的模拟器控制,在Location Controls中的Longitude和Latitude部分输入设备当前的经度和纬度,然后点击Send按钮,就将虚拟的位置信息发送到Android模拟器中,1.1位置服务,在 adb shell 命令中可以确定经纬度,命令如下:geo fix 121.46690368652344 31.22337141316801 上海广州geo fix 108.94961357116699 34.2662254275286

9、74 西安geo fix 116.39649868011475 39.90861699713222 北京geo fix 117.02241897583008 36.67557848857602 济南新街口,1.1位置服务,在程序运行过程中,可以在模拟器控制器中改变经度和纬度坐标值,程序在检测到位置的变化后,会将最新的位置信息显示在界面上但笔者在1.5版本的Android模拟器中进行调试时,发现模拟器控制器只能成功的将虚拟坐标发送到模拟器中2次,超过2次后模拟器对新发送的虚拟坐标不再响应,1.1位置服务,下面是CurrentLocationDemo示例中LocationBasedServiceD

10、emo.java文件的完整代码:package;import;import;import;import;import;import;import;,1.1位置服务,public class LocationBasedServiceDemo extends Activity Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState););String serviceString=Context.LOCATION_SERVICE;LocationManager locationM

11、anager=(LocationManager)getSystemService(serviceString);String provider=LocationManager.GPS_PROVIDER;Location location=locationManager.getLastKnownLocation(provider);getLocationInfo(location);locationManager.requestLocationUpdates(provider,2000,0,locationListener);,1.1位置服务,private void getLocationIn

12、fo(Location location)String latLongInfo;TextView locationText=();if(location!=null)double lat=location.getLatitude();double lng=location.getLongitude();latLongInfo=Lat:+lat+nLong:+lng;elselatLongInfo=No location found;locationText.setText(Your Current Position is:n+latLongInfo);private final Locatio

13、nListener locationListener=new LocationListener()Overridepublic void onLocationChanged(Location location)getLocationInfo(location);,1.1位置服务,Override public void onProviderDisabled(String provider)getLocationInfo(null);Override public void onProviderEnabled(String provider)getLocationInfo(null);Overr

14、ide public void onStatusChanged(String provider,int status,Bundle extras);,2、申请地图密钥,2.1申请密钥的方法,Debug KeyStore的存放位置:exclipse下:window/preferences/android/build/Default debug keystore在dos下运行keytool-list alias androiddebugkey keystore C:Documents and Settingssdhbk.androiddebug.keystore-storepass android

15、-keypass android在dos下运行生成的指纹认证如(48:35:92:1D:DE:BE:AF:B7:A1:54:6F:DE:44:52:71:89),2.2注册密钥,打开 填入你的认证指纹(MD5)即可获得apiKey了,结果显示如下:感谢您注册 Android 地图 API 密钥!您的密钥是:0SWYOo4iEMu2e0rV0c3UzdixvVrgEY57mAOPKAQ,2.3在MapView中使用apiKey,使用得到的apiKey:在layout中加入MapView android:id=+id/mapview android:layout_width=fill_parent

16、 android:layout_height=fill_parentandroid:apiKey=0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g/,2.4权限和library包,做Google Map的时候要有网络访问的权限 Uses-library包,3、使用Google Map,3.1使用Google Map,MapView的地图的显示控件,可以设置不同的显示模式,例如卫星模式、街道模式或交通模式MapController则是MapView的控制器,可以控制MapView的显示中心和缩放级别等功能下面的内容以GoogleMapDemo为例,说明如何在Andr

17、oid系统中开发Google地图程序这个示例将在程序内部设置一个坐标点,然后在程序启动时,使用MapView控件在地图上显示这个坐标点的位置,3.1使用Google Map,在建立工程时将的扩展库添加到工程中,这样就可以使用Google地图的所有功能添加扩展库的方式是在创建工程时,在Build Target项中选择Google APIs创建工程后,修改/res/layout/main.xml文件,在布局中加入一个MapView控件,并设置刚获取的“地图密钥”,3.1使用Google Map,main.xml文件的完整代码如下,3.1使用Google Map,仅在布局中添加MapView控件,还

18、不能够直接在程序中调用这个控件,还需要将程序本身设置成MapActivity()MapActivity类负责处理显示Google地图所需的生命周期和后台服务管理下面先给出整个GoogleMapDemo.java文件的完整代码,3.1使用Google Map,3.1使用Google Map,3.1使用Google Map,第20行代码获取了MapController第22行和第23行代码设定的经度为126.676530486*1E6、纬度为45.7698895661*1E6的地理坐标点第26行代码将这个坐标转化为GeoPoint再使用第26行代码设置MapView的“显示中点”第27行代码设置放

19、大层级在第28行代码将MapView显示区域的中心移动到第26行设置的“显示中心”,3.1使用Google Map,第20行代码获取了MapController第22行和第23行代码设定的经度为126.676530486*1E6、纬度为45.7698895661*1E6的地理坐标点第26行代码将这个坐标转化为GeoPoint再使用第26行代码设置MapView的“显示中点”第27行代码设置放大层级在第28行代码将MapView显示区域的中心移动到第26行设置的“显示中心”,3.1使用Google Map,第30行代码是设定MapView的地图显示模式是否为卫星模式,设置true则为卫星模式,设

20、置false则为普通模式第34行代码isRouteDisplayed()方法,是用来统计程序是否显示在Google地图中显示路径信息,默认为不显示由于获取Google地图是需要使用互联网的,所以在运行前还需要在AndroidManifest.xml文件中,添加允许访问互联网的许可AndroidManifest.xml文件的完整代码如下,3.1使用Google Map,3.2运行结果图,运行结果如图地图模式,卫星模式,3.3OverLay的使用,通过在MapView上添加覆盖层,可以在指定的位置加添加注解、绘制图像或处理进行鼠标事件等Google地图上可以加入多个覆盖层,所有覆盖层均都在地图图层

21、之上,每个覆盖层均可以对用户的点击事件做出响应创建覆盖层继承Overlay类的子类,并通过重载draw()方法为指定位置添加注解,重载onTap()方法处理用户的点击操作下面的代码是创建Overlay的最小代码集合,3.3OverLay的使用,3.3OverLay的使用,第3行代码中draw()方法,shadow变量是用来区分绘制图层的false表示在覆盖层上进行绘制true则表示在隐藏层上进行绘制第14行代码是onTap()方法的返回值返回false表示覆盖层不处理点击事件返回true则表示已经处理了点击事件在覆盖层绘制图形或文字需要使用“画布”(Canvas)来实现,绘制的位置是屏幕坐标,

22、这就需要将地图上的物理坐标与屏幕坐标进行转换,3.3OverLay的使用,Projection类提供了物理坐标和屏幕坐标的转换功能,可在经度和纬度表示的GeoPoint点和屏幕上Point点进行转换toPixels()方法将物理坐标转换为屏幕坐标fromPixels()方法将屏幕坐标转换为物理坐标两个方法的具体使用方法可以参考下面的代码,3.3OverLay的使用,下面的内容以MapOverlayDemo示例,说明如何在Google地图上添加覆盖层,并在预订的物理坐标上显示提示信息右图是MapOverlayDemo示例的运行结果,3.3OverLay的使用,TextOverlay类是MapOv

23、erlayDemo示例的覆盖层,主要重载了draw()方法,在指定的物理坐标上绘制了标记点和提示文字TextOverlay.java文件的核心代码如下,3.3OverLay的使用,3.3OverLay的使用,第2行代码定义了绘制半径变量mRadius,供定义绘制范围使用第14行代码使用Projection完成了从物理坐标到屏幕坐标的转换,3.3OverLay的使用,第16行代码oval设定标记点的大小第19行设置了绘制颜色第20行开启了平滑设置,防止文字出现锯齿第23行代码绘制了圆形的标记点第24行代码绘制了提示文字,第2个和第3个参数是绘制屏幕的x坐标和y坐标建立了覆盖层后,还需要把覆盖层添加到MapView上MapOverlayDemo.java的核心代码如下,3.3OverLay的使用,3.3OverLay的使用,3.3OverLay的使用,第22行代码实例化了TextOverlay对象第23行代码通过getOverlays()方法,获取MapView已有的覆盖层第24行代码使用add()方法将TextOverlay对象对象添加到MapView中,项目案例,文章管理器需求说明记录文章,磁盘(sd卡,系统)=资源管理器存储的文章可以增删改查文章可以阅读(翻页,标签(标签可以多个)查找(搜索字符的确切位置),即列表定位文章分类,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号