高德地图API使用说明.docx
- 文档编号:8319739
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:13
- 大小:552.43KB
高德地图API使用说明.docx
《高德地图API使用说明.docx》由会员分享,可在线阅读,更多相关《高德地图API使用说明.docx(13页珍藏版)》请在冰豆网上搜索。
高德地图API使用说明
使用AutoNaviMAPAPI开发地图应用
•为什么要使用AutoNaviMAPAPI
•AutoNaviMAPAPI概述
•AutoNaviAndroidMAPAPI与GoogleAndroidMapAPI比较
•如何使用AutoNaviMAPAPI
如何实现坐标偏转
如何创建MapView
如何创建ItemizedOverlay
如何创建PoiSearch
如何创建Geocoder
如何创建MyLocation
•FAQ
•技术支持(QQ群:
122795260,邮箱:
mapservice@)
为什么要使用AutoNaviMAPAPI
因为商业上的原因,联想不能在中国市场发布的手机上预装Google相关的手机服务,包括Google地图API。
为了解决这一问题,我们和高德公司(AutoNavi)合作,在手机上预置了AutoNavi提供的多种基于位置的服务。
高德公司作为中国领先的导航电子地图内容和位置服务解决方案提供商,旗下的互联网MAPAPI()同样在业界具有良好的口碑。
可为客户提供跨平台、跨媒体的位置服务解决方案。
我们同时鼓励中国的开发者们,使用AutoNaviMAPAPI开发基于位置和地图应用程序,并且发布在中国市场中的联想手机上。
AutoNaviMAPAPI概述
AutoNaviMAPAPI是高德软件公司提供的调用地图的接口方法。
用户的应用程序可以通过AutoNaviMAPAPI提供的接口方法操作地图数据,实现位置相关或地图相关应用。
例如,通过调用AutoNaviMAPAPI,将地图数据整合到自己的应用中,可以将商户的地理位置信息在地图上进行标注,以很直观的形式展现给使用者。
AutoNaviMAPAPI还将添加自驾,公交及步行的线路规划API。
同时,还将加入对矢量地图的支持,大幅提高地图下载的速度。
在不久的将来,还会加入3D街区图和其他的个性化地理数据支持。
要创建一个地图,需要在一个页面布局中扩展MapActivity及实现MapView类。
您必须设置"android:
apiKey"才能在您的应用中使用MapView获取地图数据。
在模拟器环境中,您可以通过申请调试API秘钥,进行程序开发。
但在发布时,您必须申请签名证书的API秘钥,并替换MapView中的调试API秘钥。
AutoNaviMAPAPI的详细内容可参考
AutoNaviAndroidMAPAPI与GoogleAndroidMapAPI比较
首先,AutoNaviAndroidMAPAPI与GoogleAndroidMapAPI是基本兼容的,只需替换Java包名和MapAPIKey,即可将GoogleAndroidMapAPI替换为AutoNaviAndroidMAPAPI。
在此基础之上,AutoNaviAndroidMAPAPI同时还提供了一些个性化的功能和服务,见下文介绍:
1.坐标偏转:
根据中国相关法律规律,GPS坐标首先需要经过偏转,否则此位置点将不能与电子地图匹配。
AntoNaviAndroidMAPAPI支持了坐标偏转功能,并且在类MyLocation中内置了此功能,因此位置点显示相比较为准确。
2.本地缓存:
位置相关应用的特点是用户的地图访问有一定的局部性。
因此,AutoNaviAndroidMAPAPI增加了本地缓存功能,此功能有助于提高速度,且减少最终用户资费。
3.CellID定位(手机基站定位):
根据手机的当前连接基站,确定位置。
此功能使用AndroidLocationManager机制,可以与现有的定位机制无缝集成。
当GPS无信号时,可实现使用CellID定位。
4.Geocodeing&ReverseGeocoding(地理编码与逆地理编码):
在国外,位置信息地址描述相对比较精确,例如:
XX市XX街道XX号。
但在中国,由于一些生活习惯的特点和差异,用户一般不会准确描述位置信息地址,而是选择通过以下描述来定位位置:
XX路口。
具体场景如:
“我在XX路口等你“或”我们在XX大厦旁边见面“。
根据此特点,我们进行了本地化设计,因此高德地理编码与逆地理编码API满足了此类需求。
5.Poi搜索:
通过高德Poi搜索API,简单的几条语句,即可进行POI搜索,并且将结果标注在地图上。
这大大简化了程序开发人员的工作。
另一方面,高德的地理搜索引擎支持语义级别的POI搜索。
具体场景:
假设有一个应用想在当前地图上标注所有饭馆,如果使用通用的搜索,如何设置搜索关键字呢?
“饭馆”,“饭馆+餐厅”,“吃饭”?
似乎没有非常合理的方案。
而高德的地理搜索引擎除传统的全文搜索外,同时提供类别搜索。
开发人员可自行组合高德POI类别,实现在AutoNaviMAPAPI的基础上创造出自有应用程序更强大的应用。
在AutoNavi中未支持的GoogleMapAPI
类名
方法
注释
MapView
voidcomputeScroll()
不支持
booleanisSatellite()
不支持卫星图
booleanisStreetView()
不支持街景图
booleanisTraffic()
不支持交通图
android.view.ViewgetZoomControls()
Deprecated;Google已声明不支持使用该方法
voidpreLoad()
调用无效
voidsetSatellite(booleanon)
不支持卫星图
voidsetStreetView(booleanon)
不支持街景图
voidsetTraffic(booleanon)
不支持交通图
MapView.LayoutParams
java.lang.Stringdebug(java.lang.Stringoutput)
不支持
MapActivity
protected booleanisLocationDisplayed()
Google内部统计函数,不支持
protectedabstract booleanisRouteDisplayed()
Overlay.Snappable
booleanonSnapToItem(intx,inty,android.graphics.PointsnapPoint,MapViewmapView)
不支持
ItemizedOverlay
booleanonSnapToItem(intx,inty,android.graphics.PointsnapPoint,MapViewmapView)
不支持
MyLocationOverlay
booleanonSnapToItem(intx,inty,android.graphics.PointsnapPoint,MapViewmapView)
不支持
TrackballGestureDetector
手势探测,此类中全部函数不支持
如何使用AutoNaviMAPAPI
在这一节里我们会通过例子来展示如何创建一个使用AutoNaviAPI的应用并加以详细说明。
AutoNaviMAPAPI允许用户在自己的应用中加入地图功能,给地图添加各种标注、折线等,同时可以进行地图相关操作、显示信息提示窗口等功能。
通过本教程使用户可以创建一个MapActivity的子类,将MapView显示于其上,并可以用MapController来控制显示的坐标、视野高度。
处理起来非常简单。
注意事项
下面介绍在程序开发中要注意的一些问题:
首先是必须要申请一个MapApiKey,具体方法可参考这里
其次,是一定要在manifest.xml中设置相应的权限,比如:
viewsourceprint?
1. name="android.permission.INTERNET"/> 2. name="android.permission.ACCESS_NETWORK_STATE"/> 3. name="android.permission.WRITE_EXTERNAL_STORAGE"/> 如何创建MapView MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。 并且在其派生类的onCreate()中,都要创建一个MapView实例。 可以通过MapViewconstructor(thenaddittoalayoutViewwithViewGroup.addView(View))或者通过layoutXML来创建。 MapViewDemo.java viewsourceprint? 01.importandroid.os.Bundle; 02.importcom.autonavi.mapapi.GeoPoint; 03.importcom.autonavi.mapapi.MapActivity; 04.importcom.autonavi.mapapi.MapController; 05.importcom.autonavi.mapapi.MapView; 06. 07.publicclassMapViewDemoextendsMapActivity{ 08. MapViewmMapView; 09. MapControllermMapController; 10. GeoPointpoint; 11. @Override 12. /** 13. *显示地图,启用内置缩放控件,并用MapController控制地图的中心点及Zoom级别 14. */ 15. protectedvoidonCreate(BundlesavedInstanceState){ 16. //TODOAuto-generatedmethodstub 17. super.onCreate(savedInstanceState); 18. setContentView(R.layout.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.xml viewsourceprint? 01. xmlversion="1.0"encoding="utf-8"? > 02. 03. android=" 04. xmlns: autonavi=" 05. android: orientation="vertical"android: layout_width="fill_parent" 06. android: layout_height="fill_parent"> 07. id="@+id/atmapsView" 08. android: layout_width="fill_parent"android: layout_height="fill_parent" 09. android: clickable="true" 10. android: apiKey="? ? ? ? ? ? ? ? " 11. autonavi: userAgent="androidh"/> 12. 13. --这里需要将apikey中的? ? ? ? ? ? ? ? ? ? ? ? 改成你自己申请到的apikey.--> 图1: MapView显示地图 如何创建ItemizedOverlay ItemizedOverlay是Overlay的一个基类,它包含了一个OverlayItems列表。 使用此类可以在地图上添加多个标记点,并且维护一个焦点选中的item,同时也负责把一个屏幕点击匹配到item上去,分发焦点改变事件给备选的监听器。 viewsourceprint? 1.Drawablemarker=getResources().getDrawable(R.drawable.poi_1);//得到需要标在地图上的资源 2.marker.setBounds(0,0,marker.getIntrinsicWidth(), 3. marker.getIntrinsicHeight()); //为maker定义位置和边界 4.mMapView.getOverlays().add(newOverItemT(marker,this));//添加ItemizedOverlay实例到mMapView viewsourceprint? 1.GeoList.add(newOverlayItem(p1,"P1","point1")); 2.GeoList.add(newOverlayItem(p2,"P2","point2")); 3.GeoList.add(newOverlayItem(p3,"P3","point3")); 4.populate();//createItem(int)方法构造item。 一旦有了数据,在调用其它方法前,首先调用这个方法 viewsourceprint? 1.Projectionprojection=mapView.getProjection(); 2.for(intindex=size()-1;index>=0;index--){//遍历GeoList 3. OverlayItemoverLayItem=getItem(index);//得到给定索引的item 4. Stringtitle=overLayItem.getTitle(); 5. //把经纬度变换到相对于MapView左上角的屏幕像素坐标 6. Pointpoint=projection.toPixels(overLayItem.getPoint(),null); viewsourceprint? 1. 2. android: id="@+id/itemizedoverlayview" 3. android: layout_width="fill_parent" 4. android: layout_height="fill_parent" 5. android: clickable="true" 6. android: apiKey="? ? ? ? "//? ? ? 处加入自己申请的Key 7. autonavi: userAgent="android" 8./> 图2: 显示标记点 如何创建PoiSearch viewsourceprint? 01.try{ 02.PoiSearchpoiSearch=newPoiSearch(POISearchDemo.this, 03. newPoiSearch.Query("苏州街",null));//设置搜索字符串 04.PoiPagedResultresult=poiSearch.searchPOI();//调用搜索POI方法 05. if(result.getPage (1).isEmpty()){ 06. Toast.makeText(getApplicationContext(),"没有找到! ", 07. Toast.LENGTH_SHORT).show(); 08. }else{ 09. PoiOverlaypoiOverlay=newPoiOverlay(null, 10. result.getPage (1));//将结果的第一页添加到PoiOverlay 11. mMapView.getOverlays().add(poiOverlay);//将poiOverlay标注在地图上 12. } 13.}catch(IOExceptione){ 14. Toast.makeText(getApplicationContext(),"网络连接错误! ", 15. Toast.LENGTH_SHORT).show(); 16.} viewsourceprint? 1. id="@+id/poisearchview" 2. android: layout_width="fill_parent"android: layout_height="fill_parent" 3. android: clickable="true" 4. android: apiKey="? ? ? ? "//? ? ? 处加入自己申请的Key 5./> 图3: 地址搜索结果 如何创建Geocoder viewsourceprint? 01.GeocodermGeocoder01=newGeocoder(GeocodingDemo.this); 02.intx=geo.getLatitudeE6();//得到geo纬度,单位微度(度*1E6) 03.doublex1=((double)x)/1000000; 04.inty=geo.getLongitudeE6();//得到geo经度,单位微度(度*1E6) 05.doubley1=((double)y)/1000000; 06.try{ 07. //将GPS数据偏转得到你逆理编码,参数分别为: 纬度,经度,最大结果集 08. List 09. if(! lstAddress.isEmpty()){ 10. //Toast输出geo编码得到的地名 11. for(inti=0;i 12. AddressadsLocation=lstAddress.get(i); 13. Toast.makeText(getApplicationContext(), 14. adsLocation.getFeatureName().toString(), 15. Toast.LENGTH_LONG).show(); 16. Log.i(TAG,"Addressfound="+adsLocation.toString()); 17. } 18. }else{ 19. Log.i(TAG,"AddressGeoPointNOTFound."); 20. } 21.} 22.catch(Exceptione){ 23. Toast.makeText(getApplicationContext(),"连接错误! ",Toast.LENGTH_SHORT).show(); 24.} viewsourceprint? 1. id="@+id/geocodingview" 2. android: layout_width="fill_parent"android: layout_height="fill_parent" 3. android: clickable="true" 4. android: apiKey="? ? ? ? "//? ? ? 处加入自己申请的Key 5./> 图4: 经纬度 如何创建MyLocation 绘制用户当前在地图上的位置(精准度),和/或一个嵌入的指南针。 子类能覆盖方法dispatchTap()去处理对当前位置的点击为了开启这个overlay的功能,需要去调用enableMyLocation()和/或enableCompass(),或调用Activity中的Activity.onResume()方法 关键代码 viewsourceprint? 01.mylocTest=newMyLocationOverlay(getApplicat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地图 API 使用说明