当前位置:文档之家› 高德地图 Android SDK 开发指南 V2.2.0

高德地图 Android SDK 开发指南 V2.2.0

高德地图Android SDK

开发指南

V2.2.0

高德软件有限公司

2014年3月·北京

法律声明

版权所有?2013,高德集团。

保留一切权利。

本文档包含的所有内容除特别声明之外,版权均属于高德集团所有,受《中华人民共和国著作权法》及相关法律法规和中国加入的所有知识产权方面的国际条约的保护。未经本公司书面许可,任何单位和个人不得以任何方式(电子或机械,包括影印)翻印或转载本文档的任何部分,否则将视为侵权,高德集团保留依法追究其法律责任的权利。

高德地图API 的一切有关权利属于高德集团所有。

本文档并不代表供应商或其代理的承诺,高德集团可在不作任何申明的情况下对本文档内容进行修改。

本文档中所涉及的软件产品及其后续升级产品均由高德集团制作并负责全权销售。

本文档中提到的其它公司及其产品的商标所有权属于该商标的所有者。

高德地图

联系邮箱:api@https://www.doczj.com/doc/682575187.html,

技术交流论坛:https://www.doczj.com/doc/682575187.html,

官方微博:https://www.doczj.com/doc/682575187.html,/gaodedituapi

商务合作联系人:张先生电话:010-******** 电子邮箱:shiyue.zhang@https://www.doczj.com/doc/682575187.html, 高德地图API 欢迎用户的任何建议或意见。

目录

1简介 (1)

1.1Android SDK (1)

1.2面向的读者 (1)

1.3兼容性 (1)

1.4申请API Key (1)

2变更列表 (2)

2.1地图功能变更 (2)

2.2搜索功能变更 (3)

3错误码对照表 (6)

4配置工程 (7)

5地图显示 (9)

5.1地图显示 (9)

5.2以屏幕某个像素点旋转地图 (12)

5.3线面设置在地图底图文字上方或下方 (12)

6地图图层 (12)

6.1基本地图 (12)

6.2自定义图层 (13)

6.3实时路况 (15)

6.4定位层 (15)

6.4.1更改定位图标 (16)

7覆盖物显示 (18)

7.1折线(Polyline) (18)

7.1.1添加折线 (18)

7.1.2设置外观 (18)

7.1.3示例代码 (20)

7.2多边形(Polygon) (21)

7.2.1添加多边形 (21)

7.2.2设置外观 (21)

7.2.3示例代码 (22)

7.3圆(Circles) (23)

7.3.1添加圆 (24)

7.3.2设置外观 (24)

7.3.3示例代码 (25)

7.4图片层(GroundOverlay) (25)

7.4.1添加图片层 (26)

7.4.2示例代码 (26)

7.5标记(Marker) (27)

7.5.1添加默认标记 (27)

7.5.2自定义标记图标 (28)

7.5.3动画标记 (28)

7.5.4示例代码 (28)

7.7点击信息窗口事件 (29)

7.8拖拽标记事件 (31)

8地图控件 (33)

8.1缩放控件 (33)

8.2定位按钮 (34)

8.3地图Logo (35)

8.4指南针 (36)

8.5比例尺 (37)

9手势控制 (39)

9.1缩放手势 (39)

9.2平移(滑动)手势 (39)

9.3旋转手势 (39)

9.4倾斜手势 (40)

10地图事件 (41)

10.1点击地图事件 (41)

10.2长按地图事件 (41)

10.3移动地图事件 (41)

10.4示例代码 (41)

11可视区域操作(Camera) (43)

11.1可视区域的位置(CameraPosition) (43)

11.1.1目的地(target) (43)

11.1.2缩放级别(zoom) (43)

11.1.3方向(bearing) (44)

11.1.4倾斜角度(tilt) (44)

11.2移动可视区域 (45)

11.2.1仅更改缩放级别 (45)

11.2.2仅更改视图中心点 (46)

11.2.3仅更改旋转角度 (46)

11.2.4仅更改倾斜角度 (46)

11.2.5更改可视区域 (46)

11.2.6示例代码 (46)

11.3设置可视区域边界 (48)

12离线地图 (50)

12.1开始下载 (50)

12.2暂停下载 (50)

12.3停止下载 (51)

12.4更改手机下载目录 (51)

12.5获取离线地图城市列表 (52)

12.6获取全国离线地图数据 (52)

12.7获取已下载城市列表 (52)

12.8获取正在或等待下载城市列表 (52)

12.9判断数据是否存在更新 (52)

12.10删除城市离线地图包 (53)

13地图截屏 (54)

14.1关键字搜索 (55)

14.2周边搜索 (57)

14.3指定区域搜索 (58)

14.4团购/优惠搜索 (58)

14.5POI 深度信息 (61)

15输入提示搜索 (61)

16路径规划 (64)

16.1步行路径规划 (64)

16.2公交路径规划 (65)

16.3驾车路径规划 (67)

17公交路线查询 (70)

17.1线路名称查询 (70)

17.2线路ID查询 (71)

17.3途径站点查询 (72)

18坐标/地址查询 (73)

18.1地理编码 (73)

18.2逆地理编码 (74)

1 简介

1.1Android SDK

高德地图Android SDK可以为Android应用开发者提供互动的、功能丰富的Android手机地图。

●将地图显示功能与搜索服务、定位服务分别封装为三个类库。每个类库不相互依赖,用户

可以分开使用。

●完美支持Android手机、平板电脑,可在不同屏幕尺寸下呈现完美的显示效果。

●地图采用矢量方法绘制,使得地图处理速度更快、流量占用更少。

●地图支持3D模式。通过移动用户的视角,可以从各个角度显示地图。

●全新动画效果。移动地图、切换用户视角时,可体验炫酷的动画效果。

●支持3D离线地图。用户下载离线地图数据包后,可离线查看城市地图。

注意:

1、高德地图Android_Map_V2.0.0 之后的版本与Android_Map_V1.4.2 版本不兼容。若您

Android_Map_API 版本是V1.4.2,建议您升级到V2.X.X 版本。

2、从高德地图Android 3D(矢量) SDK V2.2.0 版本切换到高德地图Android 2D(栅格) SDK

V2.2.0 版本,需要把布局文件中地图控件com.amap.api.maps.MapView 修改为

com.amap.api.maps2d.MapView,同时替换相应的jar 包即可。反之亦然。

3、为进一步提升搜索服务能力,Android_Services_V2.1.X 版本搜索做了重大升级,但是和以

往的V2.0.X 版本不兼容。

此外,为进一步提升搜索服务能力,Android_Services_V2.1.0 版本搜索做了重大升级,但是和以往的V2.0.X 版本不兼容。

1.2面向的读者

高德地图Android SDK 是提供给具有一定Android编程经验和了解面向对象概念的读者使用的。此外,读者还应该对地图产品有一定的了解。

用户在使用中遇到任何问题,都可以通过官网提供的QQ群或问答社区反馈给我们。

1.3兼容性

高德地图Android SDK 2.X.X版本支持Android 2.2及以上系统。

高德地图Android SDK 1.X.X版本支持Android 1.6及以上系统。

1.4申请API Key

为保证服务可以正常使用,您需要登录AMap API网站申请API Key。每个帐户,最多可以申请10个Key。Key 申请的具体流程请参照获取密钥。

2 变更列表

2.1地图功能变更

V2.0.4和V2.1.0 版本相对于V1.4.2 做出如下改变。下表以V1.4.2 版本为基础,列出此版本与新版本间的对应关系,帮助您了解V2.0.4和V2.1.0 版本的构成。

2.2搜索功能变更

V2.1.0版本相对于老版本V1.4.2和V2.0.4做出如下改变。V2.2.x 在V2.1.x 基础上做修改。下表以V1.4.2和V2.0.4版本为基础,列出此版本与新版本间的对应关系,帮助您了解V2.1.0版本的构成。

3 错误码对照表当使用异步方法搜索信息时,回调接口将返回响应码。响应码列表如下:

4 配置工程

工程配置操作如下:

1.从网站下载并解压得到地图显示包“Android_Map_V

2.x.x.jar“、搜索包

“Android_Services_V2.x.x.jar”和文件夹“armeabi”(含libamapv3.so和libmapv3ex.so 文件)。

注意:若您在Eclipse上使用adt22版本插件,则需要在Eclipse上进行如下配置:

选中Eclipse的工程,右击选择“Properties > Java Build Path > Order and Export”,勾选“Android Private Libraries”。

2.开发工程中新建“libs”文件夹,将地图显示包、搜索包和“armeabi”拷贝到libs的根目录下。拷贝完成后的工程目录(以V2.1.0为例)如图所示:

3.添加用户Key。

在工程的“AndroidManifest.xml”文件如下代码中添加您的用户Key。

android:icon="@drawable/icon"

android:label="@string/app_name" >

android:name="com.amap.api.v2.apikey"

android:value="请输入您的用户Key"/>

4.添加权限。

在工程的“AndroidManifest.xml”文件中进行添加,请直接拷贝。

5.clean工程,结束配置。

5 地图显示

5.1地图显示

地图显示的关键类是AMap类。在您的应用程序中,AMap是地图的对象。AMap地图将会通过MapFragment或MapView容器类来表现。

AMap类自动处理以下操作:

●连接到高德地图服务

●下载地图数据

●在设备屏幕上显示地图

●显示各种控件,如缩放控件

●支持各种手势,如平移和缩放手势

下面以MapView显示地图为例进行说明。

MapView是Android View类的一个子类,它可以帮忙您在Android View中放置地图,它是应用

程序和窗口部件的基本构建类。MapView作为地图的容器,通过AMap对象显示地图。

使用MapView类,必须重载Activity生命周期的所有方法,有onCreate(),onDestroy(),onResume(),onPause() ,onSaveInstanceState()。

地图显示效果如下:

示例代码如下(详细信息,请参考示例工程“基础地图”案例):

布局文件(res/layout/basicmap_activity.xml):

xmlns:android="https://www.doczj.com/doc/682575187.html,/apk/res/android"

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent" />

程序代码(com.amapv2.apis.basic. BasicMapActivity.java):

/**

* AMapV2地图中介绍如何使用mapview显示地图

*/

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(https://www.doczj.com/doc/682575187.html,yout.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 onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState);

mapView.onSaveInstanceState(outState);

}

/**

* 此方法需要有

*/

@Override

protected void onResume() {

super.onResume();

mapView.onResume();

}

/**

* 此方法需要有

*/

@Override

protected void onPause() {

super.onPause();

mapView.onPause();

}

/**

* 此方法需要有

*/

@Override

protected void onDestroy() {

super.onDestroy();

mapView.onDestroy();

}

}

5.2以屏幕某个像素点旋转地图

高德地图Android SDK 允许用户在屏幕的某个像素点旋转地图。具体实现是使用AMap 类的setPointT oCenter() 方法将某个屏幕像素点设置为地图中心点,然后使用CameraUpdate 类的changeBearing(float bearing)方法改变地图的旋转角度。

如aMap.setPointToCenter(100,0) 设置屏幕像素点(100,0)为地图中心点,cameraupdate. changeBearing(90) 改变地图的旋转角度,即表示地图以屏幕像素点旋转地图。

5.3线面设置在地图底图文字上方或下方

高德地图Android SDK 允许用户将添加的线、面等覆盖物设置在地图底图文字的上方或下方。

具体实现是使用AMap 类的setMapTextZIndex()方法来设置地图底图文字的z轴指数。地图底图文字和覆盖物的z轴指数默认为0,此时地图底图文字在覆盖物的下方,如果使用

aMap.setMapTextZIndex(2) 可以将地图底图文字设置在添加的覆盖物之上。

6 地图图层

地图是由多个图层组成,每个图层会显示一部分的地理或交通信息。开发者可以通过设置AMap类灵活控制图层的显示状态。

例如,用户所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层。实时路况等的展现也是通过图层来实现的。

6.1基本地图

地图API包含两种类型的基本地图。

●Normal:标准地图。地图包含道路、建筑,以及重要的自然风光(如河流)等。道路和功能标

签为可见的。

●Satellite:卫星地图。道路和功能标签为可见的。

下图对相同位置,类型为“normal(实时交通)”,“satellite”地图做出对比:

示例代码如下(详细信息,请参考示例工程“Layers 功能”案例/

https://www.doczj.com/doc/682575187.html,yersActivity.java):

/**

* 选择标准地图和卫星地图事件的响应

*/

private void setLayer(String layerName) {

if (layerName.equals(getString(R.string.normal))) {

// 显示标准地图

aMap.setMapType(AMap.MAP_TYPE_NORMAL);

} else if (layerName.equals(getString(R.string.satellite))) {

// 显示卫星地图

aMap.setMapType(AMap.MAP_TYPE_SATELLITE);

}

}

6.2自定义图层

简介

TileOverlay 定义了添加到基础底层地图的图片集合。你也可以使用自定义图层添加透明图片对基础底层地图添加额外特性。你需要提供你支持的缩放级别的每层级别的瓦片。如果在每个层级你都有足够的瓦片,你可以提供整个高德地图的自定义图层。

当你想增加许多图片到地图,特别是覆盖大面积的地理区域时,使用TileOverlay 类。与此相反,当你希望在地图上固定区域添加一张图片时,使用GroundOverlay 类。

经纬度坐标和缩放级别

高德地图API 将每个层级的图片打散成有序的若干个瓦片集。当地图移动到新的区域或新的缩放级别,地图API 决定哪些瓦片是需要的,并且传送这些信息到瓦片集来提取瓦片。

坐标(0,0)的瓦片在地图的西北角,x的值从西到东依次增加,yi的值从北到南依次增加。瓦片通过x,y 来检索。

在0 级,全世界被渲染成一个瓦片。每个缩放级别以2为底的当前缩放级别为指数的平方的增加。所以,在1级地图渲染成2*2的瓦片。在2级地图渲染成4*4的瓦片,在3级,8*8的瓦片,依次类推。

比如,在2级,地球被分成了16个瓦片。地图瓦片能通过唯一的x,y 和缩放级别z来引用:

当创建自定义图层时,你需要在每个支持的缩放级别创建图片。

1 AMap. getMaxZoomLevel() 返回当前地图最大的缩放级别。

2 AMap. getMinZoomLevel() 返回当前地图最小的缩放级别。

添加自定义图层

最简单常用的添加自定义图层的方法是提供一个指向相关图层图片的URL。UrlTileProvider 是部分的实现了提供图片瓦片的TileProvider。这个类要求所有图片有相同的尺寸。

你需要实现UrlTileProvider .getTileUrl()来接收(x,y,zoom),并返回指向该瓦片的URL。如果没有指定的x,y,zoom,这个方法应该返回null。一个URL 可以指向网站资源,android资源,或在本地硬盘上的文件。

在服务器上存储瓦片图片,定义所有的x,y坐标和缩放级别。然后添加自定义图层。

1.定义一个UrlTileProvider 来支持瓦片图片。

2.重载getTileUrl() 来为每个瓦片建立一个URL。

3.提供一个TileOverlayOptions 对象:

diskCacheDir:设置栅格图层的磁盘缓存目录。

diskCacheSize:设置栅格图层的默认磁盘缓存大小

tileProvider:栅格图层的提供者。

diskCacheEnabled:设置是否开启磁盘缓存。

4.调用AMap. addTileOverlay(),在地图上添加自定义图层。

private TileOverlay tileOverlay;

private String url = "http://10.19.2.135:8080/tileserver/Tile?x=%d&y=%d&z=%d&f=%d";

...

TileProvider tileProvider = new UrlTileProvider(256, 256) {

public URL getTileUrl(int x, int y, int zoom) {

try {

return new URL(String.format(url, x, y, zoom, floor));

} catch (MalformedURLException e) {

e.printStackTrace();

}

return null;

}

};

if (tileProvider != null) {

tileOverlay = aMap.addTileOverlay(new TileOverlayOptions()

.tileProvider(tileProvider)

.diskCacheDir("/storage/amap/cache").diskCacheEnabled(true)

.diskCacheSize(100));

删除一个自定义图层

你可以使用TileOverlay.remove()方法删除一个自定义图层。

清除过时图层

如果瓦片不再使用,你可以调用TileOverlay. clearTileCache()来清空之前使用的栅格图层的缓存以确保之前使用的栅格图层不在被使用。

6.3实时路况

高德地图API 提供北京,上海,广州,深圳,武汉,沈阳,南京,宁波,重庆,杭州,青岛,成都,天津,大连,无锡,西安,石家庄,太原,常州,厦门,长春,福州,珠海,东莞,长沙,苏州,金华,佛山,济南,泉州,西宁,乌鲁木齐,嘉兴,香港,鄂尔多斯,南通,中山,惠州,镇江,郑州,合肥,昆明,德州,朝阳,抚顺,大同,荆州47个城市及城际间的实时交通路况。

示例代码如下(详细信息,请参考示例工程“Layers 功能”案例/

https://www.doczj.com/doc/682575187.html,yersActivity.java):

/**

* 对选择是否显示交通状况事件的响应

*/

@Override

public void onClick(View v) {

if (v.getId() == R.id.traffic) {

aMap.setTrafficEnabled(true);

}

}

6.4定位层

高德地图API提供了与高德定位SDK的无缝整合。开发者只需要将高德定位SDK集成到项目里就可以使App具备定位能力。同时高德地图API也可以和其他第三方定位SDK整合,为开发者提供了更多的选择。Demo里已提供详细的案例程序。

开发者需要调用以下代码设置定位资源并显示定位层。

相关主题
相关文档 最新文档