基于安卓学校地图开发与实现_第1页
基于安卓学校地图开发与实现_第2页
基于安卓学校地图开发与实现_第3页
基于安卓学校地图开发与实现_第4页
基于安卓学校地图开发与实现_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

实训报告题目名称:中原工学院校园地图开发 导航模块的实现院系名称:网络工程班 级:网络131班学 号:4学生姓名:刘根溢指导教师:潘恒 2016年 06月目录摘要3Abstract4第1章绪论61.1研究背景61.2研究意义61.3 主要研究内容61.4实训报告结构7第2章实训的相关技术与工具82.1 Android简介82.2 Android 架构82.3 Android SDK102.4开发环境及平台搭建102.4.1 JDK的安装和Java环境变量的设置102.4.2 安装Eclipse122.4.3安装Android SDK122.4.4安装配置ADT及运行Eclipse13第3章功能实现143.1申请APIKEY143.2 下载开发包143.3 配置工程153.4 添加用户KEY163.5 地图实现173.5.1 地图实现展示173.5.2 地图实现代码183.6 导航功能203.6.1 导航功能简介203.6.2 导航功能展示203.6.3 导航实现代码展示23第4章实训心得与体会34参考文献35摘要随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网访问Web网站并处理各种各样的业务。因此,智能手机的应用软件及其需要的服务将有广阔的发展前景。在如今这个智能手机系统群雄纷争的时候,2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应用程序,即智能手机工作所需要的全部软件。Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。高德Map作为最先推出的网上地图之一,各种数据信息最为全面和准确,本系统通过高德MapApi设计一个能够实现定位、导航和交通信息发布等等功能的在线导航软件。在Android设备上具有良好的用户界面、响应速度和用户体验。关键词智能手机Android高德Map导航应用AbstractWith the rapid proliferation of smart phones, smart phone operating system market, wind and water. In order for smart phone users to check the Internet anytime, anywhere services provided an efficient way to expand the function of the system will be applied to the mobile phone terminal, the mobile phone to Internet access via mobile networks, and variety of Web sites and process business. Therefore, the smart phone applications and the need for the service will have broad prospects for development. In todays smart phone system when disputes warlords, 2008, Google introduced a smart phone called the Android open source operating system, which uses Linux kernel, Open Handset Alliance (OHA) members can be free to use and modify the SDK package, the system It has a good open-source nature of the expansion of. The software includes the operating system, user interface and applications that need to work smart phones all the software. Androids biggest feature is its open architecture, not only has a very good development and debugging environment, but also supports a variety of scalable user experience, including rich graphical components, multimedia support, and powerful browser. Therefore, for software professionals is, Android platform has unlimited appeal. Gaode Map as the first online map, all kinds of data information is the most comprehensive and accurate, this system through the Gaode Map Api design one to achieve a positioning, navigation and traffic information and more features for online navigation software. In the Android device is a good user interface, speed of response, and user experience. Keywords :Smartphone Android Gaode Map Navigation第1章 绪论1.1研究背景我校每年都会招收一大批新生,而且每年都会有校外人员来到我们中原工学院参观。这些人对我们中原工学院不是很熟悉,他们需要花时间去熟悉我们的学校,特别是新生,他们将会在这里生活学习四年或者更久,他们所需要熟悉了解的东西比一般的人都要多很多,同时所需要花的时间也会多很多,有的时候还不是很方便。随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行校园导航已成为衡量校园数字化的重要标志。校园导航效率的好坏对于来校参观的客人和学校管理者来说都至关重要,在很大程度上影响着校园的数字化建设和学校的影响力。因此,本次实训研究的校园导航系统具有一定的使用价值和现实意义。1.2研究意义现在的大学占地面积越来越大,建筑物越来越多,功能越来越多样,校内的道路也是纵横交错,校园导航系统可以帮助用户更加快速的了解学校的道路,建筑布局及建筑物的基本信息等(用户主要是新生,家长,教职工,外来参观人员等),在帮助用户了解小小道路、实现导航的功能的基础上,校园导航系统还录入了学校各个景点建筑的相关信息,以供使用者更方便快捷的找到目的地。1.3 主要研究内容本次实训主要研究关于我校基于安卓的电子地图开发,测试以及使用并且生成使用分析报告和实训报告,本人负责该项目的导航模块,其主旨是为了方便广大师生尤其是新生的不认识学校各种建筑物而产生迷路的情况。1.4实训报告结构第一章主要说明关于我校地图开发的意义与实际需求,第二章说明开发所要用到的工具以及安卓方面的相关知识,第三章主要说明百度API的应用以及实现的功能模块,第四章是实训的一些总结和体会。 第2章 实训的相关技术与工具2.1 Android简介Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。它采用软件堆层(SoftwareStack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机VirtualMachine,由C+开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。2.2 Android 架构现在我们的智能手机主要采用的系统有3类,一是苹果系统,二是安卓系统,三是塞班系统,本文主要在这里解析安卓系统。Android是一种操作系统,是给予自由开放代码的,常用于移动终端中,比如智能手机等,它的开发是由谷歌公司和开放手机联盟共同完成的,在中国虽然应用很广,但是却还没有对其有统一的称呼。Android的开发者是Andy Rubin。在Android系统中,是形成了完整的系统架构的,下面我们将对其进行详细的分析。LinuxKernel:在Android系统的实际操作中,首先需要的是LinuxKernel的支持,有了LinuxKernel的支持才能基本保证Android系统的功能实现,LinuxKernel由很多的驱动程序组成,这些驱动程序能够完成对硬件的驱动。AndroidRuntime:Android系统的运行需要良好的运行环境,这就是AndroidRuntime,这里AndroidRuntime里的CoreLibraries就相当于java的JDK,是运行android应用程序所需要的核心库,DalvikVirtualMachine就相当于JVM,这是Android系统运行所需的特定的虚拟机。Liberaries:Android系统的所有数据需要储存在特别的地方,这就是Liberaries。ApplicationFramework:这是Android系统的所有程序的框架,有了框架,系统中所有的程序才能够被放到里面,才能保证系统程序的正常运行。Application:这个就是我们开发的Application了。系统架构图APK是AndroidPackage的缩写,即Android安装包(anapk)。APK是类似SymbianSis或Sisx的文件格式。在进行安装和执行的过程中,主要是通过APK文件,然后直接传输到Android模拟器中。在Android系统中,Androidsdk编译的安装文件需要在apk中完成格式的转换,是将zip格式的文件转换成apk格式的文件,然后才能完成被unzip解压到Dex中,Dex是DalvikVMexecutes的全称,即AndroidDalvik执行程序,并非JavaME的字节码而是Dalvik字节码。在Android系统的软件开发中,开发人员可通过访问API框架来完成核心应用程序的使用,在这个框架中,所有的应用程序需要进行简化后的组件重用,所有基于这个框架开发出来的应用程序都需要有一个功能块,这个功能块是可以不遵循框架的安全性限制的,Android系统的API框架,可以运用可替换的程序,即实现程序的重用机制,并且在每一个程序的后面,都有一系列发挥服务功效的小系统,下面将重点分析这些小系统:1、用来搭建应用程序的视图(Views),这种试图是可实现丰富的可扩展的功效,试图又由一些基本的要素促成,包括表(lists),网格(grids),文本框(textboxes),按钮(buttons),甚至可嵌入的web浏览器。2、可以兼容应用程序的内容提供器(ContentProviders),在这个系统中可以在访问一个程序的时候,再访问另一个程序。3、能够实现非代码的资源访问的资源管理器(ResourceManager),主要由字符、图形和布局文件(layoutfiles)组成。4、通知管理器(NotificationManager),在Android系统中通过这个小系统能够实现自定义的提示信息的显示。5、活动管理器(ActivityManager),这个小系统是能够完成导航功能的定退的,用来管理程序生命周期的2.3 Android SDKSDK:(softwaredevelopmentkit)软件开发工具包。在特定的软件开发过程中,软件开发师会用软件开发工具包进行特定的开发工作,比如在搭建软件的框架或硬件的平台的时候,都需要运用。在安卓系统中,软件开发工具包就是AndroidSDK。在Android系统中,有一个SharedPreferences类的平台,这个平台能够提供软件配置参数的保存,使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/shared_prefs目录下。所谓的SharedPreferences,是特指在Android系统中,用来存储信息的特定机制。最重要的是在Android系统中,开放的服务是不需要收费的,开发者提供第三方平台的更大的自由度,开发人员不需要进行较高费用的支出,就可以进行软件的开发。2.4开发环境及平台搭建2.4.1 JDK的安装和Java环境变量的设置JDK下载地址/technetwork/java/javase/downloads/index.htmlJDK(Java Development Kit)是整个Java的核心,包括一系列Java开发的东西,安装完毕需要配置一下环境变量。JAVA_HOME:JDK的安装路径,这个环境变量本身不存在,需要创建,创建完则可以利用%JAVA_HOME%作为统一引用路径,其值为:jdk在你电脑上的安装路径。PATH:PATH属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值为:%JAVA_HOME%bin。CLASSPATH用于编译时JAVA类的路径,注意这里设置的是两个值,(.;)表示的是JVM先搜索当前目录。其值为:.;%JAVA_HOME%libtools.jar。配置完毕后,通过cmd运行以下命令:java -version 如果出现返回信息,则设置成功。2.4.2 安装EclipseEclipse下载地址:Eclipse下载地址:/downloads/? (选择Eclipse Standard版本即可)。Eclipse为Java及Android开发的IDE。Eclipse不需要安装,把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置你的工作目录即可。2.4.3安装Android SDKAndroid SDK下载地址:/sdk/index.html。Andorid SDK为Android管理开发包工具,提供了Android各级平台的开发包和工具。注意,因为我们是独立安装,不是一体化(集成系列工具)所以需要单独下载SDK。2.4.4安装配置ADT及运行Eclipse启动Eclipse,点击 Help菜单 - Install New Software ?,点击 ?Add ?,输入地址:/android/eclipse/。配置ADT选择 Window - Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK则完成配置。此时Android的环境就搭建完毕,可以进行Android项目的开发了。第3章 功能实现3.1申请APIKEY申请高德地图的一个key,有了这个key我们的高德地图才可以正确用起来。至于怎么申请高德地图的key,其实很简单,这里我大概说一下步骤:打开网页,注册一个高德地图API的一个账号,注册成功之后,会提示你成为开发者,成为开发者之后就能获取一个key了,获取key需要填写的内容,可以在高德地图API官网上有,仔细阅读就好了,很简单的。3.2 下载开发包下载我们开发使用的包,具体需要下载哪些,可以查看配置工程里面,都有写,在相关下载那里下载这些包。3D地图包解压后得到:3D地图显示包“AMap_3DMap_VX.X.X_时间.jar”和库文件夹(包含armeabi、arm64-v8a等库文件)。2D地图包解压后得到:2D地图显示包“AMap_2DMap_VX.X.X_时间.jar ”搜索包解压后得到:“AMap_Search_VX.X.X_时间.jar ”。3.3 配置工程 根据高德地图开发官网的详细步骤,我们可以一步步的在Eclipse里来配置开发地图所需要的各种环境要求,以满足我们后期的开发与实现。把这些包都添加到我们自己新建的Android工程里面去,然后给我们的工程分配一些权限,以及填入自己的key。3.4 添加用户KEY在工程的“ AndroidManifest.xml ”文件如下代码中添加您的用户 Key。 添加权限在工程的“ AndroidManifest.xml ”文件中进行添加,请直接拷贝。 /地图包、搜索包需要的基础权限 /定位包、导航包需要的额外权限(注:基础权限也需要) 配置工作结束3.5 地图实现3.5.1 地图实现展示3.5.2 地图实现代码 高德的Hello AMap完成地图显示功能,是地图应用的开始。所以开发地图的第一步骤就是要实现Hello AMap的地图显示。前期准备工作已经基本上完成了,接下来就是使用高德地图API能实现自己的地图,第一个功能就是实现显示地图下面是我的ShowMapActivity的布局文件 然后就是实现我的ShowMapActivity(基本上都是官方文档中的)package com.oysd.activity;import android.app.Activity;import android.os.Bundle;import com.amap.api.maps.AMap;import com.amap.api.maps.MapView;import com.oysd.ouyangmap.R;import com.oysd.ouyangmap.R.id;import com.oysd.ouyangmap.R.layout;public class ShowMapActivity extends Activity private MapView mapView; private AMap aMap Override protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_showmap); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);/必须要写 init(); /* * 初始化AMap对象 */ private void init() if (aMap = null) aMap = mapView.getMap(); /* * 方法必须重写 */ Override protected void onResume() super.onResume(); mapView.onResume(); /* * 方法必须重写 */ Override protected void onPause() super.onPause(); mapView.onPause(); /* * 方法必须重写 */ Override protected void onSaveInstanceState(Bundle outState) super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); /* * 方法必须重写 */ Override protected void onDestroy() super.onDestroy(); mapView.onDestroy(); 第一个功能是非常简单的,仅仅就是实现了显示地图.3.6 导航功能3.6.1 导航功能简介手机导航就是通过导航手机的导航功能,把你从目前所在的地方带到另一个你想要到达的地方。手机导航就是卫星手机导航,它与手机电子地图的区别就在于,它能够告诉你在地图中所在的位置,以及你要去的那个地方在地图中的位置,并且能够在你所在位置和目的地之间选择最佳路线,并在行进过程中的为你提示左转还是右转,这就是所谓的导航。3.6.2 导航功能展示第一张是我校北苑宾馆到我校体育馆的导航路径,因为新生入学前可能会在宾馆入住,等待开学报道,而且我校报道地点一般设置在体育馆附近和操场上,所以我就把导航的一条设置为这条路径,供新学生参考。第二张和第三张是本人随手定义的导航路径,仅供参考。3.6.3 导航实现代码展示public class NavigationDemoActivity extends MapActivity private String mMapKey = 注册自己的key;private EditText destinationEditText = null;private Button startNaviButton = null;private MapView mapView = null;private BMapManager mMapManager = null;private MyLocationOverlay myLocationOverlay = null;/onResume时注册此listener,onPause时需要Remove,注意此listener不是Android自带的,是百度API中的private LocationListener locationListener;private MKSearch searchModel;GeoPoint pt; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); destinationEditText = (EditText) this.findViewById(R.id.et_destination); startNaviButton = (Button) this.findViewById(R.id.btn_navi); mMapManager = new BMapManager(getApplication(); mMapManager.init(mMapKey, new MyGeneralListener(); super.initMapActivity(mMapManager); mapView = (MapView) this.findViewById(R.id.bmapsView); /设置启用内置的缩放控件 mapView.setBuiltInZoomControls(true); /设置在缩放动画过程中也显示overlay,默认为不绘制/ mapView.setDrawOverlayWhenZooming(true); /获取当前位置层 myLocationOverlay = new MyLocationOverlay(this, mapView); /将当前位置的层添加到地图底层中 mapView.getOverlays().add(myLocationOverlay); / 注册定位事件 locationListener = new LocationListener()Overridepublic void onLocationChanged(Location location) if (location != null)/生成GEO类型坐标并在地图上定位到该坐标标示的地点 pt = new GeoPoint(int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6);/System.out.println(-+location.getLatitude() +:+location.getLongitude();mapView.getController().animateTo(pt); ; /初始化搜索模块 searchModel = new MKSearch(); /设置路线策略为最短距离 searchModel.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST); searchModel.init(mMapManager, new MKSearchListener() /获取驾车路线回调方法Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) / 错误号可参考MKEvent中的定义if (error != 0 | res = null) Toast.makeText(NavigationDemoActivity.this, 抱歉,未找到结果, Toast.LENGTH_SHORT).show();return;RouteOverlay routeOverlay = new RouteOverlay(NavigationDemoActivity.this, mapView); / 此处仅展示一个方案作为示例MKRoute route = res.getPlan(0).getRoute(0);int distanceM = route.getDistance();String distanceKm = String.valueOf(distanceM / 1000) +.+String.valueOf(distanceM % 1000);System.out.println(距离:+distanceKm+公里-节点数量:+route.getNumSteps();for (int i = 0; i route.getNumSteps(); i+) MKStep step = route.getStep(i);System.out.println(节点信息:+step.getContent(); routeOverlay.setData(route); mapView.getOverlays().clear(); mapView.getOverlays().add(routeOverlay); mapView.invalidate(); mapView.getController().animateTo(res.getStart().pt);/以下两种方式和上面的驾车方案实现方法一样Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) /获取步行路线Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) /获取公交线路Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) Overridepublic void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) ); startNaviButton.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) String destination = destinationEditText.getText().toString();/设置起始地(当前位置)MKPlanNode startNode = new MKPlanNode();startNode.pt = pt;/设置目的地MKPlanNode endNode = new MKPlanNode(); endN = destination;/展开搜索的城市String city = getResources().getString(R.string.beijing);/System.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论