GoogleMap和GPS应用.ppt

上传人:小飞机 文档编号:5432275 上传时间:2023-07-06 格式:PPT 页数:60 大小:1.23MB
返回 下载 相关 举报
GoogleMap和GPS应用.ppt_第1页
第1页 / 共60页
GoogleMap和GPS应用.ppt_第2页
第2页 / 共60页
GoogleMap和GPS应用.ppt_第3页
第3页 / 共60页
GoogleMap和GPS应用.ppt_第4页
第4页 / 共60页
GoogleMap和GPS应用.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《GoogleMap和GPS应用.ppt》由会员分享,可在线阅读,更多相关《GoogleMap和GPS应用.ppt(60页珍藏版)》请在三一办公上搜索。

1、Google Map和GPS应用,主讲:关东升,Google Map介绍,Google地图(英语:Google Maps)是 Google 公司提供的电子地图服务,包括局部详细的卫星照片。能提供三种视图:一是矢量地图(传统地图),可提供政区和交通以及商业信息;二是不同分辨率的卫星照片(俯视图,跟 Google Earth 上的卫星照片基本一样);三是后来加上的地形视图,可以用以显示地形和等高线。它的姊妹产品是Google Earth,一个桌面应用程序,在三维模型上提供提供街景和更多的卫星视图及GPS定位(付费版本)的功能,但没有前述的矢量视图和地形视图功能。,Google Map介绍,Goog

2、le提供地图,有了地图我们的很多应用软件都更加丰富。我们可以搜索我们附近饭店、影院和交通路线等等。,获取 Google Map API Key,在模拟器中正常使用GoogleMap之前需要提供一个 APIKey(密钥),否则在MapView中只能看到网格,没有任何地图信息。步骤:找到keystore证书文件生成MD5认证指纹 生成Google Map API Key,keystore,keystore是一个密码保护的文件,用来存储密钥和证书。Eclipse提供了一个临时debug.keystore文件。而实际发布要自己生成。,生成MD5认证指纹,启动Command Prompt.使用Keyto

3、ol命令(keytool.exe存放在Java/bin目录下)。完整的命令行:C:keytool-list-keystore(回车输入密码:android),生成Google Map API Key,进入这是Google Map API Key在线生成网站。,输入自己的MD5认证指纹,确保具有Google账户并且登录!,Copy Google Map API Key,android:layout_width=fill_parent android:layout_height=fill_parent android:enabled=true android:clickable=true andr

4、oid:apiKey=0obloo9wXdp1XPk8Y8SpXDxDMMZwYmYyOo8OZ0Q/,创建Google Map程序,选择Google API继承MapActivity在AndroidManifest.xml中增加internet访问权限在AndroidManifest.xml中增加Google地图函数库,选择Google API,Google Map API是Google API一部分,它不属于Android,是Android的附件(add-ons)。我们需要选择,Google API,继承MapActivity,我们需要继承MapActivity 而不是Activity,p

5、ublic class MapDemo1 extends MapActivity Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);Overrideprotected boolean isRouteDisplayed()return false;,AndroidManifest.xml,在XML文件中我们修改访问Internet权限和Google API 用户函数库声明。,internet权限,为我们的应用

6、程序提供可以访问internet权限。标签要放到之外。,保持网络连通,Google API 用户函数库声明,因为Google地图函数库是选择性的API,所以在使用它之前,必须在标签中,需额外添加一条(函数库),表示程序会使用到Google地图的函数库。,运行结果,控制地图,地图的控制主要是通过MapController实现,可以实现如下控制:设定地图中心点设定地图的缩放尺寸设定地图的显示模式通过MapView对象可以获得MapController,如下代码:MapController mc=mapView.getController(),设定地图中心点,设定地图中心点GeoPoint类结合Ma

7、pController的animateTo方法。,private MapView mapView;private MapController mc;Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mapView=(MapView)findViewById(R.id.map);mc=mapView.getController();GeoPoint gp=new GeoPoint(int)(39.904667

8、*1000000),(int)(116.408198*1000000);/地理坐标 mc.animateTo(gp);,以北京为中心的运行结果,如何知道北京的坐标?,我们可以通过,小结,北京的地平纬度:39.904667地平经度:116.408198在构造GeoPoint对象时候需要将经纬度乘 1000000new GeoPoint(int)(39.904667*1000000),(int)(116.408198*1000000);也可以使用科学计数法1E6new GeoPoint(int)(39.904667*1E6),(int)(116.408198*1E6);animateTo指定坐标的

9、中心点。,设定地图的缩放尺寸,在上面的例子中我们能看到整个亚洲,但是看不到北京,我们要通过setZoom设定地图的缩放尺寸,它的取值访问时1-21,1是全球地图,21是街道地图。,Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mapView=(MapView)findViewById(R.id.map);mc=mapView.getController();GeoPoint gp=new GeoPoin

10、t(int)(39.904667*1E6),(int)(116.408198*1000000);/地理坐标 mc.animateTo(gp);mc.setZoom(12);,设置setZoom(12)运行结果,增加缩放按钮,在上面的案例中无法控制地图的缩放,我们需要添加缩放按钮。SDK1.0后MapView增加了setBuiltInZoomControls实现是否显示这个按钮组。mapView.setBuiltInZoomControls(true);,设定地图的显示模式,Google Map有三种显示模式:普通模式、卫星模式、和街道模式。分别通过MapView的如下方式实现:普通模式setT

11、raffic(true)卫星模式setSatellite(true)街道模式setStreetView(true),卫星模式和普通模式,卫星-普通模式切换实例,增加菜单,public class MapModelSample extends MapActivity/菜单项final private int menuMode1=Menu.FIRST;final private int menuMode2=Menu.FIRST+1;private MapView mapView;private MapController mc;OverrideOverridepublic boolean onCr

12、eateOptionsMenu(Menu menu)/建立菜单menu.add(0,menuMode1,0,地图模式);menu.add(0,menuMode2,1,卫星模式);return super.onCreateOptionsMenu(menu);,增加菜单项事件,Overridepublic boolean onOptionsItemSelected(MenuItem item)switch(item.getItemId()case MENU_MODE1:mapView.setTraffic(true);mapView.setSatellite(false);mapView.setS

13、treetView(false);break;case MENU_MODE2:mapView.setSatellite(true);mapView.setTraffic(false);mapView.setStreetView(false);return super.onOptionsItemSelected(item);,Google Map 图层,有的时候我们需要在地图上添加一些标志来提供一些信息,如在一个旅游区附件标志出来旅游点的位置。这样我们需要使用图层(Layers)在Android Google Map 图层类是Overlay。我们需要根据自己的需要继承Overlay并重写其方法。

14、,图层实例,在北京市标志处四个旅游景点。中关村中南海天坛玉渊潭公园,ItemizedOverlay,ItemizedOverlay是Google Map提供的Overlay子类。它可以提供一组坐标点的图层。该类又是一个集合内部容纳的是OverlayItem实例。OverlayItem是代表着各个图层的坐标点。我们要编写继承ItemizedOverlay子类。,自定义ItemizedOverlay,private class SitesOverlay extends ItemizedOverlay private List items=new ArrayList();private Drawab

15、le marker=null;public SitesOverlay(Drawable marker)super(marker);this.marker=marker;items.add(new OverlayItem(new GeoPoint(int)(39.882079*1E6),(int)(116.411133*1E6),天坛,这里是天坛皇上祭祀的地方。);.populate();.,Overrideprotected OverlayItem createItem(int i)return(items.get(i);Overridepublic void draw(Canvas canv

16、as,MapView mapView,boolean shadow)super.draw(canvas,mapView,shadow);boundCenterBottom(marker);Overrideprotected boolean onTap(int i)Toast.makeText(MapDemoLayer.this,items.get(i).getSnippet(),Toast.LENGTH_LONG).show();return(true);Overridepublic int size()return(items.size();,小结,onTap方法是在屏幕上触摸某个标志是触发

17、的事件。size方法返回图层中地标的个数。createItem方法返回图层地标对象。,MapActivity的onCreate方法,public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);map=(MapView)findViewById(R.id.map);map.getController().setZoom(12);map.setBuiltInZoomControls(true);GeoPoint gp=new GeoPo

18、int(int)(39.904667*1E6),(int)(116.408198*1E6);/地理坐标map.getController().animateTo(gp);Drawable marker=getResources().getDrawable(R.drawable.marker);map.getOverlays().add(new SitesOverlay(marker);,运行结果,Android定位,Android支持两种定位方式:GPS定位基站三角定位,GPS介绍,全球定位系统(GPS)是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。其主要目的是为陆、海

19、、空三大领域提供实时、全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星己布设完成。GPS定位准确,覆盖面广阔,但是不能被遮挡。例如:在建筑物里面。GPS开启后比较费电。,基站三角定位,由于GPS不能在遮挡情况下定位,而且开启GPS后设备比较费电。我们可以使用移动基站定位。城市内的各个移动基站就类似于一个个定位卫星,基站的位置是相对固定的,因此完全可以用作定位之用。通过三个基站可以定位。但是相对GPS定位三角定位不是很精确的。,定位服务权限设

20、定,为了能够开启这两个服务,需要在AndroidManifest.xml中增加使用权限:android.permission.ACCESS_COARSE_LOCATION(基站定位)android.permission.ACCESS_FINE_LOCATION(GPS定位),AndroidManifest.xml,.,LocationManager,Android通过LocationManager类实现提供定位服务。获得定位服务对象:,LocationManager locationManager;Overridepublic void onCreate(Bundle savedInstanc

21、eState)super.onCreate(savedInstanceState);setContentView(R.layout.main);String location_context=Context.LOCATION_SERVICE;locationManager=(LocationManager)getSystemService(location_context);.,LocationManager常用方法,getProviders方法可以获得定位方式。List providers=getProviders(true);获得定位方式列表,即gps 和network。requestLo

22、cationUpdates注册定位方式。getLastKnownLocation获得最后的定位地点。,代码实例,private void updateStat()TextView tv=(TextView)findViewById(R.id.myTextView);StringBuilder sb=new StringBuilder(定位方式:);List providers=locationManager.getProviders(true);for(String provider:providers)locationManager.requestLocationUpdates(provid

23、er,1000,0,new LocationListener()public void onLocationChanged(Location location)public void onProviderDisabled(String provider)public void onProviderEnabled(String provider)public void onStatusChanged(String provider,int status,Bundle extras);sb.append(n).append(provider).append(:);Location location

24、=locationManager.getLastKnownLocation(provider);if(location!=null)double lat=location.getLatitude();double lng=location.getLongitude();sb.append(lat).append(,).append(lng);else sb.append(No Location);tv.setText(sb);,小结,requestLocationUpdates(provider,1000,0,new LocationListener()provider目前是即gps 和net

25、work。定位消息发送条件(1000最小间隔时间,0是最小移动距离)。LocationListener是定位监听,方法有:,public void onLocationChanged(Location location)当位置发送变化时候调用public void onProviderDisabled(String provider)定位方式被禁用时调用public void onProviderEnabled(String provider)定位方式被启动时调用public void onStatusChanged(String provider,int status,Bundle extr

26、as)定位方式的状态发生改变的时候调用。,小结,Location location=locationManager.getLastKnownLocation(provider);(provider定位方式gps和network)这可是使我们获得最后的位置,返回Location对象,这个对象封装了经纬度坐标。获得坐标方法:double lat=location.getLatitude();double lng=location.getLongitude();,通过模拟器改变坐标,Emulator Control可以实现,运行结果,GSP与Map结合MyLocationOverlay,MyLoca

27、tionOverlay是Android内置提供的图层。它有两个应用场景:它可以显示你在地图的位置,这个位置基于GPS定位或移动基站地位。显示你的坐标,基于罗盘传感器。,MyLocationOverlay,MyLocationOverlay是Android内置提供的图层。它有两个应用场景:它可以显示你在地图的位置,这个位置基于GPS定位或移动基站地位。显示你的坐标,基于罗盘传感器。,使用LocationOverlay,我们需要实例化LocationOverlay添加到MapView中。,private MapView map=null;private MyLocationOverlay me=n

28、ull;.me=new MyLocationOverlay(this,map);map.getOverlays().add(me);,启动罗盘仪,Overridepublic void onResume()super.onResume();me.enableCompass();Overridepublic void onPause()super.onPause();me.disableCompass();,public class MapDemoMyLocationOverlay extends MapActivity private MapView map=null;private MyLo

29、cationOverlay me=null;Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);map=(MapView)findViewById(R.id.map);map.getController().setZoom(12);map.setBuiltInZoomControls(true);me=new MyLocationOverlay(this,map);me.enableMyLocation();map.getOverlays().add(me);Overrideprotected boolean isRouteDisplayed()return(false);,运行结果,LocationOverlay会在地图上标志出一个闪烁的圆点。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号