android 手机地图
Android google map的應(yīng)用有:
1.我的位置:在地圖上顯示你的當(dāng)前位置(通常在1000米范圍內(nèi))。即使沒有GPS,你也可以確定自己的位置。Google手機地圖還支持內(nèi)在GPS,也可以鏈接到藍(lán)牙GPS傳感器,以便更加準(zhǔn)確定位用戶的位置?!拔业奈恢谩钡墓δ芡ㄟ^識別你附近無線發(fā)射塔的信息廣播而確定你的位置的。
2.地圖和衛(wèi)星視圖:Google手機地圖可以向你提供所查地區(qū)的地圖和衛(wèi)星視圖,器界面的使用感覺與你在臺式機上相同??裳刂渲幸粋€方向滾動,以查看地圖上更多內(nèi)容,或可以使用快捷鍵進(jìn)行縮放。
3.商戶列表:借助Google的本地搜索,可以按名稱(如“星巴克”)或類型(如“咖啡”——搜索商家,查看商店的營業(yè)時間和評分,然后,只需點擊一下即可撥通感興趣的商家的電話。有了“我的位置”功能,甚至都不用輸入當(dāng)前位置即可方便的找到附近的商家。
4.駕車路線:可以很方便的獲得駕車路線,其中會很清楚地標(biāo)識每次轉(zhuǎn)彎。有了“我的位置”功能,甚至都不需要輸入出發(fā)點。
5.公交換乘:查看公交和地鐵線路,確定轉(zhuǎn)車路線,制定你在全球80個城市的出行計劃。
6.路況信息:Google地圖上的公路會根據(jù)實時的路況數(shù)據(jù),以綠色,黃色或紅色顯示。
7.收藏夾:為你常去的地方加上書簽,以便能在地圖上非常方便地返回到這些地方。
Android Gps 定位功能:
全球定位系統(tǒng)(Global Positioning System,GPS),重要的功能類:
LocationManager:本類提供訪問定位服務(wù)的功能,也提供獲取最佳定位提供者的功能。另外,臨近警報功能也可以借助該類來實現(xiàn)。
LocationProvide:該類是定位提供者的抽象類。定位提供者具備周期性報告設(shè)備地理位置的功能。LocationListener:提供地位信息發(fā)生改變時的回調(diào)功能。必須事先在定位管理器中注冊監(jiān)聽器對象。
Criteria:該類使得應(yīng)用能夠通過在LocationProvider中設(shè)置的屬性來選擇合適的定位提供者。
Geocoder:用處理地理編碼和反向地理編碼的類。地理編碼是指將地址或者其他描述轉(zhuǎn)變?yōu)榻?jīng)度和緯度,反向地理編碼是將經(jīng)度和緯度轉(zhuǎn)變?yōu)榈刂坊蛎枋稣Z言,其中包含了兩個構(gòu)造 函數(shù),需要傳入經(jīng)度和緯度的坐標(biāo)。getFromLocation方法可以得到一組關(guān)于地址的數(shù)組。
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
注冊:locationManager.requestLocationUpdate(LocationManager.GPS_PROVIDER,1000,0,locationManager);其中第一個參數(shù)是設(shè)置服務(wù)提供者,可以是network也可以是gps,第二個參數(shù)是定時單位為毫秒,最后一個參數(shù)locationManager,用于監(jiān)聽位置變化和gps的變化:
onLocationChanged(Location location):當(dāng)坐標(biāo)改變時觸發(fā)次函數(shù),如果Provider傳進(jìn)相同的坐標(biāo),它就不會觸發(fā),獲取經(jīng)緯度就從這里獲取。
onProviderDisabled(String provider):Provider GPS被關(guān)閉。
onProviderEnabled(Sting provider):Provider GPS被打開。
onStatusChanged(String provider, int status, Bundle extras):Provider的狀態(tài)在可用、暫時不可用和無服務(wù)三個狀態(tài)直接切換時觸發(fā)此函數(shù)。
Android Google Map步驟:一、申請google Maps API key要有一個Google賬號或Gmail的賬號。
1.找到你的debug.keystore文件在Eclipse工具下,選擇windows-->Preference-->Android-->Build,debug keystore的值便是debug.keystore的路徑了。
2.首先cmd命令行進(jìn)入執(zhí)行命令:Cd C:\Documents andSettings\Administrator\.androidkeytool -list -keystore debug.keystore,默認(rèn)的密碼是android,輸入回車可取得MD5值。
3.申請Android Map 的API Key.打開火狐瀏覽器,輸入網(wǎng)址:http://code.google.com/android/maps-api-signup.html,填入你的認(rèn)證指紋(MD5)即可獲得apiKey了,結(jié)果顯示如下:
二.Google Map API的使用應(yīng)用com.google.android.map包,重要的幾個類有:
1.MapActivity:這個類是用于顯示Google Map的Activity類,它需要連接底層網(wǎng)絡(luò)。MapActivity是一個抽象類,任何想要顯示MapView的activity都需要派生自MapActivity,并且在其派生類的onCreate()中,都要創(chuàng)建一個MapView實例。
2.MapView:MapView是用于顯示地圖的View組件。它派生自android.view.ViewGroup。它必須和MapActivity配合使用,而且只能被MapActivity創(chuàng)建,這是因為MapView需要通過后臺的線程來連接網(wǎng)絡(luò)或者文件系統(tǒng),而這些線程需要有MapActivity來管理。
3.MapController:MapController用于控制地圖的移動、縮放等。
4.OverLay:這是一個可顯示于地圖之上的可繪制的對象。
5.GeoPoint:這是一個包含經(jīng)緯度位置的對象。
三.實例開發(fā)
1.創(chuàng)建工程,注意SDK旋轉(zhuǎn)為"Goolge APIs”
2.修改AndroidManifest.xml文件在application節(jié)點中添加<uses-libraryandroid:name="com.google.android.maps" />
添加權(quán)限<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" />可能還需要添加其他權(quán)限。例如:
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.創(chuàng)建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> 當(dāng)然,可以在程序中通過如下代碼來創(chuàng)建MapView:MapView map = new MapView( this,"(android maps api key)");
4.實現(xiàn)MapActivitymMapView.setTraffic(true); //設(shè)置為交通模式
mMapView.setSatellite(true); //設(shè)置為衛(wèi)星模式
mMapView.setStreetView(true); //設(shè)置為街景模式通過
setBuiltZoomControls方法設(shè)置地圖是否支持縮放。
5.MapController的使用如果需要設(shè)置地圖顯示的地點以及放大倍數(shù)等,就需要使用MapController來控制地圖??梢酝ㄟ^如下代碼獲得MapController對象:mMapController =mMapView.getController(); 要定位地點,需要構(gòu)造一個GeoPoint來表示地點的經(jīng)緯度,然后使用animateTo方法將地圖定位到指定的GeoPoint上,代碼如下:mGeoPoint = new GeoPoint((int) (31.203713* 1E6), (int) (121.553782 * 1E6));
mMapController.animateTo(mGeoPoint);
6.Ovelay的使用如果需要在地圖上標(biāo)注一些圖標(biāo)文字等信息,就需要使用Overlay。這里我們首先要將地圖上的經(jīng)度和緯度轉(zhuǎn)換成屏幕上的實際坐標(biāo),才能將信息繪制上去。Map API中提供了Projection.toPixels(GeoPoint in,GeoPoint out)方法,可以將經(jīng)度和緯度轉(zhuǎn)換成屏幕上的坐標(biāo)。首先需要實現(xiàn)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(); //將地理坐標(biāo)轉(zhuǎn)化為屏幕坐標(biāo) proj.toPixels(gp, p); canvas.drawBitmap(bmpArrow, p.x - bmpArrow.getWidth() / 2, p.y - bmpArrow.getHeight(), null); } }} LocationListener listener = new LocationListener(){ @Override //Provider的轉(zhuǎn)態(tài)在可用、暫時不可用和無服務(wù)三個狀態(tài)直接切換時觸發(fā)此函數(shù) public voidonStatusChanged(String provider, int status, Bundle extras) { } @Override //Provider被enable時觸發(fā)此函數(shù),比如GPS被打開 public voidonProviderEnabled(String provider) { } @Override //Provider被disable時觸發(fā)此函數(shù),比如GPS被關(guān)閉 public voidonProviderDisabled(String provider) { } @Override //當(dāng)坐標(biāo)改變時觸發(fā)此函數(shù),如果Provider傳進(jìn)相同的坐標(biāo),它就不會被觸發(fā) 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運行程序
總結(jié)
以上是生活随笔為你收集整理的android 手机地图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五课 路由之初识路由
- 下一篇: 前端学习(3132):react-hel