使用AutoNavi MAP API 开发地图应用
•    为什么要使用AutoNavi MAP API
•    AutoNavi MAP API 概述
•    AutoNavi Android MAP API 与 Google Android Map API 比较
•    如何使用 AutoNavi MAP API
    如何实现坐标偏转
    如何创建MapView
    如何创建ItemizedOverlay
    如何创建PoiSearch
    如何创建Geocoder
    如何创建MyLocation
    FAQ
    技术支持(QQ:122795260, 邮箱:mapservice@autonavi)

为什么要使用AutoNavi MAP API
因为商业上的原因,联想不能在中国市场发布的手机上预装Google相关的手机服务,包括Google地图API。为了解决这一问题,我们和高德公司(AutoNavi)合作,在手机上预置了AutoNavi提供的多种基于位置的服务。高德公司作为中国领先的导航电子地图内容和位置服务解决方案提供商,旗下的互联网MAP API(www.mapabc)同样在业界具有良好的口碑。可为客户提供跨平台、跨媒体的位置服务解决方案。我们同时鼓励中国的开发者们,使用AutoNavi MAP API开发基于位置和地图应用程序,并且发布在中国市场中的联想手机上。
AutoNavi MAP API 概述
AutoNavi MAP API是高德软件公司提供的调用地图的接口方法。用户的应用程序可以通过A
utoNavi MAP API提供的接口方法操作地图数据,实现位置相关或地图相关应用。例如,通过调用AutoNavi MAP API,将地图数据整合到自己的应用中,可以将商户的地理位置信息在地图上进行标注,以很直观的形式展现给使用者。AutoNavi MAP API还将添加自驾,公交及步行的线路规划API。同时,还将加入对矢量地图的支持,大幅提高地图下载的速度。在不久的将来,还会加入3D街区图和其他的个性化地理数据支持。
要创建一个地图,需要在一个页面布局中扩展MapActivity及实现MapView类。您必须设置"android:apiKey"才能在您的应用中使用MapView获取地图数据。在模拟器环境中,您可以通过申请调试API 秘钥,进行程序开发。但在发布时,您必须申请签名证书的API秘钥,并替换MapView中的调试API秘钥。
AutoNavi MAP API 的详细内容可参考 code.autonavi/
AutoNavi Android MAP API 与 Google Android Map API 比较
首先, AutoNavi Android MAP API 与Google Android Map API是基本兼容的,只需替换Java包名和Map API Key,即可将Google Android Map API替换为AutoNavi Android MAP API。
在此基础之上,AutoNavi Android MAP API同时还提供了一些个性化的功能和服务, 见下文介绍:
1.坐标偏转:根据中国相关法律规律,GPS坐标首先需要经过偏转,否则此位置点将不能与电子地图匹配。AntoNavi Android MAP API支持了坐标偏转功能,并且在类MyLocation中内置了此功能,因此位置点显示相比较为准确。
2.本地缓存:位置相关应用的特点是用户的地图访问有一定的局部性。因此,AutoNavi Android MAP API增加了本地缓存功能,此功能有助于提高速度,且减少最终用户资费。
3.Cell ID定位(手机定位): 根据手机的当前连接,确定位置。此功能使用Android Location Manager机制,可以与现有的定位机制无缝集成。当GPS无信号时,可实现使用Cell ID定位。
4.Geocodeing & Reverse Geocoding(地理编码与逆地理编码):在国外,位置信息地址描述相对比较精确,例如:XX市XX街道XX号。但在中国,由于一些生活习惯的特点和差异,用户一般不会准确描述位置信息地址,而是选择通过以下描述来定位位置:XX路口。具体场
景如: “我在XX路口等你“ 或 ”我们在XX大厦旁边见面“。根据此特点,我们进行了本地化设计,因此高德地理编码与逆地理编码API满足了此类需求。
5.Poi搜索: 通过高德Poi搜索API,简单的几条语句,即可进行POI搜索,并且将结果标注在地图上。这大大简化了程序开发人员的工作。另一方面,高德的地理搜索引擎支持语义级别的POI搜索。具体场景: 假设有一个应用想在当前地图上标注所有饭馆,如果使用通用的搜索,如何设置搜索关键字呢?“饭馆”,“饭馆+餐厅”,“吃饭”?似乎没有非常合理的方案。而高德的地理搜索引擎除传统的全文搜索外,同时提供类别搜索。开发人员可自行组合高德POI类别,实现在AutoNavi MAP API 的基础上创造出自有应用程序更强大的应用。
在AutoNavi中未支持的Google Map API
类名
方法
注释
MapView
void computeScroll()
不支持
boolean isSatellite()
不支持卫星图
boolean isStreetView()
不支持街景图
boolean isTraffic()
不支持交通图
android.view.View getZoomControls()
Deprecated; Google已声明不支持使用该方法
void preLoad()
调用无效
void setSatellite(boolean on) 
不支持卫星图
void setStreetView(boolean on)
不支持街景图
void setTraffic(boolean on)   
不支持交通图
MapView.LayoutParams
java.lang.String debug(java.lang.String output)
不支持
MapActivity
protected boolean isLocationDisplayed()
Google内部统计函数,不支持
protected abstract boolean isRouteDisplayed()
 
Overlay.Snappable
boolean onSnapToItem(int x, int y, aphics.Point snapPoint, MapView mapView)
不支持
ItemizedOverlay
boolean onSnapToItem(int x, int y, aphics.Point snapPoint, MapView mapView)
不支持
3d卫星街景地图MyLocationOverlay
boolean onSnapToItem(int x, int y, aphics.Point snapPoint, MapView mapView)
不支持
TrackballGestureDetector
 
手势探测,此类中全部函数不支持
如何使用 AutoNavi MAP API
在这一节里我们会通过例子来展示如何创建一个使用AutoNavi API的应用并加以详细说明。AutoNavi MAP API 允许用户在自己的应用中加入地图功能,给地图添加各种标注、折线等,同时可以进行地图相关操作、显示信息提示窗口等功能。通过本教程使用户可以创建一个MapActivity的子类,将MapView显示于其上,并可以用MapController来控制显示的坐标、视野高度。处理起来非常简单。
注意事项
下面介绍在程序开发中要注意的一些问题:
首先是必须要申请一个Map Api Key, 具体方法可参考这里code.autonavi/android/faq
其次,是一定要在l中设置相应的权限,比如:
view sourceprint?
1.<uses-permission android:name="android.permission.INTERNET" />
2.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如何创建MapView
MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例。 可以通过MapView constructor (then add it to a layout View with ViewGroup.addView(View)) 或者通过layout XML来创建。
MapViewDemo.java
view sourceprint?
01.import android.os.Bundle;
02.import com.autonavi.mapapi.GeoPoint;
03.import com.autonavi.mapapi.MapActivity;
04.import com.autonavi.mapapi.MapController;
05.import com.autonavi.mapapi.MapView;
06.   
07.public class MapViewDemo extends MapActivity {
08.    MapView mMapView;
09.    MapController mMapController;
10.    GeoPoint point;
11.    @Override
12.    /**
13.    *显示地图,启用内置缩放控件,并用MapController控制地图的中心点及Zoom级别
14.    */
15.    protectedvoidonCreate(Bundle savedInstanceState) {
16.        // TODO Auto-generated method stub
17.        super.onCreate(savedInstanceState);
18.        setContentView(R.layout.mapviewdemo);
19.        mMapView = (MapView) findViewById(R.id.atmapsView);
20.        mMapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件
21.        mMapController = Controller(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放