




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
合 肥 学 院 课 程 设 计 报 告 题 目:基于基于 androidandroid 和和 googlegoogle mapmap 的地图的地图 定位程序的设计与实现定位程序的设计与实现 系 别:_ _ 电子信息与电气工程系电子信息与电气工程系 专 业:_ _ 通信工程通信工程_ 班 级:_ _ 0808 通信(通信(2 2)班)班_ 学 号: 姓 名: 导 师:_ _ _ 成成 绩:绩:_ _ _ 2011 年 12 月 28 日 1 摘要:摘要: android 是一种以 linux 为基础的开放源码操作系统,主要使用于便携设备。它由谷歌 公司和开放手持设备联盟开发和领导。除了开放手持设备联盟之外,android 还拥有许多由 全球各地开发者组成的开源社区来专门负责开发 android 应用程序和第三方 android 操作 系统来延长和扩展 android 的功能和性能。2011 年 8 月,android 操作系统在全球智能手机 操作系统的市场份额已达 48%,成为全球第一大智能手机操作系统,跃居全球最受欢迎的智 能手机平台。 google map,是 google 公司向全球提供的电子地图服务,包括局部详细的卫星照片。由 于 google 地图是一项电子地图服务,因而拥有比纸质地图更多的优越性,特别是近年来移 动设备的智能化,网络速度的提升,更是让 google 地图与人们的生活产生更为紧密的联系, 因而倍受人们的赞誉。 android 操作系统平台很容易跟 google 的一些应用如 google map 整合。在 android 应 用中,如果能在其中加入 google map,则会为应用增添强大的功能,目前不少 lbs 应用(基 于地理位置的应用)就是充分将移动跟地图结合起来。 本设计旨在为使用基于 android 操作系统的移动设备(如手机、平板电脑等)的用户提供 一种准确、方便的定位系统,可以通过经纬度信息,甚至仅仅是地名,就能在地图上找到该 地的地理位置。软件的开发使用 java 语言、google apisandroid 2.2开发包和 eclipse 3.3 开 发环境。 关键词:关键词:android;google map;定位;google apis;json 2 目录目录 一、设计目标一、设计目标 4 1.1 android平台简介 4 1.2 google地图简介4 1.3 功能实现4 二、环境配置二、环境配置 5 2.1 下载相关软件5 2.2 安装软件和配置环境5 2.2.1安装jdk5 2.2.2安装eclipse.6 2.2.3配置android环境6 2.3 创建基于 google apis的 avd.6 2.4 获取 google map api7 2.4.1安装google map api7 2.4.2获得google map api key.7 三、设计思路三、设计思路 9 3.1 通过经纬度定位的设计思路9 3.2 通过地名定位的设计思路9 四、设计过程四、设计过程.11 4.1google map api 的使用11 4.2 通过经纬度定位的实现11 4.2.1创建工程.11 4.2.2 修改androidmanifest.xml 文件.11 4.2.3修改main.xml.11 4.2.4实现mapactivity12 4.2.5 mapcontroller 的使用.12 4.2.6增加标记.12 4.3 通过地名定位的实现13 4.3.1监听响应函数的实现.13 4.3.2 getlocationinfo()函数的实现.13 4.3.3 getpoint()函数的实现.14 五、结果测试五、结果测试.15 5.1 启动 mapiii.15 5.2 一些简单的操作16 5.3 测试通过经纬度定位17 5.4 测试通过地名定位17 5.5 退出程序18 六、程序发布六、程序发布.19 6.1 生成keystore19 6.2 eclipse生成apk文件 19 3 七、总结七、总结21 参考文献参考文献22 附录:附录:23 1.androidmanifest.xml.23 2. main.xml.23 3.strings.xml.25 4.mapiiiactivity.java 26 5.r.java.31 6.包含“合肥学院新区”的相关地理信息的json数据32 4 一、设计目标一、设计目标 1.1 android 平台简介平台简介 android 是 google 于 2007 年 11 月 05 日宣布的基于 linux 平台的开源移动操作系统的 名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层以 linux 内核工作为基础,由 c 语 言开发,只提供基本功能;中间层包括函数库 library 和虚拟机 virtual machine,由 c+开 发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发, 以 java 作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是 首个为移动终端打造的真正开放和完整的移动软件。 2011 年第一季度,android 在全球的市场份额首次超过塞班系统,跃居全球第一。 2011 年 11 月数据,android 占据全球智能手机操作系统市场 52.5%的份额,中国市场占 有率为 58%。 1.2 google 地图简介地图简介 提起 google,人们最先想到的一定是它的搜索引擎,不过继搜索引擎之后,google 地 图的影响力越来越大。在 android 系统刚刚起步的时候,google 就看到了基于定位服务的 应用潜力,并将 google 地图的成功经验带入了 android 系统当中。很多基于定位功能的应 用程序最终都需要显示地图,google 地图已经可以非常成熟地显示交互式地图,其商业模 式还允许第三方网站将 google 地图嵌入到自己的页面中。google 地图的大部分功能都可 以在 android 平台上实现,android 平台下的开发者可以将 google 地图嵌入到自己的应用 程序中。 google 地图是 google 公司提供的电子地图服务,包括局部详细的卫星照片。能提供 三种视图:一是矢量地图(传统地图) ,可提供政区和交通以及商业信息;二是不同分辨率 的卫星照片(俯视图,跟 google earth 上的卫星照片基本一样) ;三是地形视图,可以用 以显示地形和等高线。 1.3 功能实现功能实现 本设计旨在为使用基于 android 操作系统的移动设备(如手机、平板电脑等)的用户 提供一种准确、方便的定位系统,可以通过经纬度信息,甚至仅仅是地名,就能在地图上 找到该地的地理位置。软件的开发使用 java 语言、google apisandroid 2.2开发包和 eclipse 3.3 开发环境。 5 二、环境配置二、环境配置 2.1 下载相关软件下载相关软件 表 2.1 相关软件 软件名称对应下载网址 jdk6.0/technetwork/java/javase/downloads/index.html eclipse 3.3/downloads/ android sdk/sdk/index.html 2.2 安装软件和配置环境安装软件和配置环境 2.2.1 安装安装 jdk 下载好 jdk 是一个可执行安装程序,双击安装。假设安装路径为:c:/program files/java/jdk1.6.0_05(当然其他路径也可以) 。jdk 安装完成之后要设置系统环境变量: 我的电脑点右键,选择“属性” ,选择“高级”标签,进入环境变量设置。环境变量设置, 分别设置三个环境变量:java_home、path 变量、classpath 变量。 1.设置 java_home 在系统环境变量那一栏中,点“新建”java_home(java_home 指向的是 jdk 的安装路 径) 。变量名:java_home;变量值:c:/program files/java/jdk1.6.0_05。 设置 java_home 量的目的: (1)为了方便引用,比如,jdk 安装 c:/program files/java/jdk1.6.0_05 目录里,则设 置 java_home 为该目录路径, 那么以后要使用这个路径的时候, 只需输入%java_home%即可, 避免每次引用都输入很长的路径串。 (2)归一原则, 当 jdk 路径改变的时候, 仅需更改 java_home 的变量值即可。否则,就要 更改任何用绝对路径引用 jdk 目录的文档,没有改全则某个程序找不到 jdk, 后果将导致系 统崩溃。 (3)第三方软件会引用约定好的 java_home 变量, 否则不能正常使用该软件。 2.设置 path 变量 在系统变量里找到 path 变量,选择“编辑”变量名:path ,变量值: %java_home%/bin。 设置 path 变量的目的: 使得我们能够在系统中的任何地方运行 java 应用程序,比如 javac、java、javah 等, 这就要找到我们安装 jdk 的目录,比如我们的 jdk 安装在 c:/program files/java/jdk1.6.0_05 目录下,那么在 c:/program files/java/jdk1.6.0_05/bin 目录 下就是我们常用的 java 应用程序,我们就需要把 c:/jdk1.6.0/bin 这个目录加到 path 环境 变量里面。 3.设置 classpath 环境 在系统环境变量那一栏中点“新建”classpath。变量名: classpath ,变量值: 6 .;%java_home%/lib/;%java_home%/jre/lib/(注意,classpath 最前面是有个“.”的, 表示当前目录,这样当我们运行 java aclass 的时候,系统就会先在当前目录寻找 aclass 文件了) 。 2.2.2 安装安装 eclipse 将下载的 eclipse3.3 压缩包解压到相应的安装目录即可。 2.2.3 配置配置 android 环境环境 为了让开发过程更轻松,google 还编写了一款 adt 的 eclipse 插件。要想安装该插件, 请执行以下步骤。 (1)启动 eclipse,然后选择 helpsoftware updates。 (2)单击 available software 选项卡。 (3)单击 add site 按钮。 (4)输入 android 更新站点的位置:https://android/eclipse/。 (5)现在,该 android 站点应该出现在 available software 视图中。选中该站点旁边 的复选框,然后单击 install。如果出现错误信息,原因可能是 eclipse 的版本 不对。 (6)单击 finish 开始下载安装过程。 (7)安装完成后,重新启动 eclipse。 (8)eclipse 启动后可能出现几条错误信息,因为此时需要告诉你 android sdk 位 于何处。选择 windowpreferencesandroid,然后输入你在前面记下的 sdk 安装目录。单击 ok 按钮。 2.3 创建基于创建基于 google apis 的的 avd 在 eclipse 中打开 avd 管理界面,点击“new”按钮,在“create new avd”对话框的 name 处填写 avd 的名字 gm,在 target 处选择“google apis (google inc.) api level 8” ,如图 2.1 所示,点击“create avd”按钮完成创建。 图 2.1 创建 avd 7 2.4 获取获取 google map api 2.4.1 安装安装 google map api 开发基于谷歌地图的应用和普通的 android 应用差不多都要使用它提供给我们的类库, 所不同的是 google map 的类库不是 android 平台的基本类库,而是 google api 的一部分, 所以建立项目时,sdk 要选择 google apis 选项。 2.4.2 获得获得 google map api key 在正式使用 google map api 前,必须先生成 google map api key。 1.找到 debug.keystore 文件 在 eclipse 工具下,选择 windowspreferenceandroidbuild,其中 defaultdebug keystore 的值便是 debug.keystore 的路径。 2.取得 debug.keystore 的 md5 值 首先 cmd 命令行进入 debug.keystore 文件所在的路径,执行命令:keytool -list - keystore debug.keystore,默认的密码是:android,即可取得 md5 值了,如图 2.2 所示。 图 2.2 获得 md5 3.申请 android map 的 api key 打开浏览器,输入网址:/android/maps-api-signup.html, 填入刚刚获得的的认证指纹(md5)即可获得 api key 了,结果显示如图 2.3 所示。 8 图 2.3 获得 api 9 三、设计思路三、设计思路 3.1 通过经纬度定位的设计思路通过经纬度定位的设计思路 本功能实现的目标是:在两个 edittext 对话框中分别输入经度和纬度之后,点击相应 的 button 按钮,在屏幕中的地图中会显示出所定位的位置,并在此位置上做出标记。 首先要引用 com.google.android.maps 包来实现一个地图浏览程序,创建一个 mapview 对象来显示地图。通过 mapcontroller 对象来设置地图显示的地点以及放大的倍 数,要定位地点需要构建一个 geopoint 对象来表示地点的经度和纬度,然后使用 animateto 方法将地图定位到指定的 geopoint 对象上,再新建一个 overlay 对象并在上面 标注一些图标文字信息。 3.2 通过地名定位的设计思路通过地名定位的设计思路 本功能的实现目标是:在一个 edittext 里输入一个地名,点击 button,在 mapview 里便会显示出该地。实际上,由于在 google map 中必须获得经纬度才能定位,故本定位方 法不过是前一种定位方法的加强版,即先通过地名获得该地的经纬度,再通过经纬度进行 定位。由此可知,本设计的核心内容,便是如何通过地名获得该地的经纬度。 本来此问题应该很好解决,因为 google 提供了一个用于实现该功能的 geocoder 类, 只要使用该类生成一个对象,并使用 getfromlocationname()方法,只需几句代码便可轻 松将地名转换为相应的经纬度,我们手中的 android 开发教材和网络上能够搜索到的绝大 部分资料中使用的都是该方法,如下: geocoder geocoder=new geocoder(this); list list=geocoder.getfromlocationname(address,1); /address是输入的地址信息 if(!lstaddress.isempty() address address=list.get(0); double latitude=address.getlatitude()*1e6; double longitude=adress.getlongitude()*1e6; geopoint geopoint=new geopoint(int)latitude,(int)longitude); 但我们在实际的开发过程中发现,在调试程序时,点击 button 后,程序没有任何响应。 经反复调查研究后我们得知,由于 google map 中的 getcoder 反转经纬度一直存在 bug, 在前一段时间 google 终止了这项服务,故 geocoder 返回 list 为 null,得不到地址信息。 当我们正一筹莫展之时,我们从一份资料上获得了另一种新的但较为麻烦的获取地理 位置经纬度的方法:通过 json 数据解析地址。 json(javascript object notation) 是一种轻量级的数据交换格式。它基于 javascript(standard ecma-262 3rd edition - december 1999)的一个子集。 json 采 用完全独立于语言的文本格式,但是也使用了类似于 c 语言家族的习惯,这些特性使 json 成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成。 10 在浏览器的地址栏里输入以下网址: “/maps/api/geocode/jso n?address=合肥学院新区 /设置为交通模式 mapview.setsatellite(true); /设置为卫星模式 mapview.setstreetview(false);/设置为街景模式 4.2.5 mapcontroller 的使用的使用 如果需要设置地图显示的地点以及放大倍数等,就需要使用 mapcontroller 来控制地 图。可以通过如下代码获得 mapcontroller 对象: mapcontroller mapcontroller; mapcontroller = mapview.getcontroller(); 要定位地点,需要构造一个 geopoint 来表示地点的经纬度,然后使用 animateto 方法 将地图定位到指定的 geopoint 上,代码如下: geopoint geopoint01; geopoint01= new geopoint(int) (edittext01double * 1000000), (int) (edittext02double * 1000000); mapcontroller.animateto(geopoint01); 4.2.6 增加标记增加标记 为了给地图多增加一些自定义的功能,比如可以在地图上进行一些标注。为了实现这 样的功能,我们可以继承 overlay 这个类,这个类是一个基类,提供了可以在地图上添加 图层的基本功能。 在定位的目标地点引入一张图片做标记,代码如下: canvas.drawbitmap(bmp, myscreencoords.x, myscreencoords.y, paint); 在定位的目标地点添加文字做标记,代码如下: canvas.drawtext(“定位目标“, myscreencoords.x, myscreencoords.y, paint); 13 4.3 通过地名定位的实现通过地名定位的实现 4.3.1 监听响应函数的实现监听响应函数的实现 1.从 textview 对象中获取输入的地址信息: string address=edittext03.gettext().tostring(); 2.下面调用了两个函数 getlocationinfo()和 getgeopoint(),前者通过 http 取得 json 数据,返回的是 jsonobject 对象,交给后者;后者解析出 jsonobject 对象中的经纬 度数据,交给 geopoint 对象,并将 geopoint 对象返回: geopoint02=getgeopoint(getlocationinfo(address); 3. 使用 animateto 方法将定位: mapcontroller.animateto(geopoint02); 4.3.2 getlocationinfo()函数的实现函数的实现 1.根据 url 地址创建 httpget 请求对象: httpget httpget=new httpget(“/maps/api/ geocode/json?address=“ + address + “ 2.创建 http 客户端对象: httpclient httpclient=new defaulthttpclient(); 3.创建 http 响应对象: httpresponse httpresponse; 4.定义一个字符串缓冲区,与一般的 string 对象的区别是 stringbuffer 对象里面的 内容可以增加和修改,用于存储从 inputstream 对象中读取出的字符串: stringbuffer stringbuffer=new stringbuffer(); 5.通过 httpclient 对象执行一次 get 方式的 http 请求,并返回一个 httpresponse 对 象作为服务器的响应: httpresponse=httpclient.execute(httpget); 6.获取响应的内容,这里需注意 httpresponse 对象只是代表了服务器的响应, httpentity 对象才是该响应的实体: httpentity httpentity=httpresponse.getentity(); 7.获取服务器响应的输入流,getcontent()方法可以得到其内容: inputstream inputstream=httpentity.getcontent(); 8.循环读取服务器响应。将从 inputstream 对象中读取出的字符元素赋值给整型对象 b,一般来说赋值的结果不可能是-1,只有当 inputstream 对象读完时才会得到-1。在该循 环里将整型对象 b 的内容转换成字符元素并追加给 stringbuffer,注意此时字符元素对象 b 的内容与从 inputstream 对象中读取出的字符元素一致,这样就实现了读取服务器响应: int b; while (b=inputstream.read()!=-1) stringbuffer.append(char)b); 14 9.关闭输入流: inputstream.close(); 10.创建一个 jsonobject 对象: jsonobject jsonobject=new jsonobject(); 11.将 stringbuffer 对象里的字符串转换为 jsonobject 对象: jsonobject=new jsonobject(stringbuffer.tostring(); 12.返回该 jsonobject 对象: return jsonobject; 4.3.3 getpoint()函数的实现函数的实现 1.定义两个 double 数组,用于储存经纬度信息: double lon=new double(0); double lat=new double(0); 2.从 jsonobject 对象中取出代表纬度的“lng“的值,具体过程是:先得到”result” 里的值,从值里取得第一个结果,在逐步往下”geometry”location”lng”,最 终得到“lng“里的值: lon=(jsonarray)jsonobject.get(“results“).getjsonobject(0).getjs onobject(“geometry“).getjsonobject(“location“).getdouble(“lng“); 3.从 jsonobject 对象中取出代表经度的“lat“的值,过程同上: lat=(jsonarray)jsonobject.get(“results“).getjsonobject(0).getjs onobject(“geometry“).getjsonobject(“location“).getdouble(“lat“); 4.将取得的经纬度数据转换成 geopoint 对象并返回: return new geopoint(int)(lat*1e6),(int)(lon*1e6); 15 五、结果测试五、结果测试 5.1 启动启动 mapiii 在 eclipse 界面里选择 run 菜单,点击 run cunfigurations,弹出一个对话框。先看 android 标签,在 project 里找到要运行的项目 mapiii 并选中;在 target 标签里,选择 之前建立的 avd。点击 run 即可运行。如图 5.1 和图 5.2。 图 5.1 选择项目 16 图 5.2 选择 avd 5.2 一些简单的操作一些简单的操作 1.程序启动后,得到如图的结果。默认的地图是美国某城市,并且是是卫星图,如图 5.3。 图 5.3 默认地图 2.点击屏幕,出现控制放大和缩小的按钮,可用其放大或缩小屏幕,如图 5.4。 3.点击“交通图”按钮,便可切换为交通图,如图 5.5。点击“卫星图”按钮会回到卫星 17 图。 图 5.4 卫星图 图 5.5 交通图 5.3 测试通过经纬度定位测试通过经纬度定位 在相应的输入框中输入香港某地的经纬度(22.2806,114.1650),点击“定位”按钮, 地图便会跳转到该地点,并在该点上显示图片和“定位的目标”,如图 5.6 和图 5.7。 18 图 5.6 经纬度定位(卫星图) 图 5.7 经纬度定位(交通图) 5.4 测试通过地名定位测试通过地名定位 在地址栏中输入“合肥学院新区”,点击“查找”按钮,地图便会跳转到合肥学院新 区,如图 5.8 和图 5.9 所示。 19 图 5.8 地名搜索(卫星图) 图 5.9 地名搜索(交通图) 5.5 退出程序退出程序 点击 menu 按钮,在弹出的菜单中选择“退出”,如图 5.10,程序便可结束。 20 图 5.10 退出菜单 六、程序发布六、程序发布 对于绝大部分开发者而言,编写 android 手机应用程序的目的除了自娱自乐外,最重 要的就是和别人分享,可以收费,也可以免费。google 已经为此创建了一个 android 电子 市场。任何一款具有联网功能的 android 手机都可以打开 android 电子市场,其中有成千 上万的应用程序可供用户下载。在 android 电子市场上发布自己的应用程序之前,必须先 对其进行签名。事实上,在应用程序的开发过程中就已经在进行数字签名了,当每次通过 eclipse 启动应用程序时 android sdk 会自动为程序生成一个调试签名。问题是调试签名 并不能用于在 android 电子市场上发布应用程序,必须专门为应用程序的发布生成一个新 的签名。 6.1 生成生成 keystore 按照下面的命令行在 c:program filesjavajdk1.6.0_30bin目录下,输入: keytool -genkey -alias android.keystore -keyalg rsa -validity 100000 -keystore android.keystore,其中-validity 主要是证书的有效期,本次设为 100000 天。然后依提 示进行,空格和退格键都可作为密码。如图 6.3 所示。命令执行后会在 c:program filesjavajdk1.6.0_30bin目录下生成 android.keystore 文件。 21 图 6.1 生成 keystore 6.2 eclipse 生成生成 apk 文件文件 1.选择要打包的项目,右键点击android toolsexport signed application package 并选择打包的项目。 2.选择生成的 android.keystore 文件并输入密码,如图 6.2。 图 6.2 选择 android.keystore 文件并验证 3.再选择 alias key 并输入密码,如图 6.3。 22 图 6.3 选择 alias key 文件并验证 4.最后选择生成 android apk 文件的目录及文件名,最终生成 apk 文件,如图 6.4。 图 6.4 最终的 apk 文件 七、总结七、总结 本学期通信技术创新课程设计由本专业老师命题,学生选题找指导老师的形式,并且 组队操作。趣味性强,同时也可以学到很多东西。 我们认为,在本课题中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程 中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操 作的能力,在各种其它能力上也都有了提高。更重要的是,在过程中,我们学会了很多学 习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、 实践,再学习、再实践。 本系统仍有很多瑕疵。例如,搜索“合肥学院”可以得到数个地理位置经纬度,但本 系统只能返回第一个结果(北区的经纬度),最终只能定位到合肥学院北区。而理论上可 以实现一种功能,把所有符合要求的结果都在地图上做上一种特殊的标记,点击标记可以 便得到其详细地址,便可解决此问题。由于时间的紧缺、课业的繁忙以及自身能力的限制, 很多地方我们并没有做到最好。但是,这份软件仍是我们的骄傲。相信以后我们会以更加 积极地态度对待我们的学习、对待我们的生活。我们的激情永远不会结束,相反,我们会 更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己 23 的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。只有不断的测试自 己,挑战自己,才能拥有更多的成功和快乐! 快乐至上,享受过程,而不是结果!认真对 待每一个过程,珍惜每一分一秒,学到最多的知识和方法,锻炼自己的能力,这个是我们 在本课题中学到的最重要的东西,也是以后都将受益匪浅的! 最后,感谢李祎老师的辛勤指导! 参考文献参考文献 1李新力.j2me 实用教程.北京:人民邮电出版社,2009.6 2ed buruette.android 基础教程(第三版).北京:人民邮电出版社,2010.8 3rick rogers,jobn lombardo,zigurd mednieks,blake meike.android 应用开发.北京: 人民邮电出版社,2010.9 4王向辉,张国印,沈洁.android 应用程序开发.北京:清华大学出版社,2010.3 5吴亚峰,索伊娜.android 核心技术与实例详解.北京:电子工业出版社,2011.3 24 附录:附录: 1.androidmanifest.xml 25 2. main.xml 3.strings.xml hello world, mapiiiactivity! mapiii 请填入纬度 请填入经度 定位 地址: 合肥学院新区 查找 退出 地图切换: 卫星图 交通图 4.mapiiiactivity.java package chenzhen.mapiii; import chenzhen.mapiii.r; import com.google.android.maps.mapactivity; import java.io.ioexception; import java.io.inputstream; import java.util.list; import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.client.clientprotocolexception; import org.apache.http.client.httpclient; import org.apache.http.client.methods.httpget; import org.apache.http.impl.client.defaulthttpclient; import org.json.*; import com.google.android.maps.geopoint; import com.google.android.maps.mapcontroller; 28 import com.google.android.maps.mapview; import com.google.android.maps.overlay; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.canvas; import android.graphics.paint; import android.graphics.point; public class mapiiiactivity extends mapactivity /* called when the activity is first created. */ edittext edittext01; edittext edittext02; edittext edittext03; button button01; button button02; button button03; button button04; textview textview01; textview textview02; mapview mapview; mapcontroller mapcontroller; geopoint geopoint01; geopoint geopoint02; override public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.main); edittext01=(edittext)findviewbyid(r.id.edittext01); edittext02=(edittext)findviewbyid(r.id.edittext02); edittext03=(edittext)findviewbyid(r.id.edittext03); button01=(button)findviewbyid(r.id.button01); button02=(button)findviewbyid(r.id.button02); button03=(button)findviewbyid(r.id.button03); button04=(button)findviewbyid(r.id.button04); 29 mapview=(mapview)findviewbyid(r.id.mapview); mapcontroller = mapview.getcontroller(); mapview.setsatellite(true); mapview.setenabled(true); mapview.setbuiltinzoomcontrols(true); mapcontroller.setzoom(15); button01.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub string edittext01str=edittext01.gettext().tostring(); string edittext02str=edittext02.gettext().tostring(); double edittext01double=double.parsedouble(edittext01str); double edittext02double=double.parsedouble(edittext02str); geopoint01= new geopoint(int) (edittext01double * 1000000), (int) (edittext02double * 1000000); if(geopoint01!=null) mapcontroller.animateto(geopoint01); mylocationoverlay mylocationoverlay = new mylocationoverlay(); list list = mapview.getoverlays(); list.add(mylocationoverlay); ); button02.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub string address=edittext03.gettext().tostring(); geopoint02=getgeopoint(getlocationinfo(address); if(geopoint02!=null) mapcontroller.animateto(geopoint02); ); button03.setonclicklistener(new onclicklistener() 30 override public void onclick(view v) / todo auto-generated method stub mapview.settraffic(false); mapview.setsatellite(true); ); button04.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub mapview.setsatellite(false); mapview.settraffic(true); ); class mylocationoverlay extends overlay override public boolean draw(canvas canvas, mapview mapview, boolean shadow, long when) super.draw(canvas, mapview, shadow); paint paint = new paint(); point myscreencoords = new point(); mapview.getprojection().topixels(geopoint01, myscreencoords); paint.setstrokewidth(1); paint.setargb(255, 255, 0, 0); paint.setstyle(paint.style.stroke); bitmap bmp = bitmapfactory.decoderesource(getresources(), r.drawable.home); canvas.drawbitmap(bmp, myscreencoords.x, myscreencoords.y, paint); canvas.drawtext(“定位的目标“, myscreencoords.x, myscreencoords.y, paint); return true; 31 public static jsonobject getlocationinfo(string address) httpget httpget=new httpget(“/maps/api/ geocode/json?address=“ + address + “ httpclient httpclient=new defaulthttpclient(); httpresponse httpresponse; stringbuffer stringbuffer=new stringbuffer(); try httpresponse=httpclient.execute(httpget); httpentity httpentity=httpresponse.getentity(); inputstream inputstream=httpentity.getcontent(); int b; while (b=inputstream.read()!=-1) stringbuffer.append(char)b); inputstream.close(); catch (clientprotocolexception e) / todo auto-generated catch block e.printstacktrac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 丙烯腈项目质量管理方案
- 2025中介服务合同协议书范本
- 标准员试题含答案
- 含水80%的鸡粪密度
- 海外保险公司投资黄金的案例
- 2025年红河a2货运从业资格证模拟考试题
- 廉政教育基地建设情况
- 虽有嘉肴课件
- 公司员工年会发表感言(23篇)
- 关于中秋节演讲稿
- 吉林省吉林市2024-2025学年高三下学期3月三模试题 英语 含答案
- 工程竣工决算编审方案的编制与审核指导
- 国开2025年《会计政策判断与选择》形考任务1-9答案
- 2025年智慧农业考试题大题及答案
- Unit3 Weather Part A(教学设计)-2023-2024学年人教PEP版英语四年级下册
- 计调业务2.2组团计调发团业务流程
- 《淋巴管瘤诊疗》课件
- 2025山东省安全员B证考试题库附答案
- 广告印刷投标方案(技术方案)
- 红色体育知到智慧树章节测试课后答案2024年秋西安体育学院
- Excel财务会计应用(沈国兴第3版) 第1-36次课 认识EXCEL-期末考试
评论
0/150
提交评论