开发 Android 地图SDK 概述

概述 最后更新时间: 2025年12月03日

重要:由于个人信息保护法的实施,从地图8.1.0版本起对旧版本SDK不兼容,请务必确保调用SDK任何接口前先调用更新隐私合规updatePrivacyShow、updatePrivacyAgree两个接口,具体可参考开发指南-其他配置注意事项-隐私合规接口说明传入相关参数。否则可能产生的异常情况如下:

  1. MapView、TextureMapView、MapFragment显示白屏;
  2. OfflineMapManager、OfflineMapActivity、LBSTraceClient、搜索接口也需在初始化时对抛出的异常进行捕获,否则可能导致编译不通过、空指针等异常情况;

Flutter兼容性:Flutter3.0.0版本已发布,兼容Android定位5.6.0、iOS定位2.8.0、地图8.1.0及以上版本,可前往 Flutter插件下载页面 获取对应版本

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

开发者使用注意事项

法人或非法人组织使用平台服务应事先购买技术服务许可以获取许可。若您未购买技术服务许可,平台向您提供的KEY和服务配额仅供您用于短期、少量的测试目的;若您超出前述范围使用平台服务(包括但不限于您开始向第三方或公众销售或提供您的应用、将您的应用用于参与第三方投标、您的应用在应用程序分发平台上架或已经可以被公众获取使用、您的应用开始收费或发布广告或以其他方式获益、在组织内部使用的您的应用已上线运营、您的应用长期或大量调用平台服务等情形),构成未许可使用,平台有权采取相应措施。关于具体使用规则,请参阅《高德地图开放平台服务协议》获得详细信息。

示例中心 常见问题

AltStyle によって変換されたページ (->オリジナル) /