`
wsql
  • 浏览: 11780427 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

android 手机地图

 
阅读更多

Android google map的应用有:

1.我的位置:在地图上显示你的当前位置(通常在1000米范围内)。即使没有GPS,你也可以确定自己的位置。Google手机地图还支持内在GPS,也可以链接到蓝牙GPS传感器,以便更加准确定位用户的位置。“我的位置”的功能通过识别你附近无线发射塔的信息广播而确定你的位置的。

2.地图和卫星视图:Google手机地图可以向你提供所查地区的地图和卫星视图,器界面的使用感觉与你在台式机上相同。可沿着其中一个方向滚动,以查看地图上更多内容,或可以使用快捷键进行缩放。

3.商户列表:借助Google的本地搜索,可以按名称(如“星巴克”)或类型(如“咖啡”——搜索商家,查看商店的营业时间和评分,然后,只需点击一下即可拨通感兴趣的商家的电话。有了“我的位置”功能,甚至都不用输入当前位置即可方便的找到附近的商家。

4.驾车路线:可以很方便的获得驾车路线,其中会很清楚地标识每次转弯。有了“我的位置”功能,甚至都不需要输入出发点。

5.公交换乘:查看公交和地铁线路,确定转车路线,制定你在全球80个城市的出行计划。

6.路况信息:Google地图上的公路会根据实时的路况数据,以绿色,黄色或红色显示。

7.收藏夹:为你常去的地方加上书签,以便能在地图上非常方便地返回到这些地方。
Android Gps 定位功能:

全球定位系统(Global Positioning System,GPS),重要的功能类:

LocationManager:本类提供访问定位服务的功能,也提供获取最佳定位提供者的功能。另外,临近警报功能也可以借助该类来实现。

LocationProvide:该类是定位提供者的抽象类。定位提供者具备周期性报告设备地理位置的功能。LocationListener:提供地位信息发生改变时的回调功能。必须事先在定位管理器中注册监听器对象。

Criteria:该类使得应用能够通过在LocationProvider中设置的属性来选择合适的定位提供者。

Geocoder:用处理地理编码和反向地理编码的类。地理编码是指将地址或者其他描述转变为经度和纬度,反向地理编码是将经度和纬度转变为地址或描述语言,其中包含了两个构造 函数,需要传入经度和纬度的坐标。getFromLocation方法可以得到一组关于地址的数组。

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

注册:locationManager.requestLocationUpdate(LocationManager.GPS_PROVIDER,1000,0,locationManager);其中第一个参数是设置服务提供者,可以是network也可以是gps,第二个参数是定时单位为毫秒,最后一个参数locationManager,用于监听位置变化和gps的变化:

onLocationChanged(Location location):当坐标改变时触发次函数,如果Provider传进相同的坐标,它就不会触发,获取经纬度就从这里获取。

onProviderDisabled(String provider):Provider GPS被关闭。

onProviderEnabled(Sting provider):Provider GPS被打开。

onStatusChanged(String provider, int status, Bundle extras):Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数。

Android Google Map步骤:一、申请google Maps API key要有一个Google账号或Gmail的账号。

1.找到你的debug.keystore文件在Eclipse工具下,选择windows-->Preference-->Android-->Build,debug keystore的值便是debug.keystore的路径了。

2.首先cmd命令行进入执行命令:Cd C:\Documents andSettings\Administrator\.androidkeytool -list -keystore debug.keystore,默认的密码是android,输入回车可取得MD5值。


3.申请Android Map 的API Key.打开火狐浏览器,输入网址:http://code.google.com/android/maps-api-signup.html,填入你的认证指纹(MD5)即可获得apiKey了,结果显示如下:

二.Google Map API的使用应用com.google.android.map包,重要的几个类有:

1.MapActivity:这个类是用于显示Google Map的Activity类,它需要连接底层网络。MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity,并且在其派生类的onCreate()中,都要创建一个MapView实例。

2.MapView:MapView是用于显示地图的View组件。它派生自android.view.ViewGroup。它必须和MapActivity配合使用,而且只能被MapActivity创建,这是因为MapView需要通过后台的线程来连接网络或者文件系统,而这些线程需要有MapActivity来管理。

3.MapController:MapController用于控制地图的移动、缩放等。

4.OverLay:这是一个可显示于地图之上的可绘制的对象。

5.GeoPoint:这是一个包含经纬度位置的对象。

三.实例开发

1.创建工程,注意SDK旋转为"Goolge APIs”

2.修改AndroidManifest.xml文件在application节点中添加<uses-libraryandroid:name="com.google.android.maps" />

添加权限<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" />可能还需要添加其他权限。例如:

AndroidManifest.xml <?xml version="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.feige"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
<activityandroid:name=".FeigeMap"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permissionandroid:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-sdk android:minSdkVersion="7" />
</manifest>

3.创建MapViewmain.xml <?xml version="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/mv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="自己上面申请的密钥"/>
</RelativeLayout> 当然,可以在程序中通过如下代码来创建MapView:MapView map = new MapView( this,"(android maps api key)");

4.实现MapActivitymMapView.setTraffic(true); //设置为交通模式

mMapView.setSatellite(true); //设置为卫星模式

mMapView.setStreetView(true); //设置为街景模式通过

setBuiltZoomControls方法设置地图是否支持缩放。

5.MapController的使用如果需要设置地图显示的地点以及放大倍数等,就需要使用MapController来控制地图。可以通过如下代码获得MapController对象:mMapController =mMapView.getController(); 要定位地点,需要构造一个GeoPoint来表示地点的经纬度,然后使用animateTo方法将地图定位到指定的GeoPoint上,代码如下:mGeoPoint = new GeoPoint((int) (31.203713* 1E6), (int) (121.553782 * 1E6));
mMapController.animateTo(mGeoPoint);

6.Ovelay的使用如果需要在地图上标注一些图标文字等信息,就需要使用Overlay。这里我们首先要将地图上的经度和纬度转换成屏幕上的实际坐标,才能将信息绘制上去。Map API中提供了Projection.toPixels(GeoPoint in,GeoPoint out)方法,可以将经度和纬度转换成屏幕上的坐标。首先需要实现OverLay中的draw方法才能在地图上绘制信息,代码如下:

public class ArrowOverLay extends Overlay{

Bitmap bmpArrow; GeoPoint gp; publicArrowOverLay(Bitmap bmpArrow, GeoPoint gp) { super(); this.bmpArrow =bmpArrow; this.gp = gp; } @Override public void draw(Canvascanvas, MapView mapView, boolean shadow) { // TODOAuto-generated method stub super.draw(canvas,mapView, shadow); if (!shadow) { Projection proj = mapView.getProjection(); Point p = newPoint(); //将地理坐标转化为屏幕坐标 proj.toPixels(gp, p); canvas.drawBitmap(bmpArrow, p.x - bmpArrow.getWidth() / 2, p.y - bmpArrow.getHeight(), null); } }} LocationListener listener = new LocationListener(){ @Override //Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数 public voidonStatusChanged(String provider, int status, Bundle extras) { } @Override //Provider被enable时触发此函数,比如GPS被打开 public voidonProviderEnabled(String provider) { } @Override //Provider被disable时触发此函数,比如GPS被关闭 public voidonProviderDisabled(String provider) { } @Override //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 public voidonLocationChanged(Location location) { openGps(); try{ update(location); } catch(IOException e) { // TODOAuto-generated catch block e.printStackTrace(); } } }; public voidupdate(Location lt) throws IOException { if (lt != null) { try{ doublelatitude = lt.getLatitude(); doublelongitude = lt.getLongitude(); updateMapView(latitude, longitude) } catch(Exception e) { } } } //更新地图 public voidupdateMapView(doubledLat, doubledLong) { GeoPoint gp = newGeoPoint((int)(dLat* 1E6), (int)(dLong* 1E6)); //显示缩放按钮 mv.displayZoomControls(true); //将地图移动到指定的地理位置 controller.animateTo(gp); List<Overlay> li = mv.getOverlays(); li.add(new ArrowOverLay(bmpArrow, gp)); }

7运行程序




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics