• 【高德地图Android SDK】视频教学


    前两天参加了高德在北航举办的公开课,感觉非常不错。完成老师布置的作业之后,还顺利地拿到了高德开发者认证证书!!

    现在来跟大家分享一下,如何快速学习【高德地图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;
        }
    }
  • 相关阅读:
    用python一键爬取几千张表情包斗图,分分钟征服朋友圈所有好友
    Python新手必备的15个字符串方法,你学废了吗?
    价值10K+的Python面试题,珍藏已久,分享给大家!
    用python开发一个益智游戏,没事就锻炼锻炼自己的方向感
    室友吃个泡面的时间,我就用Python代码下载了几千张手机壁纸,简直yyds!
    Python GUI编程:tkinter 关于 ttkbootstrap 的使用
    .NET 6 使用 System.Drawing.Common 出现 The type initializer for ‘Gdip’ threw an exception 异常的解决办法
    如何在 Linux 上使用 NPOI
    Silverlight企业应用快速开发平台框架设计(二)分析平台实现重点是什么,要怎么做?
    Silverlight企业应用快速开发平台框架设计(一)目标
  • 原文地址:https://www.cnblogs.com/milkmap/p/4011491.html
Copyright © 2020-2023  润新知