版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈尔滨理工大学软件学院第第1章章 位置服务与地图应用位置服务与地图应用教师:马超哈尔滨理工大学软件学院本章学习目标:n了解位置服务的概念n了解地图密钥的申请方法n掌握获取位置信息的方法n掌握MapView和MapController的使用方法n掌握Google地图覆盖层的使用方法哈尔滨理工大学软件学院9.1 位置服务 n位置服务q位置服务(Location-Based Services,LBS),又称定位服务或基于位置的服务,融合了GPS定位、移动通信、导航等多种技术,提供与空间位置相关的综合应用服务 q位置服务首先在日本得到商业化的应用 q2001年7月,DoCoMo发布了第一款具有三角定位
2、功能的手持设备 q2001年12月,KDDI发布第一款具有GPS功能的手机 q基于位置的服务发展更加迅速,涉及商务、医疗、工作和生活的各个方面,为用户提供定位、追踪和敏感区域警告等一系列服务哈尔滨理工大学软件学院9.1 位置服务 n位置服务qAndroid平台支持提供位置服务的API,在开发过程中主要用到LocationManager和LocationProviders对象qLocationManager可以用来获取当前的位置,追踪设备的移动路线,或设定敏感区域,在进入或离开敏感区域时设备会发出特定警报 qLocationProviders则是提供定位功能的组件集合,集合中的每种组件以不同的技
3、术提供设备的当前位置,区别在于定位的精度、速度和成本等方面 哈尔滨理工大学软件学院9.1 位置服务 n位置服务q为了使开发的程序能够提供位置服务,首先的问题是如何获取LocationManager q获取LocationManager可以通过调用android.app.Activity.getSystemService()函数获取,代码如下1String serviceString = Context.LOCATION_SERVICE;2LocationManager LocationManager = (LocationManager)getSystemService(serviceStri
4、ng);n代码第1行的Context.LOCATION_SERVICE指明获取的是位置服务 n代码第2行的getSystemService()函数,可以根据服务名称获取Android提供的系统级服务 哈尔滨理工大学软件学院9.1 位置服务 n位置服务qAndroid支持的系统级服务表ContextContext类的静态常量类的静态常量值值返回对象返回对象说明说明LOCATION_SERVICElocationLocationManager控制位置等设备的更新WINDOW_SERVICEwindowWindowManager最顶层的窗口管理器LAYOUT_INFLATER_SERVICElayo
5、ut_inflaterLayoutInflater将 X M L 资 源 实 例 化 为ViewPOWER_SERVICEpowerPowerManager电源管理ALARM_SERVICEalarmAlarmManager在指定时间接受IntentNOTIFICATION_SERVICEnotificationNotificationManager 后台事件通知KEYGUARD_SERVICEkeyguardKeyguardManager锁定或解锁键盘SEARCH_SERVICEsearchSearchManager访问系统的搜索服务VIBRATOR_SERVICEvibratorVibra
6、tor 访问支持振动的硬件CONNECTIVITY_SERVICEconnectionConnectivityManager 网络连接管理WIFI_SERVICEwifiWifiManager Wi-Fi连接管理INPUT_METHOD_SERVICEinput_methodInputMethodManager 输入法管理哈尔滨理工大学软件学院9.1 位置服务 n位置服务q在获取到LocationManager后,还需要指定LocationManager的定位方法,然后才能够调用LocationManager.getLastKnowLocation()方法获取当前位置 q目前LocationM
7、anager中主要有两种定位方法 nGPS定位:可以提供更加精确的位置信息,但定位速度和质量受到卫星数量和环境情况的影响n网络定位:提供的位置信息精度差,但速度较GPS定位要迅速哈尔滨理工大学软件学院9.1 位置服务 n位置服务qLocationManager支持定位方法LocationManagerLocationManager类类的静态常量的静态常量 值值 说明说明 GPS_PROVIDER gps 使用GPS定位,利用卫星提供精确的位置信息,需要android.permissions.ACCESS_FINE_LOCATION用户权限NETWORK_PROVIDER network 使用网
8、络定位,利用基站或WiFi访问的提供近似的位置信息,需要具有如下权限:android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION. 哈尔滨理工大学软件学院9.1 位置服务 n位置服务q在指定LocationManager的定位方法后,则可以调用getLastKnownLocation()方法获取当前的位置信息。以使用GPS定位为例,获取位置信息的代码如下1String provider = LocationManager.GPS_PROVIDER;2Location location = l
9、ocationManager.getLastKnownLocation(provider);n代码第2行返回的Location对象中,包含了可以确定位置的信息,如经度、纬度和速度等q通过调用Location中的getLatitude()和getLonggitude()方法可以分别获取位置信息中的纬度和经度,示例代码如下1double lat = location.getLatitude();2double lng = location.getLongitude();哈尔滨理工大学软件学院9.1 位置服务 n位置服务q在很多提供定位服务的应用程序中,不仅需要获取当前的位置信息,还需要监视位置的变
10、化,在位置改变时调用特定的处理方法 qLocationManager提供了一种便捷、高效的位置监视方法requestLocationUpdates(),可以根据位置的距离变化和时间间隔设定,产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件 qLocationManager中设定监听位置变化的代码如下locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);n第1个参数是定位的方法,GPS定位或网络定位n第2个参数是产生位置改变事件的时间间隔,单位为微秒n第3个参数是距离条
11、件,单位是米n第4个参数是回调函数,用于处理位置改变事件哈尔滨理工大学软件学院9.1 位置服务 n位置服务n代码将产生位置改变事件的条件设定为距离改变10米,时间间隔为2秒n实现locationListener的代码如下1 LocationListener locationListener = new LocationListener()2 public void onLocationChanged(Location location) 3 4 public void onProviderDisabled(String provider) 5 6 public void onProviderE
12、nabled(String provider) 7 8 public void onStatusChanged(String provider, int status, Bundle extras) 9 10 ;哈尔滨理工大学软件学院9.1 位置服务 n位置服务q第2行代码onLocationChanged()在位置改变时被调用q第4行的onProviderDisabled()在用户禁用具有定位功能的硬件时被调用q第6行的onProviderEnabled()在用户启用具有定位功能的硬件时被调用q第8行的onStatusChanged()在定位功能硬件状态改变时被调用,例如,从不可获取位置信息
13、状态到可以获取位置信息的状态,反之亦然 哈尔滨理工大学软件学院9.1 位置服务 n位置服务q为了使GPS定位功能生效,还需要在AndroidManifest.xml文件中加入用户许可q实现代码如下哈尔滨理工大学软件学院9.1 位置服务 n位置服务qCurrentLocationDemo是一个提供基本位置服务的示例,可以显示当前位置信息,并能够监视设备的位置变化 qCurrentLocationDemo的用户界面如下图所示哈尔滨理工大学软件学院9.1 位置服务 n位置服务q位置服务一般都需要使用设备上的硬件,最理想的调试方式是将程序上传到物理设备上运行,但在没有物理设备的情况下,也可以使用And
14、roid模拟器提供的虚拟方式模拟设备的位置变化,调试具有位置服务的应用程序n首先打开DDMS中的模拟器控制,在Location Controls中的Longitude和Latitude部分输入设备当前的经度和纬度,然后点击Send按钮,就将虚拟的位置信息发送到Android模拟器中,如下图所示哈尔滨理工大学软件学院9.1 位置服务 n位置服务q在程序运行过程中,可以在模拟器控制器中改变经度和纬度坐标值,程序在检测到位置的变化后,会将最新的位置信息显示在界面上 q下面给出CurrentLocationDemo示例中CurrentLocationDemoActivity.java文件的完整代码1p
15、ackage edu.hrbeu.CurrentLocationDemo;23import android.app.Activity;4import android.content.Context;5import android.location.Location;6import android.location.LocationListener;7import android.location.LocationManager;8import android.os.Bundle;9import android.widget.TextView;哈尔滨理工大学软件学院9.1 位置服务 n位置服务1
16、011public class CurrentLocationDemoActivity extends Activity 12 13 Override14 public void onCreate(Bundle savedInstanceState) 15 super.onCreate(savedInstanceState);16 setContentView(R.layout.main);17 18 String serviceString = Context.LOCATION_SERVICE;19 LocationManager locationManager = (LocationMan
17、ager)getSystemService(serviceString);20 21 String provider = LocationManager.GPS_PROVIDER;22 Location location = locationManager.getLastKnownLocation(provider);23 24 getLocationInfo(location);哈尔滨理工大学软件学院9.1 位置服务 n位置服务25 26 locationManager.requestLocationUpdates(provider, 2000, 0, locationListener);2
18、7 28 29 private void getLocationInfo(Location location)30 String latLongInfo;31 TextView locationText = (TextView)findViewById(R.id.label);32 33 if (location != null)34 double lat = location.getLatitude();35 double lng = location.getLongitude();36 latLongInfo = Lat: + lat + nLong: + lng;37 38 else39
19、 latLongInfo = No location found;40 哈尔滨理工大学软件学院9.1 位置服务 n位置服务41 42 locationText.setText(Your Current Position is:n + latLongInfo);43 44 45 private final LocationListener locationListener = new LocationListener()4647Override48public void onLocationChanged(Location location) 49 getLocationInfo(locatio
20、n);505152Override53public void onProviderDisabled(String provider) 54 getLocationInfo(null);55哈尔滨理工大学软件学院9.1 位置服务 n位置服务5657Override58public void onProviderEnabled(String provider) 59getLocationInfo(null);606162Override63public void onStatusChanged(String provider, int status, Bundle extras) 646566 ;
21、67哈尔滨理工大学软件学院9.1 位置服务(续) nLocationManager.GPS_PROVIDER:GPS,精度比较高,但是慢而且消耗电力,而且可能因为天气原因或者障碍物而无法获取卫星信息,另外设备可能没有GPS模块。nLocationManager.NETWORK_PROVIDER:通过网络获取定位信息,精度低,耗电少,获取信息速度较快,不依赖GPS模块。 n为了程序的通用性,希望动态选择location provider。对android通过Location API显示地址信息做了个别改动,可以看到使用了gps定位,精度较高。哈尔滨理工大学软件学院9.1 位置服务(续) n这里使
22、用到了Criteria,可根据当前设备情况自动选择哪种locationprovider:LocationManagerlocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);Criteriacriteria=newCriteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);/设置为最大精度/设置定位精确度Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细criteria.setAltit
23、udeRequired(false);/不要求海拔信息criteria.setBearingRequired(false);/不要求方位信息criteria.setCostAllowed(true);/设置是否允许运营商收费criteria.setPowerRequirement(Criteria.POWER_LOW);/对电量的要求location=locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,true);哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q为
24、了在手机中更直观地显示地理信息,程序开发人员可以直接使用Google提供的地图服务,实现地理信息的可视化开发 q只要使用MapView(com.google.android.maps.MapView)就可以将Google地图嵌入到Android应用程序中 q但在使用MapView进行开发前,必须向Google申请经过验证的“地图密钥”(Map API Key),这样才能正常使用Google的地图服务q“地图密钥”是访问Google地图数据的密钥,无论是模拟器还是在真实设备中需要使用这个密钥哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q注册“地图密钥”的第一步是申请
25、一个Google账户,也就是Gmail电子邮箱,申请地址是https:/ Google地图应用n9.2.1申请地图密钥n获取证书的保存地址的方法:首先打开Eclipse,通过WindowPreferences打开配置窗体,在AndroidBuild栏中的Defaultdebugkeystore中可以找到哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q为了获取Debug证书MD5散列值的,需要打开命令行工具CMD,然后切换到keystore的目录,输入如下命令keytool -list -v -keystore debug.keystoreqKeytool是JDK提供
26、的工具,如果提示无法找到keytool,可以将/bin的路径添加到系统的PATH变量中哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q在提示输入keystore密码时,输入密码android,或直接输入回车,MD5、SHA1和SHA256散列值将都显示出来。如下图所示,笔者的MD5散列值为D4:8C:F8:29:A4:4F:57:D4:A8:F5:49:D9:9A:38:5A:F6哈尔滨理工大学软件学院9.2.1 申请地图密钥n获取Debug证书的keystore中的SHA1的值:WindowPreferences打开配置窗体,在AndroidBuild栏哈尔滨理工
27、大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q申请“地图密钥”的最后一步是打开申请页面,输入SHA1散列值 q申请页面的地址是https:/ Google地图应用n9.2.1申请地图密钥哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q获取Map API Key页面哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q输入MD5散列值后,点击Generate API Key按钮,将提示用户输入Google账户,正确输入后账户后,将生产申请“地图密钥”的获
28、取结果,如下图所示哈尔滨理工大学软件学院9.2 Google地图应用n9.2.1申请地图密钥q笔者获取的“地图密钥”是AIzaSyDnivJ29hq9av1I_vMItypU5Vgfxx9_m_o,在以后使用到MapView的时候都需要输入这个密钥 q但需要注意的是,读者必须根据Debug证书的MD5散列值,自己到Google网站上申请一个用于调试程序的“地图密钥”,而不能使用上面笔者申请到的“地图密钥” 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图qMapView是地图的显示控件,可以设置不同的显示模式,例如卫星模式、街道模式或交通模式 qMapCont
29、roller是MapView的控制器,可以控制MapView的显示中心和缩放级别等功能 q下面的内容以GoogleMapDemo为例,说明如何在Android系统中开发Google地图程序q这个示例将在程序内部设置一个坐标点,然后在程序启动时,使用MapView控件在地图上显示这个坐标点的位置哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图q因为普通版本的Android SDK并不包含Google地图的开发扩展库,因此在建立工程时需将com.google.android.maps扩展库添加到工程中,这样就可以使用Google地图的所有功能q添加com.goog
30、le.android.maps扩展库的方式是在创建工程时,在Build Target项中选择Google APIs,如下图所示哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图q引入Google地图扩展库(图)哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图q创建工程后,修改/res/layout/main.xml文件,布局文件中加入一个MapView控件,并设置刚获取的“地图密钥”。main.xml文件的完整代码如下1 2 6 910 17 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图q仅
31、在布局中添加MapView控件,还不能够直接在程序中调用这个控件,还需要将程序本身设置成MapActivity(com.google.android.maps.MapActivity) qMapActivity类负责处理显示Google地图所需的生命周期和后台服务管理qGoogleMapDemoActivity.java文件的完整代码为1package edu.hrbeu.GoogleMapDemo;23import com.google.android.maps.GeoPoint;4import com.google.android.maps.MapActivity;5import com.
32、google.android.maps.MapController;6import com.google.android.maps.MapView;78import android.os.Bundle;9哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图10 public class GoogleMapDemoActivity extends MapActivity 11 private MapView mapView;12 private MapController mapController;1314 Override15 public void onCre
33、ate(Bundle savedInstanceState) 16super.onCreate(savedInstanceState);17setContentView(R.layout.main);1819mapView = (MapView)findViewById(R.id.mapview);20mapController = mapView.getController();2122Double lng = 126.676530486 * 1E6;23Double lat = 45.7698895661 * 1E6;24GeoPoint point = new GeoPoint(lat.
34、intValue(), Value();2526mapController.setCenter(point);哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图27mapController.setZoom(11);28mapController.animateTo(point);2930mapView.setSatellite(false);31 3233 Override34 protected boolean isRouteDisplayed() 35/ TODO Auto-generated method stub36return fals
35、e;37 38 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图n第20行获取了MapController,用以在第26行设置MapView的“预订显示中点” n第27行设置缩放层级n第28行将MapView的实际显示中心移动到第26行设置的“预订显示中心” n第22行和第23行设置地理坐标点的经度为126.676530486 * 1E6、纬度为45.7698895661 * 1E6n但在第26行,没有直接使用这个坐标,而是将其转化为GeoPoint再使用 n第30行是设定MapView的地图显示模式是否为卫星模式,设置true则为卫星模式,设置false则为
36、普通模式 n第34行isRouteDisplayed()方法,是用来通知程序是否显示在Google地图中显示路径信息,默认为不显示哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图q由于获取Google地图是需要使用互联网的,所以在运行前还需要在AndroidManifest.xml文件中,添加允许访问互联网的许可qAndroidManifest.xml文件的完整代码如下1 2 67 8 910 13 1617 18 1920 21 22 23 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.2使用Google地图q程序运行时需要连接互联网,运行结果
37、如下图所示n地图模式卫星模式哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n1.首先安装GooglePlayservicesSDKqGoogleMapsAndroidAPI是作为这个SDK的一部分发行的。q这个安装是通过AndroidSDKManager进行,配置好之后的Eclipse上面应该有AndroidSDKManager的图标,一般的SDK版本安装和更新都在这里进行。q安装和更新Extras下的GooglePlayservices即可。哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n1.首先安装GooglePlayservicesSDK哈尔滨理工大学软件学院
38、9.2.2 使用Google地图(续)n2.获取API keyq获取Maps API key需要两样东西:应用的signing certificate和它的package name。q获取这个key之后,把它加在应用程序的AndroidManifest.xml文件里即可。q为应用获取一个key还是需要好几个步骤的,下面详细说明:q获取数字证书(digital certificate)信息q数字证书有Debug和Release两种,下面主要说Debug的。q要获取一个叫做SHA-1 fingerprint的东西,作为数字证书的一个简短代表。q这个指纹(fingerprint)是通过一个哈希算法得
39、到的字符串,为了得到你的证书的SHA-1 fingerprint,首先要找到你的debug keystore 文件,文件名叫debug.keystore。q首先要找到你的debug keystore 文件,文件名叫debug.keystore。q默认情况下它和虚拟机AVD存放在一起,win7下的路径是:C:Usersyour_user_name.android,也可以通过Eclipse中的Windows Prefs Android Build来查看这个路径。q然后,在cmd命令行里运行下列命令:qkeytool -list -v -keystore C:Usersyour_user_name.
40、androiddebug.keystore -alias androiddebugkey -storepass android -keypass android哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n2.获取APIkey哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n2.获取APIkey哈尔滨理工大学软件学院9.2.2 使用Google地图(续)nSHA1那一行就包含了证书的SHA-1fingerprint,是二十段用冒号割开的数字段,每段是两个十六进制的数。n在GoogleAPIsConsole上创建APIProjectn在GoogleAPIsConsol
41、e上创建项目,并且注册MapsAPI。n首先,去这个网址:https:/ 使用Google地图(续)哈尔滨理工大学软件学院9.2.2 使用Google地图(续)哈尔滨理工大学软件学院9.2.2 使用Google地图(续)哈尔滨理工大学软件学院9.2.2 使用Google地图(续)哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n关于关于Key的生成的生成:q生成Key的时候需要用到SHA-1指纹以及应用的包名。所以换了电脑或者重新创建项目之后都要重新申请Key。q另外这个Key也分Debug和Release两种,文中只讨论了Debug版本的Key。q可以参见原链接,得到更详细的解答
42、:https:/ 使用Google地图(续)n3.把把API Key加入应用程序加入应用程序n首先,建立虚拟设备AVD和应用程序。n建立好应用程序,注意包名应该和申请key时候的包名一致。n之后修改AndroidManifest.xml文件:哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n3.1.在元素中加入子标签q其中your_api_key置换成自己申请的APIKey。n3.2.加入一些许可信息q其中com.example.mapdemo换成自己的包名。哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n4. AndroidManifest.xml中的其他具体设置中
43、的其他具体设置q许可设置q作为的子元素,需要加入下列一些:qOpenGLESV2特性支持q同样也是作为的子元素。哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n5.加上地图加上地图q首先布局文件:哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n5.加上地图加上地图q然后在MainActivity.java:哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n需要把需要把Google Play services的类库加载进来:的类库加载进来:n第一步:第一步:q在Eclipse里面选择:File Import Android Existing Android
44、 Code Into Workspace然后点击Next.q之后Browse., 找到路径下的/extras/google/google_play_services/libproject/google-play-services_lib, 然后选择Finish。q(如果没有这个库请在Android SDK Manager更新,在底端的Extras里面更新Google Play services)。n第二步:第二步:q是添加对这个库的引用:q在自己的项目上右键,选Properties,左边选Android,然后在下面的Library里面Add刚才的google-play-services_lib
45、。哈尔滨理工大学软件学院9.2.2 使用Google地图(续)哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n解决虚拟机运行的问题解决虚拟机运行的问题q解决的方法就是在AVD上安装两个包(Google Play Store和Google Play services):qvending.apk和和gms.apk,(给一个网盘链接:,(给一个网盘链接:http:/ 16就行,不需要是就行,不需要是Google APIs。我选的是。我选的是Android4.1 API16.哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n解决虚拟机运行的问题解决虚拟机运行的问题q安装时把那
46、两个包放在当前目录,用命令行安装:哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n补充说明补充说明q因为MapFragment只在API12及之后的版本才有,所以对于之前的版本需要使用SupportLibrary来进行辅助。q如果minSdkVersion设置为12以前的,就需要使用Support Library。q需要更改的地方是:布局文件中,把MapFragment改为SupportMapFragment。qMainActivity继承自FragmentActivity而不是Activity。(需要importandroid.support.v4.app.FragmentAc
47、tivity;) 哈尔滨理工大学软件学院9.2.2 使用Google地图(续)n补充说明补充说明q因为MapFragment只在API12及之后的版本才有,所以对于之前的版本需要使用SupportLibrary来进行辅助。q如果minSdkVersion设置为12以前的,就需要使用Support Library。q需要更改的地方是:布局文件中,把MapFragment改为SupportMapFragment。qMainActivity继承自FragmentActivity而不是Activity。(需要importandroid.support.v4.app.FragmentActivity;)
48、 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.3 地图上使用覆盖层地图上使用覆盖层q在很多的地图应用中都需要在地图上显示信息或绘制图形 q通过在MapView上添加覆盖层,可以在指定的位置添加注解、绘制图像或处理鼠标事件等 qGoogle地图上可以加入多个覆盖层,所有覆盖层均都在地图图层之上,每个覆盖层均可以对用户的点击事件做出响应 q创建覆盖层继承Overlay类的子类,并通过重载draw()方法为指定位置添加注解,重载onTap()方法处理用户的点击操作 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.3 地图上使用覆盖层地图上使用覆盖层q下面的代码是创建Ove
49、rlay的最小代码集合1 public class TextOverlay extends Overlay 2 Override3 public void draw(Canvas canvas, MapView mapView, boolean shadow) 4 if (shadow = false)56 7 else8 9 super.draw(canvas, mapView, shadow);10 1112 Override13 public boolean onTap(GeoPoint p, MapView mapView) 14 return false;15 16 哈尔滨理工大学软
50、件学院9.2 Google地图应用n9.2.3 地图上使用覆盖层地图上使用覆盖层n第3行代码中draw()方法,shadow变量是用来区分绘制不同的图层qfalse表示在覆盖层上进行绘制 qtrue表示在隐藏层上进行绘制 n第14行代码是onTap()方法的返回值q返回false表示覆盖层不处理点击事件q返回true则表示已经处理了点击事件q在覆盖层绘制图形或文字需要使用“画布”(Canvas)来实现,绘制的位置是屏幕坐标,这就需要将地图上的物理坐标与屏幕坐标进行转换哈尔滨理工大学软件学院9.2 Google地图应用n9.2.3 地图上使用覆盖层地图上使用覆盖层qProjection类提供了物
51、理坐标和屏幕坐标的转换功能,可在经度和纬度表示的GeoPoint点和屏幕上Point点进行转换ntoPixels()方法将物理坐标转换为屏幕坐标nfromPixels()方法将屏幕坐标转换为物理坐标q具体使用方法可以参考下面的代码1Projection projection = mapView.getProjection();23projection.toPixels(geoPoint, point);4projection.fromPixels(point.x, point.y);哈尔滨理工大学软件学院9.2 Google地图应用n 9.2.3 地图上使用覆盖层地图上使用覆盖层q下面的内容以
52、MapOverlayDemo示例,说明如何在Google地图上添加覆盖层,并在预订的物理坐标上显示提示信息q右图是MapOverlayDemo示例的运行结果 哈尔滨理工大学软件学院9.2 Google地图应用n9.2.3 地图上使用覆盖层地图上使用覆盖层qTextOverlay类是MapOverlayDemo示例的覆盖层,主要重载了draw()方法,在指定的物理坐标上绘制了标记点和提示文字qTextOverlay.java文件的核心代码如下1 public class TextOverlay extends Overlay 2 private final int mRadius = 5;34
53、Override5 public void draw(Canvas canvas, MapView mapView, boolean shadow) 6Projection projection = mapView.getProjection();78if (shadow = false)9 Double lng = 126.676530486 * 1E6;10 Double lat = 45.7698895661 * 1E6;哈尔滨理工大学软件学院9.2 Google地图应用n9.2.3 地图上使用覆盖层地图上使用覆盖层11 GeoPoint geoPoint = new GeoPoint(Value(), Value();1213 Point point = new Point();14 projection.toPixels(geoPoint, point);1516 RectF oval = new RectF(point.x - mRadius, point.y - mRadius, point.x + mRadius, point.y + mRadius);1718 Paint paint = new Paint()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 16610-21:2025 EN Geometrical product specifications (GPS) - Filtration - Part 21: Linear profile filters: Gaussian filters
- 2025年度楼顶广告牌租赁期广告效果评估与优化协议4篇
- 二零二五版集装箱销售与全球物流配送、保险、维修保养及服务合同范本3篇
- 二零二五年度钢材采购合同绿色物流与配送服务协议3篇
- 2025年度零食店收银员与顾客社交平台互动合同4篇
- 2025年度智能车牌租赁服务合同范本8篇
- 2025年高校与地方政府教育资源共享合作协议3篇
- 2025年度美容院美容院美容项目合作经营合同4篇
- 2025年度个人户外运动保险合同样本2篇
- 二零二五版民营医院药剂科药剂师劳动合同4篇
- 数学-山东省2025年1月济南市高三期末学习质量检测济南期末试题和答案
- 中储粮黑龙江分公司社招2025年学习资料
- 湖南省长沙市2024-2025学年高一数学上学期期末考试试卷
- 船舶行业维修保养合同
- 2024年3月江苏省考公务员面试题(B类)及参考答案
- 医院科室考勤表
- 春节期间化工企业安全生产注意安全生产
- 数字的秘密生活:最有趣的50个数学故事
- 移动商务内容运营(吴洪贵)任务一 移动商务内容运营关键要素分解
- 基于ADAMS的汽车悬架系统建模与优化
- 当前中国个人极端暴力犯罪个案研究
评论
0/150
提交评论