示例中心
功能在线体验
控制台
您现在的位置: 开发 > Android 地图SDK > 概述 >

高德 开发 Android 地图SDK 概述

更新时间:2017年08月24日

Android地图SDK简介

高德开放平台目前开放了Android 地图 SDK 以及 Android 地图 SDK 专业版两套地图SDK工具。

高德地图 Android SDK 是一套地图开发调用接口,开发者可以轻松地在自己的Android应用中加入地图相关的功能,包括:地图显示(含室内、室外地图)、与地图交互、在地图上绘制、兴趣点搜索、地理编码、离线地图等功能。

高德地图 Android SDK 专业版是在 Android SDK 已有服务的基础上,新增支持了自定义地图在线加载、自定义地图元素纹理等功能,便于开发者完成基于自身场景的更深层、更个性化地图的开发需求。

V4.0.0开始,除了支持手机设备外,还支持Android Wear。

功能介绍与体验

  • 展示地图
    package com.amap.map3d.demo.basic;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    import com.amap.api.maps.AMap;
    import com.amap.api.maps.MapView;
    import com.amap.map3d.demo.R;
    
    public class AmapActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.basicmap_activity);
    
        MapView mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 此方法必须重写
        AMap aMap = mapView.getMap();
    
        aMap.setTrafficEnabled(true);// 显示实时交通状况
        //地图模式可选类型:MAP_TYPE_NORMAL,MAP_TYPE_SATELLITE,MAP_TYPE_NIGHT
        aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
    }
    
    }
  • 覆盖物
    public class AmapActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.basicmap_activity);
    
        MapView mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 此方法必须重写
        AMap aMap = mapView.getMap();
    
        //绘制marker
        Marker marker = aMap.addMarker(new MarkerOptions()
            .position(new LatLng(39.986919,116.353369))
            .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                .decodeResource(getResources(),R.drawable.marker)))
            .draggable(true));
    
        // 绘制曲线
        aMap.addPolyline((new PolylineOptions())
    .add(new LatLng(43.828, 87.621), new LatLng(45.808, 126.55))
    .geodesic(true).color(Color.RED));
    
    }
    
    }
  • 路径规划
    /**
     * 开始搜索路径规划方案
     */
    public void searchRouteResult(int routeType, int mode) {
        if (mStartPoint == null) {
            ToastUtil.show(mContext, "起点未设置");
            return;
        }
        if (mEndPoint == null) {
            ToastUtil.show(mContext, "终点未设置");
        }
        showProgressDialog();
        final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(
            mStartPoint, mEndPoint);
        if (routeType == ROUTE_TYPE_BUS) {// 公交路径规划
            BusRouteQuery query = new BusRouteQuery(fromAndTo, mode,
                mCurrentCityName, 0);// 第一个参数表示路径规划的起点和终点,第二个参数表示公交查询模式,第三个参数表示公交查询城市区号,第四个参数表示是否计算夜班车,0表示不计算
            mRouteSearch.calculateBusRouteAsyn(query);// 异步路径规划公交模式查询
        } else if (routeType == ROUTE_TYPE_DRIVE) {// 驾车路径规划
            DriveRouteQuery query = new DriveRouteQuery(fromAndTo, mode, null,
                null, "");// 第一个参数表示路径规划的起点和终点,第二个参数表示驾车模式,第三个参数表示途经点,第四个参数表示避让区域,第五个参数表示避让道路
            mRouteSearch.calculateDriveRouteAsyn(query);// 异步路径规划驾车模式查询
        } else if (routeType == ROUTE_TYPE_WALK) {// 步行路径规划
            WalkRouteQuery query = new WalkRouteQuery(fromAndTo, mode);
            mRouteSearch.calculateWalkRouteAsyn(query);// 异步路径规划步行模式查询
        }
    }
  • POI搜索
    /**
     * 开始进行poi搜索
     */
    protected void doSearchQuery() {
        keyWord = mSearchText.getText().toString().trim();
        currentPage = 0;
        query = new PoiSearch.Query(keyWord, "", "北京市");
        query.setPageSize(20);// 设置每页最多返回多少条poiitem
        query.setPageNum(currentPage);// 设置查第一页
    
        if (lp != null) {
            poiSearch = new PoiSearch(this, query);
            poiSearch.setOnPoiSearchListener(this);
            poiSearch.setBound(new SearchBound(lp, 5000, true));//
            poiSearch.searchPOIAsyn();// 异步搜索
        }
    }
  • 自定义OpenGL渲染
    ...
    /**
     * 初始化AMap对象
     */
    private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
    
            //关闭文字
            aMap.showMapText(false);
            //关闭3d楼块
            aMap.showBuildings(false);
            //注1:设置opengl Renderer
            aMap.setCustomRenderer(new MapRenderer(aMap));
        }
    }
    ...
    
    class MapRenderer implements CustomRenderer{
        //平移位置
        private float[] translate_vector = new float[4];
        //缩放比例
        public static float SCALE = 0.005F;
        private LatLng center = new LatLng(39.90403, 116.407525);// 北京市经纬度
        private AMap aMap;
        public MapRenderer(AMap aMap) {
        this.aMap = aMap;
        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(center,15));
    }
    
    @Override
    public void onDrawFrame(GL10 gl) {
        // 注2:绘制各种图形的opengl代码
    
    }
    ...
    
    @Override
    public void OnMapReferencechanged() {
        //注3:回调这个时,坐标系发生改变,需要重新计算缩放比例
        calScaleAndTranslate();
    
    }
    
    private void calScaleAndTranslate() {
        // 坐标会变化,重新计算计算偏移,供参考,可以自行定义
        PointF pointF = aMap.getProjection().toOpenGLLocation(center);
    
        translate_vector[0] = pointF.x;
        translate_vector[1] = pointF.y;
        translate_vector[2] = 0;
    
        //重新计算缩放比例
        LatLng latLng2 = new LatLng(center.latitude + 0.001, center.longitude + 0.001);
        PointF pointF2 = aMap.getProjection().toOpenGLLocation(latLng2);
        double _x = Math.abs((pointF.x - pointF2.x));
        double _y = Math.abs((pointF.y - pointF2.y));
        SCALE = (float) Math.sqrt((_x * _x + _y * _y));
    }
    }
  • 离线地图
    // 设置应用单独的地图存储目录,在下载离线地图或初始化地图时设置
    MapsInitializer.sdcardDir = getSdCacheDir(this);
    private String getSdCacheDir(Context context) {
             return "地址路径";
    }
    //按照citycode下载
    OfflineMapManager.downloadByCityCode(String citycode);
    //按照cityname下载
    OfflineMapManager.downloadByCityName(String cityname);
    /**
     * 点击暂停按钮响应事件回调
     */
    amapManager = new OfflineMapManager(context, OfflineMapDownloadListener );
    amapManager.pause();

下载完整示例代码

账号与Key的申请

注册成为高德开发者需要分三步:

第一步,注册高德开发者;

第二步,去控制台创建应用;

第三步,获取Key。

具体步骤可参看下图

获取 API Key

给开发者的建议

高德开放平台提供的地图API/SDK,任何非盈利性网站/应用均可免费使用 。您需要先申请Key,才能使用该服务。请参阅《高德地图 API 使用条款》获得详细信息。

示例中心 功能
在线体验
常见问题