【高德地圖Android SDK】視訊教學

酸奶小妹發表於2014-10-08

前兩天參加了高德在北航舉辦的公開課,感覺非常不錯。完成老師佈置的作業之後,還順利地拿到了高德開發者認證證書!!

現在來跟大家分享一下,如何快速學習【高德地圖Android SDK】的開發。一天包會!連環境如何配置,都在視訊裡有喔。

 

基礎知識

Android 導航 SDK 是一款針對線上導航的產品,產品功能涵蓋路徑規劃、模擬導航、GPS 定位、自定義導航介面、獲取導航播報資訊等。此外,該產品的導航路徑計算與實時交通訊息相結合,力求為使用者提供更加合理、準確、人性化的導航服務。Android 導航 SDK 還支援步行路線規劃和導航,使您的出行更加順暢。

開發文件:http://lbs.amap.com/api/android-navi-sdk/summary/

 

視訊教學

一、如何使用Android SDK進行開發01—LBS開放平臺簡介及環境搭建

點選檢視視訊教學:http://v.163.com/paike/V8H1BIE6U/VA4PLC1AI.html

 

二、如何使用Android SDK進行開發02—marker標記

點選檢視視訊教學:http://v.163.com/paike/V8H1BJ7FL/VA4PMIKG3.html

 

三、如何使用Android SDK進行開發03—地圖Overlay新增

點選檢視視訊教學:http://v.163.com/paike/V8H1BJ7FL/VA4POFD2H.html

 

四、如何使用Android SDK進行開發04—搜尋功能

點選檢視視訊教學:http://v.163.com/paike/V8H1BIE6U/VA748DN20.html

 

課後習題

完成課後習題,就能得到高德開發者認證證書呢!老師佈置的作業是這樣說的:

題目

做一個簡單的記錄GPS運動軌跡的小軟體。

功能點
1、實時記錄gps定位資訊,在地圖上繪製軌跡。(定位、折線overlay)
2、如果在某個位置點逗留時間超過30秒,還需要使用marker標記。(標記marker)

提交方式
1)傳送郵件至<xudong.tang@autonavi.com>
2)需提交一個zip包,裡面包含apk和源程式

參與討論

高德認證開發者QQ群號 253476702

 

程式碼揭祕

1、地圖顯示示意圖

 

地圖顯示程式碼

public class BasicMapActivity extends Activity {
    private MapView mapView;
    private AMap aMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // R 需要引用包import com.amapv2.apis.R;
        setContentView(R.layout.basicmap_activity);
        mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 必須要寫
        init();
    }
 
    /**
     * 初始化AMap物件
     */
    private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
        }
    }
 
    /**
     * 方法必須重寫
     */
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }
 
    /**
     * 方法必須重寫
     */
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }
     
    /**
     * 方法必須重寫
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }
 
    /**
     * 方法必須重寫
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }
}

 

標記示意圖

 

2、標記程式碼

private void addMarkersToMap()
{
    //宣告一個動畫幀集合。
    ArrayList giflist = new ArrayList();
    //新增每一幀圖片。
    giflist.add(BitmapDescriptorFactory.fromResource(R.drawable.navi_map_flash));
    giflist.add(BitmapDescriptorFactory.fromResource(R.drawable.navi_map_flash1));
    //設定遠小近大效果,2.1.0版本新增;設定重新整理一次圖片資源的週期。
    CHENGDU = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
                .position(Constants.CHENGDU).title("成都市")
                .snippet("成都市:30.679879, 104.064855").icons(giflist)
                .perspective(true).draggable(true).period(50));
    CHENGDU.showInfoWindow();// 設定預設顯示一個infowinfow
    markerOption = new MarkerOptions();
    markerOption.position(Constants.XIAN);
    markerOption.title("西安市").snippet("西安市:34.341568, 108.940174");
    markerOption.perspective(true);
    markerOption.draggable(true);
    markerOption.icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow));
    XIAN = aMap.addMarker(markerOption);
    // 新增帶有系統預設icon的marker
    drawMa

 

 

3、折線示意圖

 

折線程式碼

private void setUpMap()
{
        mColorBar.setOnSeekBarChangeListener(this);
        mAlphaBar.setOnSeekBarChangeListener(this);
        mWidthBar.setOnSeekBarChangeListener(this);
        aMap.moveCamera(CameraUpdateFactory.zoomTo(4));
        // 繪製一個虛線三角形
        polyline = aMap.addPolyline((new PolylineOptions())
                .add(Constants.SHANGHAI, Constants.BEIJING, Constants.CHENGDU)
                .width(10).setDottedLine(true).geodesic(true)
                .color(Color.argb(255, 1, 1, 1)));
        // 繪製一個烏魯木齊到哈爾濱的大地曲線
        aMap.addPolyline((new PolylineOptions())
                .add(new LatLng(43.828, 87.621), new LatLng(45.808, 126.55))
                .geodesic(true).color(Color.RED));
       }
    /**
     * Polyline中對填充顏色,透明度,畫筆寬度設定響應事件
     */
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser)
    {
        if (polyline == null)
        {
            return;
        }
        if (seekBar == mColorBar)
        {      
            polyline.setColor(Color.argb(progress, 1, 1, 1));
        }
        else if (seekBar == mAlphaBar)
        {
            float[] prevHSV = new float[3];
            Color.colorToHSV(polyline.getColor(), prevHSV);
            polyline.setColor(Color.HSVToColor(progress, prevHSV));
        }
        else if (seekBar == mWidthBar)
        {
            polyline.setWidth(progress);
        }
        }

 

4、定位示意圖

 

定位程式碼

/**
 * AMapV2地圖中簡單介紹顯示定位小藍點
 */
public class MultyLocationActivity extends Activity implements LocationSource, AMapLocationListener {
    private AMap aMap;
    private MapView mapView;
    private OnLocationChangedListener mListener;
    private LocationManagerProxy mAMapLocationManager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.locationsource_activity);
        mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);
        init();
    }
 
    /**
     * 初始化AMap物件
     */
    private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
            setUpMap();
        }
    }
 
    private void setUpMap() {
        Map.setLocationSource(this);// 設定定位監聽
        aMap.getUiSettings().setMyLocationButtonEnabled(true);// 設定預設定位按鈕是否顯示
        aMap.setMyLocationEnabled(true);// 設定為true表示顯示定位層並可觸發定位,false表示隱藏定位層並不可觸發定位,預設是false
        // 設定定位的型別為定位模式:定位(AMap.LOCATION_TYPE_LOCATE)、跟隨(AMap.LOCATION_TYPE_MAP_FOLLOW)
        // 地圖根據面向方向旋轉(AMap.LOCATION_TYPE_MAP_ROTATE)三種模式
        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
    }
 
    /**
     * 此方法需存在
     */
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }
 
    /**
     * 此方法需存在
     */
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
        deactivate();
    }
 
    /**
     * 此方法需存在
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }
 
    /**
     * 此方法已經廢棄
     */
    @Override
    public void onLocationChanged(Location location) {
    }
 
    /**
     * 定位成功後回撥函式
     */
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        if (mListener != null && amapLocation != null) {
            if (amapLocation.getAMapException().getErrorCode() == 0) {
                mListener.onLocationChanged(amapLocation);// 顯示系統小藍點
            }
        }
    }
 
    /**
     * 啟用定位
     */
    @Override
    public void activate(OnLocationChangedListener listener) {
        mListener = listener;
        if (mAMapLocationManager == null) {
            mAMapLocationManager = LocationManagerProxy.getInstance(this);
            //此方法為每隔固定時間會發起一次定位請求,為了減少電量消耗或網路流量消耗,
            //注意設定合適的定位時間的間隔,並且在合適時間呼叫removeUpdates()方法來取消定位請求
            //在定位結束後,在合適的生命週期呼叫destroy()方法     
            //其中如果間隔時間為-1,則定位只定一次
            mAMapLocationManager.requestLocationData(
                    LocationProviderProxy.AMapNetwork, 60*1000, 10, this);
        }
    }
 
 
    /**
     * 停止定位
     */
    @Override
    public void deactivate() {
        mListener = null;
        if (mAMapLocationManager != null) {
            mAMapLocationManager.removeUpdates(this);
            mAMapLocationManager.destroy();
        }
        mAMapLocationManager = null;
    }
}

 

相關文章