Android Map API與Android Location API 開發應用- [Android開發]

來源:互聯網
上載者:User
Google對於Android提供的Map擴充庫是個好東西,可以輕易開發基於Google Map地圖的應用,要注意到的是com.google.android.maps庫不是標準的Android sdk內容,如果之前安裝sdk時沒有安裝時,那就需要通過"android sdk and avd manager"來安裝Google Map API,如:

安裝完畢就可以進行基於Android map api與Android location api開發應用。

一、開發前的準備工作

首先需要申請Android Map API Key,因為我們現在只要是進行測試熟悉Google map api的應用,所以可以使用Debug版的證明書即可,通過方法找到debug.keystore檔案的位置。

然後在命令提示字元下進入該目錄,執行命令: keytool -list -keystore debug.keystore,當提示你輸入密碼時,輸入預設的密碼android,這樣就可以取得MD5值。
最後開啟申請Key的網站:申請連結。

記錄下API Key,在下一步中就應用到。

開發前的準備工作還差兩步就可以完成了,第一個是要建立一個基於Google API的AVD,第二個就是建立一個基於Google API的工程,這兩步都是很基本的,就不詳說了。

二、Google Map API的應用

之前下載的擴充包com.google.android.maps中包含了一系列用於在Google Map上顯示、控制和層疊資訊的功能類,以下是該包中幾個最重要的類:

  • MapActivity:任何想要顯示MapView的activity都需要派生自MapActivty,並且在其衍生類別的onCreate()中,追尋一個MapView執行個體。
  • MapView:用於顯示地圖的View組件。
  • MapController:用於控制地圖的移動、縮放等。
  • Overlay:可顯示於地圖之上的可繪製的對象。
  • GeoPoint:包含緯度位置的對象。

下面我們將通過maps包來實現一個地圖瀏覽的程式。
Step1:修改AndroidManifest.xml檔案,在裡面定義如下資訊:<uses-library android:name="com.google.android.maps"/>,注意該定義的位置(開始自己不仔細,把uses拼字成use而已,找了很久才發現是這裡出了錯),然後添加應用程式訪問網路的許可權:<uses-permission android:name="android.permission.INTERNET" />。

Step2:在main.xml中建立MapView,代碼如下:1 <com.google.android.maps.MapView
2     android:id="@+id/MapView01"
3     android:layout_width="fill_parent"
4     android:layout_height="fill_parent"
5     android:apiKey="03KPIn4oYNLRqlYAsIie3Ad2Gmr1P5uAVBSJ35Q"/>

Step3:實現MapActivity,因為繼承自MapActivity,所以要實現isRouteDisplayed方法,MapView提供3種模式的地圖,如下:

  • mMapView.setTraffic(true); //設定為交通模式。
  • mMapView.setSatellite(true); //設定為衛星模式。
  • mMapView.setStreetView(true); //設定為街道模式。
  • mMapView.setBuiltInZoomComtrols(true); //設定地圖是否技術縮放。

Step4:MapController的使用,如果要設定地圖顯示的地點以及放大的倍數等,需要使用到MapController來控制地圖,可以通過如下代碼來獲得MapController對象:mMapController=mMapView.getController();
要定位地點,先構建一個GeoPoint對象,然後使用animateTo方法指定位置,如下面代碼

1         //設定起點為廣州
2         mGeoPoint = new GeoPoint((int) (23* 1000000), (int) (113* 1000000));
3         //定位到廣州
4         mMapController.animateTo(mGeoPoint); 

Step5:最後付上具體實現的代碼清單:

package info.ellic.googlemapsample;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
import java.util.List;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapController;
import com.google.android.maps.Overlay;

public class GoogleMapSample extends MapActivity
{
    private MapView     mMapView;
    private MapController mMapController; 
    private GeoPoint mGeoPoint;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mMapView = (MapView) findViewById(R.id.MapView01);
        //設定為交通模式
        //mMapView.setTraffic(true);
        //設定為衛星模式
        mMapView.setSatellite(true); 
        //設定為街景模式
        //mMapView.setStreetView(false);
        //取得MapController對象(控制MapView)
        mMapController = mMapView.getController(); 
        mMapView.setEnabled(true);
        mMapView.setClickable(true);
        //設定地圖支援縮放
        mMapView.setBuiltInZoomControls(true); 
         //設定起點為廣州
         mGeoPoint = new GeoPoint((int) (23* 1000000), (int) (113* 1000000));
        //定位到廣州
        mMapController.animateTo(mGeoPoint); 

        //設定倍數(1-21)
        mMapController.setZoom(12); 
        //添加Overlay,用於顯示標註資訊
        MyLocationOverlay myLocationOverlay = new MyLocationOverlay();
        List<Overlay> list = mMapView.getOverlays();
        list.add(myLocationOverlay);
    }
    protected boolean isRouteDisplayed()
    {
        return false;
    }
    class MyLocationOverlay extends Overlay
    {
        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
        {
            super.draw(canvas, mapView, shadow);
            Paint paint = new Paint();
            Point myScreenCoords = new Point();
            // 將經緯度轉換成實際螢幕座標
            mapView.getProjection().toPixels(mGeoPoint, myScreenCoords);
            paint.setStrokeWidth(1);
            paint.setARGB(255, 255, 0, 0);
            paint.setStyle(Paint.Style.STROKE);
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.home);
            canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
            canvas.drawText("廣州歡迎你", myScreenCoords.x, myScreenCoords.y, paint);
            return true;
        }
    }
}

運行:

三、定位系統的應用

四、基於Google map api的創意應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.