高德android api 开发指南文档格式.docx
《高德android api 开发指南文档格式.docx》由会员分享,可在线阅读,更多相关《高德android api 开发指南文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
7<
8android:
android.permission.ACCESS_NETWORK_STATE"
9<
10android:
android.permission.WRITE_EXTERNAL_STORAGE"
11<
12android:
android.permission.READ_PHONE_STATE"
13<
14android:
android.permission.CHANGE_WIFI_STATE"
15<
16android:
android.permission.ACCESS_WIFI_STATE"
地图显示
如何把API添加到我的Android工程中?
首先创建工程,并在工程BuildPath>
ConfigureBuildPath…>
libraries中选择“AddExternelJARs…”,选定MapApi.jar,点击OK,这样就可以将高德地图AndroidAPI库文件引入。
然后在工程BuildPath>
OrderandExport中将引入的库文件MapApi.jar选中,点击OK,这样您就可以在您的程序中使用高德地图API了。
栅格地图显示
MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。
并且在其派生类的onCreate()中,都要创建一个MapView实例。
17publicclassGridMapViewextendsMapActivity{
18privateMapViewmMapView;
19privateMapControllermMapController;
20privateGeoPointpoint;
21@Override
22/**
23*显示栅格地图,启用内置缩放控件,并用MapController控制地图的中心点及Zoom级别
24*/
25protectedvoidonCreate(BundlesavedInstanceState){
26//TODOAuto-generatedmethodstub
27super.onCreate(savedInstanceState);
28setContentView(R.layout.mapview);
29mMapView=(MapView)findViewById(R.id.mapView);
30mMapView.setBuiltInZoomControls(true);
//设置启用内置的缩放控件
31mMapController=mMapView.getController();
//得到mMapView的控制权,可以用它控制和驱动平移和缩放
32point=newGeoPoint((int)(39.982378*1E6),
33(int)(116.304923*1E6));
//用给定的经纬度构造一个GeoPoint,单位是微度(度*1E6)
34mMapController.setCenter(point);
//设置地图中心点
35mMapController.setZoom(12);
//设置地图zoom级别
36}
37}
在布局xml中添加地图控件:
38<
?
xmlversion="
1.0"
encoding="
utf-8"
39<
LinearLayoutxmlns:
android="
40xmlns:
autonavi="
41android:
orientation="
vertical"
android:
layout_width="
fill_parent"
42android:
layout_height="
43<
com.amap.mapapi.map.MapViewandroid:
id="
@+id/mapView"
44android:
45android:
clickable="
true"
46/>
47<
/LinearLayout>
结果见图3-1栅格地图显示效果图:
图3-1栅格地图显示效果图
矢量地图显示
将libminimapv320.so复制到工程目录下的libs\armeabi,目录结构见图3-2工程目录结构图:
图3-2工程目录结构图
代码如下:
48publicclassVectorMapViewextendsMapActivity{
49privateMapViewmMapView;
50privateMapControllermMapController;
51privateGeoPointpoint;
52@Override
53/**
54*显示矢量地图,将libminimapv300.so复制到工程目录下的libs\armeabi。
55*启用内置缩放控件,并用MapController控制地图的中心点及Zoom级别
56*/
57protectedvoidonCreate(BundlesavedInstanceState){
58//TODOAuto-generatedmethodstub
59this.setMapMode(MAP_MODE_VECTOR);
//设置地图为矢量模式
60super.onCreate(savedInstanceState);
61setContentView(R.layout.mapview);
62mMapView=(MapView)findViewById(R.id.mapView);
63mMapView.setBuiltInZoomControls(true);
64mMapController=mMapView.getController();
65point=newGeoPoint((int)(39.90923*1E6),
66(int)(116.397428*1E6));
67mMapController.setCenter(point);
68mMapController.setZoom(12);
69}
70}
结果见图3-3矢量地图显示效果图:
图3-3矢量地图显示效果图
定位信息
API如何获取定位信息
高德地图AndroidAPI中提供了GPS和网络(基站和WiFi)定位。
如果使用此功能,必须注册GPS和网络的使用权限,请参考注意事项。
在获取用户位置时,优先使用GPS进行定位;
如果GPS定位没有打开或者没有可用位置信息,则判断是否通过网络(基站和WiFi)连接,如果是,高德地图会根据手机所在环境选择WiFi或者基站获取用户当前位置。
71publicclassLocationManagerextendsActivity{
72privateLocationManagerProxylocationManager=null;
73privatestaticfinallongmLocationUpdateMinTime=0;
74privatestaticfinalfloatmLocationUpdateMinDistance=0;
75privateTextViewmyLocation;
76/**Calledwhentheactivityisfirstcreated.*/
77@Override
78publicvoidonCreate(BundlesavedInstanceState){
79super.onCreate(savedInstanceState);
80setContentView(R.layout.location);
81myLocation=(TextView)findViewById(R.id.myLocation);
82locationManager=LocationManagerProxy.getInstance(this);
83}
84@Override
85protectedvoidonPause(){
86//TODOAuto-generatedmethodstub
87super.onPause();
88locationManager.removeUpdates(locationListener);
89}
90@Override
91protectedvoidonResume(){
92//TODOAuto-generatedmethodstub
93super.onResume();
94//获取当前可用的Provider,其中AMapNetwork为AMap网络定位(基站和WiFi)
95for(finalStringprovider:
locationManager.getProviders(true)){
96if(LocationManagerProxy.GPS_PROVIDER.equals(provider)||LocationProviderProxy.AMapNetwork.equals(provider)){
97locationManager.requestLocationUpdates(provider,mLocationUpdateMinTime,mLocationUpdateMinDistance,
98locationListener);
99}
100}
101}
102LocationListenerlocationListener=newLocationListener(){
103@Override
104publicvoidonLocationChanged(Locationlocation){
105//TODOAuto-generatedmethodstub
106if(location!
=null){
107DoublegeoLat=location.getLatitude();
108DoublegeoLng=location.getLongitude();
109myLocation.setText("
定位成功:
("
+geoLng+"
"
+geoLat+"
)"
);
110}
111}
112@Override
113publicvoidonProviderDisabled(Stringprovider){
114}
115@Override
116publicvoidonProviderEnabled(Stringprovider){
117}
118@Override
119publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){
120}
121};
122}
如何通过MyLocationOverlay实现自动定位
首先在程序中打开相关权限,然后将MyLocationOverlay实例添加到MapView中,并调用enableMyLocation()方法,即可实现当前位置的显示。
如果想让地图跟随当前位置移动,需要继承MyLocationOverlay并实现其onLocationChanged()方法,调用MapView.getController().animateTo()方法移动地图位置。
123MyLocationOverlaymylocTest=newMyLocationOverlay(MylocationDemo.this,map);
124mylocTest.enableMyLocation();
125mylocTest.enableCompass();
//打开指南针
126map.getOverlays().add(mylocTest);
结果见图4-1自动定位图:
图4-1自动定位图
地图图层
地图图层概念
地图可以包含一个或多个图层,每个图层在各个级别都是由若干张图块组成的,它们覆盖了地球的整个表面。
例如,用户所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层,另外,实时路况、轨道交通等的展现也是通过图层来实现的。
底图
基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、学校、公园等内容。
实时路况
高德地图提供北京,上海,广州,深圳,天津,重庆,沈阳,长春,石家庄,太原,西安,成都,武汉,南京,杭州,福州,青岛,大连,宁波,无锡,常州,厦门,东莞,珠海等24个城市的实时交通路况查询。
在地图中显示路况信息息示例如下:
127mMapView.setTraffic(true);
//显示实时路况
运行程序,结果见图5-1实时路况效果图:
地图覆盖物
概述
所有叠加或覆盖到地图的内容,统称为地图覆盖物。
如标注、矢量图形元素((包括:
折线和多边形和圆))、定位图标等。
覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
高德地图AndroidAPI提供了如下几种覆盖物:
Overlay:
覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。
MyLocationOverlay:
一个负责显示用户当前位置的Overlay。
ItemizedOverlay:
Overlay的一个基类,包含了一个OverlayItem列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。
PoiOverlay:
本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“天安门”,通过此图层将包含“天安门”关键字的标注显示在地图上。
RouteOverlay:
公交,驾车导航线路图层,将公交、驾车出行方案的路线及关键点显示在地图上。
覆盖物的抽象基类(Overlay)
一般来说,在MapView中添加一个Overlay需要经过以下步骤:
自定义类继承Overlay,并Override其draw()方法可以实现点,线,面等的显示,如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。
添加到MapView的覆盖物中:
128publicclassMyOverlayextendsOverlay{
129@Override
130publicvoiddraw(Canvascanvas,MapViewmapView,booleanshadow){
131//TODOAuto-generatedmethodstub
132super.draw(canvas,mapView,shadow);
133PointscreenPts=newPoint();
134mapView.getProjection().toPixels(point,screenPts);
135//---addthemarker---
136Bitmapbmp=BitmapFactory.decodeResource(
137getResources(),R.drawable.da_marker_red);
138canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null);
139PaintpaintText=newPaint();
140paintText.setTextSize(18);
141paintText.setColor(Color.BLACK);
142canvas.drawText("
★AMap"
screenPts.x,screenPts.y,paintText);
//绘制文本
143PaintmCirclePaint=newPaint();
144mCirclePaint.setAntiAlias(true);
145mCirclePaint.setColor(Color.BLUE);
146mCirclePaint.setAlpha(50);
147mCirclePaint.setStyle(Style.FILL);
148canvas.drawCircle(screenPts.x+150,screenPts.y,50,mCirclePaint);
149PaintpaintLine=newPaint();
150paintLine.setColor(Color.RED);
151paintLine.setStrokeWidth(3.0f);
152paintLine.setStyle(Paint.Style.STROKE);
153canvas.drawLine(screenPts.x-100,screenPts.y,screenPts.x,screenPts.y-200,paintLine);
154}
155@Override
156publicbooleanonTap(GeoPointarg0,MapViewarg1){
157//TODOAuto-generatedmethodstub
158returnsuper.onTap(arg0,arg1);
159}
160}
添加到MapView的覆盖物中:
161mMapView.getOverlays().add(newMyOverlay());
运行结果见图6-1覆盖物效果图:
当前位置(MyLocationOverlay)
将MyLocationOverlay添加到覆盖物中,能够实现在地图上显示当前位置的图标以及指南针:
162MyLocationOverlaymylocTest=newMyLocationOverlay(MylocationDemo.this,map);
163mylocTest.enableMyLocation();
164mylocTest.enableCompass();
//打开指南针
165map.getOverlays().add(mylocTest);
运行结果见图6-2当前位置效果图:
图6-2当前位置效果图
分条目覆盖物(ItemizedOverlay)
某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类:
自定义类继承ItemizedOverlay,并Override其draw()方法,如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。
166classOverItemTextendsItemizedOverlay<
overlayitem>
{
167privateList<
GeoList=newArrayList<
();
168privateDrawablemarker;
169privateContextmContext;
170privatedoublemLat1=39.9022;
//point1纬度
171privatedoublemLon1=116.3922;
//point1经度
1