使用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 MAP API因为商业上的原因,联想不能在中国市场发布的手机上预装Google相关的手机服务,包括Google地图API。
为了解决这一问题,我们和高德公司(AutoNavi)合作,在手机上预置了AutoNavi提供的多种基于位置的服务。
高德公司作为中国领先的导航电子地图内容和位置服务解决方案提供商,旗下的互联网MAP API()同样在业界具有良好的口碑。
可为客户提供跨平台、跨媒体的位置服务解决方案。
我们同时鼓励中国的开发者们,使用AutoNavi MAP API开发基于位置和地图应用程序,并且发布在中国市场中的联想手机上。
AutoNavi MAP API 概述AutoNavi MAP API是高德软件公司提供的调用地图的接口方法。
用户的应用程序可以通过AutoNavi MAP API提供的接口方法操作地图数据,实现位置相关或地图相关应用。
例如,通过调用AutoNavi MAP API,将地图数据整合到自己的应用中,可以将商户的地理位置信息在地图上进行标注,以很直观的形式展现给使用者。
AutoNavi MAP API还将添加自驾,公交及步行的线路规划API。
同时,还将加入对矢量地图的支持,大幅提高地图下载的速度。
在不久的将来,还会加入3D街区图和其他的个性化地理数据支持。
要创建一个地图,需要在一个页面布局中扩展MapActivity及实现MapView类。
您必须设置"android:apiKey"才能在您的应用中使用MapView获取地图数据。
在模拟器环境中,您可以通过申请调试API 秘钥,进行程序开发。
但在发布时,您必须申请签名证书的API秘钥,并替换MapView中的调试API秘钥。
AutoNavi MAP API 的详细内容可参考/。
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 MAPAPI增加了本地缓存功能,此功能有助于提高速度,且减少最终用户资费。
3. Cell ID定位(手机基站定位):根据手机的当前连接基站,确定位置。
此功能使用Android LocationManager机制,可以与现有的定位机制无缝集成。
当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 MAP API在这一节里我们会通过例子来展示如何创建一个使用AutoNavi API的应用并加以详细说明。
AutoNavi MAP API 允许用户在自己的应用中加入地图功能,给地图添加各种标注、折线等,同时可以进行地图相关操作、显示信息提示窗口等功能。
通过本教程使用户可以创建一个MapActivity的子类,将MapView显示于其上,并可以用MapController来控制显示的坐标、视野高度。
处理起来非常简单。
注意事项下面介绍在程序开发中要注意的一些问题:首先是必须要申请一个Map Api Key, 具体方法可参考这里/android/faq其次,是一定要在manifest.xml中设置相应的权限,比如:view sourceprint?1.<uses-permission android:name="android.permission.INTERNET"/>2.<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>3.<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>如何创建MapViewMapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。
并且在其派生类的onCreate()中,都要创建一个MapView实例。
可以通过MapView constructor (then add it to a layout View with ViewGroup.addView(View)) 或者通过layout XML来创建。
MapViewDemo.javaview 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. @Override12. /**13. *显示地图,启用内置缩放控件,并用MapController控制地图的中心点及Zoom级别14. */15. protectedvoidonCreate(Bundle savedInstanceState) {16. // TODO Auto-generated method stub17. super.onCreate(savedInstanceState);18. setContentView(yout.mapviewdemo);19. mMapView = (MapView) findViewById(R.id.atmapsView);20. mMapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件21. mMapController = mMapView.getController(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放22. point = newGeoPoint((int) (39.90923* 1E6),23. (int) (116.397428* 1E6)); //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)24. mMapController.setCenter(point); //设置地图中心点25. mMapController.setZoom(12); //设置地图zoom级别26. }27.}Mapviewdemo.xmlview sourceprint?01.<?xmlversion="1.0"encoding="utf-8"?>02.03.<LinearLayoutxmlns:android="/apk/res/and roid"04. xmlns:autonavi="/apk/res/com.map apidemo.invokejar"05. android:orientation="vertical"android:layout_width="fill_p arent"06. android:layout_height="fill_parent">07. <com.autonavi.mapapi.MapViewandroid:id="@+id/atmapsView"08. android:layout_width="fill_parent"android:layout_h eight="fill_parent"09. android:clickable="true"10. android:apiKey="????????"11. autonavi:userAgent="androidh"/>12.</LinearLayout>13.<!-- 这里需要将api key中的????????????改成你自己申请到的api key. -->图1:MapView显示地图如何创建ItemizedOverlayItemizedOverlay是Overlay的一个基类,它包含了一个OverlayItems列表。