2013-07-03html
Google Map 提供三種視圖:android
1. 傳統的矢量地圖,提供行政區域、交通以及商業信息等。web
2. 不一樣分辨率的衛星照片,與Google Earth 基本同樣。canvas
3. 地形地圖,能夠顯示地形和等高線。api
Google Map的姐妹產品Google Earth是一個桌面應用程序,在三維模型上提升街景、更多的衛星視圖以及GPS定位的功能。網絡
基於Google Earth 和 Google Map 的遊戲舉例:佈局
在全球任何地方甚至海底模擬開飛機或者潛水艇,來漫遊整個世界,詳見:http://www.sea-seek.com/ui
在地球上任何地方開着本身喜歡的奔跑車,在本身周圍以及熟悉的地方模擬駕駛,詳見:http://geoquake.jp/en/webgame/DrivingSimulatorGM/this
手機上如何應用Google Mapgoogle
1. 個人位置
經過識別你附近無線發射塔的信息廣播肯定你的位置,在地圖上顯示出來。一般在1000米範圍以內。即便沒有GPS,也能夠肯定位置。支持內置GPS,能夠連接到藍牙GPS傳感器。
2. 地圖和衛星視圖
提供所查看地區的地圖和衛星視圖,其界面使用感受與在臺式機上相同。
3. 商戶列表
不須要輸入當前位置便可找到附近的商戶。
4. 駕車路線
不須要輸入出發點,就可方便地得到駕車路線,其中會清楚地標明每次轉彎。
5. 公交換乘
查看公交和地鐵路線,肯定轉車路線。
6. 路況信息
Google Map中的公路會根據實時路況數據,以綠色、黃色或紅色顯示。
7. 收藏夾
爲你常去的地方加上書籤,以便能在地圖上很是方便地返回到這些地方。
使用 Android Maps API 和 Android Location API 就能夠實現這些功能。
準備工做
1. 找到/下載Map擴展庫:com.google.android.maps
<ANDROID_SDK_ROOT>/add-ons/google_apis-3/libs/
2. 申請Android Map API Key
準備Google帳號。Google帳號是通用的,Gmail的帳號就能夠。
當一個APP發佈時必需要證實書。證實書就是MD5。
debug版的證實書:debug.keystore
a. 找到debug.keystore文件
Eclipse中,Windows->Preference->Android->Build ,其中Default debug keystore的值即是debug.keystore的路徑。
b. 取得debug.keystore的MD5值
在命令提示符下進入debug.keystore文件所在路徑,執行命令:keytool –list –keystore debug.keystore ,輸入keystore密碼:android ,便可取得MD5值。
c. 申請Android Map的API Key
http://code.google.com/intl/zh-CN/android/maps-api-signup.html
d. 記下申請的Android Map API Key值
3. 建立基於Google APIs的AVD
Eclipse中,AVD管理,Create AVD,Target處選擇Google APIs-1.5(或其餘版本)
4. 建立基於Google APIs的Android 工程
在建立Android工程時,Target處選擇Google APIs
在AndroidManifest.xml文件中添加權限
<uses-library android:name=」com.google.android.maps」/>
Google Map API 的使用
Android 中定義了一個名爲com.google.android.maps的包,其中包含了一系列用於在Google Map上顯示、控制和層疊信息的功能類。
MapActivity, 用於顯示Google Map的Activity類,須要鏈接底層網絡。必須被擴展並在子類onCreate()方法中建立一個MapView實例。
MapView, 用於顯示地圖的View組件。派生自android.view.ViewGroup,只能在MapActivity中建立。MapView須要經過後臺線程來鏈接網絡或文件系統,這些線程由MapActivity管理。
MapController, 用於控制地圖的移動、縮放等。
Overlay, 可顯示於地圖之上的可繪製的對象。
GeoPoint, 包含經緯度位置的對象。
建立MapView的兩種方法:
a. 在xml佈局文件中建立MapView
<com.google.android.maps.MapView
android:id=」@+id/mapview01」
android:layout_width=」fill_parent」
android:layout_height=」fill_parent」
android:apiKey=」xxx」 />
其中apiKey在以前已經申請。
b. 在代碼中建立MapView
MapView map = new MapView(this, apiKey);
實現MapActivity
在MapActivity中,方法isRoutedDisplayed必需要被重寫
MapView提供三種模式分別是
mapView.setTraffic(true); // 設置爲交通模式
mapView.setSatellite(true); // 設置爲衛星模式
mapView.setStreetView(true); // 設置爲街景模式
使用MapController在地圖定位到某地以及設置放大的倍數
mapController = mapView.getController();
要定位地點,須要構建一個GeoPoint來表示地點的經度和緯度,而後使用animateTo將地圖定位到指定的GeoPoint上
// 在地圖上定位到成都
geoPoint = new GeoPoint((int)(30.659259*1000000), (int)(104.065762*1000000));
mapController.animateTo(geoPoint);
使用Overlay在地圖上標註一些圖標文字等信息
首先,將地圖上的經度和緯度轉換爲屏幕上的座標
Projection.toPixels(GeoPoint in, Point out);
其次,實現Overlay的draw方法
class LocationOverlay extends Overlay {
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
// 繪製圖標文字等信息
super.draw(canvas, mapView, shadow);
Paint paint = new Paint();
Point point = new Point();
mapView.getProjection().toPixels(geoPoint, point);
paint.setStrokeWidth(1);
paint.setARGB(255, 255, 0, 0);
paint.setStyle(Paint.Style.STROKE);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.home);
canvas.drawBitmap(bitmap, point.x, point.y, point);
canvas.drawText(「天府廣場」, point.x, point.y, point);
return true;
}
}
建立LocationActivity,將LocationOverlay做爲其的內部類
public class LocationActivity extends MapActivity {
private MapView mapView;
private MapController mapController;
private GeoPoint geoPoint;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView01);
mapView.setTraffic(true);
mapView.setSatellite(true);
mapView.setStreetView(true);
mapView.setEnabled(true);
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
geoPoint = new GeoPoint((int)(30.659259*1000000), (int)(104.065762*1000000));
mapController.animateTo(geoPoint);
mapController.setZoom(12);
LocationOverlay locationOverlay = new LocationOverlay();
List<Overlay> list = mapView.getOverlays();
list.add(locationOverlay);
}
protected boolean isRouteDisplayed() {
return false;
}
}