Android Map 开发之高德地图.docx

上传人:b****1 文档编号:1272695 上传时间:2023-04-30 格式:DOCX 页数:14 大小:773.40KB
下载 相关 举报
Android Map 开发之高德地图.docx_第1页
第1页 / 共14页
Android Map 开发之高德地图.docx_第2页
第2页 / 共14页
Android Map 开发之高德地图.docx_第3页
第3页 / 共14页
Android Map 开发之高德地图.docx_第4页
第4页 / 共14页
Android Map 开发之高德地图.docx_第5页
第5页 / 共14页
Android Map 开发之高德地图.docx_第6页
第6页 / 共14页
Android Map 开发之高德地图.docx_第7页
第7页 / 共14页
Android Map 开发之高德地图.docx_第8页
第8页 / 共14页
Android Map 开发之高德地图.docx_第9页
第9页 / 共14页
Android Map 开发之高德地图.docx_第10页
第10页 / 共14页
Android Map 开发之高德地图.docx_第11页
第11页 / 共14页
Android Map 开发之高德地图.docx_第12页
第12页 / 共14页
Android Map 开发之高德地图.docx_第13页
第13页 / 共14页
Android Map 开发之高德地图.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Android Map 开发之高德地图.docx

《Android Map 开发之高德地图.docx》由会员分享,可在线阅读,更多相关《Android Map 开发之高德地图.docx(14页珍藏版)》请在冰点文库上搜索。

Android Map 开发之高德地图.docx

AndroidMap开发之高德地图

AndroidMap开发之高德地图

如何把API添加到我的Android工程中?

创建工程,将从网站下载的AMap_Android_Api_Lib文件中的MapApi.jar包拷贝到Libs文件夹下,Libs下的文件目录如下所示:

当MapApi.jar在Libs文件夹中后,就表示将高德地图AndroidAPI库文件引入工程中了,您就可以在您的程序中使用高德地图API了。

在manifest中设置相应的权限

下面介绍在程序开发中需注意的问题:

必须在AndroidManifest.xml中设置相应的权限,添加代码如下:

android:

name="android.permission.ACCESS_COARSE_LOCATION">

android:

name="android.permission.ACCESS_FINE_LOCATION">

android:

name="android.permission.INTERNET">

android:

name="android.permission.ACCESS_NETWORK_STATE">

android:

name="android.permission.WRITE_EXTERNAL_STORAGE">

android:

name="android.permission.READ_PHONE_STATE">

android:

name="android.permission.CHANGE_WIFI_STATE">

android:

name="android.permission.ACCESS_WIFI_STATE">

注意此添加权限代码与同级。

栅格地图显示

MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。

并且在其派生类的onCreate()中,都要创建一个MapView实例。

publicclassGridMapViewextendsMapActivity{

privateMapViewmMapView;

privateMapControllermMapController;

privateGeoPointpoint;

@Override

/**

*显示栅格地图,启用内置缩放控件,并用MapController控制地图的中心点及Zoom级别

*/

protectedvoidonCreate(BundlesavedInstanceState){

//TODOAuto-generatedmethodstub

super.onCreate(savedInstanceState);

setContentView(R.layout.mapview);//布局文件夹res/layout/mapview.xml文件。

mMapView=(MapView)findViewById(R.id.mapView);

mMapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件

mMapController=mMapView.getController(); //得到mMapView的控制权,可以用它控制和驱动平移和缩放

point=newGeoPoint((int)(39.982378*1E6),

(int)(116.304923*1E6)); //用给定的经纬度构造一个GeoPoint,单位是微度(度*1E6)

mMapController.setCenter(point); //设置地图中心点

mMapController.setZoom(12);   //设置地图zoom级别

}

}

在布局文件夹res/layout/mapview.xml文件中添加地图控件代码如下:

xmlversion="1.0"encoding="utf-8"?

>

android="

xmlns:

autonavi="

android:

orientation="vertical"android:

layout_width="fill_parent"

android:

layout_height="fill_parent">

id="@+id/mapView"

android:

layout_width="fill_parent"android:

layout_height="fill_parent"

android:

clickable="true"

/>

结果见图3-1栅格地图显示效果图:

图3-1栅格地图显示效果图

具体示例请查看参考示例MapView中的GridMapView。

矢量地图显示

将libminimapv320.so复制到工程目录下的libs\armeabi,目录结构见图3-2工程目录结构图:

图3-2工程目录结构图

代码如下:

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.vmapview);

mMapView=(MapView)findViewById(R.id.vmapView);

mMapView.setVectorMap(true);//设置地图为矢量模式

mMapView.setBuiltInZoomControls(true);//设置启用内置的缩放控件

mMapController=mMapView.getController();//得到mMapView的控制权,可以用它控制和驱动平移和缩放

point=newGeoPoint((int)(39.90923*1E6),

(int)(116.397428*1E6));//用给定的经纬度构造一个GeoPoint,单位是微度(度*1E6)

mMapController.setCenter(point);//设置地图中心点

mMapController.setZoom(12);//设置地图zoom级别

}

结果见图3-3

图3-3矢量地图显示效果图

具体示例请查看参考示例MapView中的VectorMapView。

地图覆盖物

概述

所有叠加或覆盖到地图的内容,统称为地图覆盖物。

如标注、矢量图形元素((包括:

折线和多边形和圆))、定位图标等。

覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

高德地图AndroidAPI提供了如下几种覆盖物:

Overlay:

覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。

MyLocationOverlay:

一个负责显示用户当前位置的Overlay。

ItemizedOverlay:

Overlay的一个基类,包含了一个OverlayItem列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。

PoiOverlay:

本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“天安门”,通过此图层将包含“天安门”关键字的标注显示在地图上。

RouteOverlay:

公交,驾车导航线路图层,将公交、驾车出行方案的路线及关键点显示在地图上。

覆盖物的抽象基类(Overlay)

一般来说,在MapView中添加一个Overlay需要经过以下步骤:

自定义类继承Overlay,并Override其draw()方法可以实现点,线,面等的显示,如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。

添加到MapView的覆盖物中:

publicclassMyOverlayextendsOverlay{

@Override

publicvoiddraw(Canvascanvas,MapViewmapView,booleanshadow){

//TODOAuto-generatedmethodstub

super.draw(canvas,mapView,shadow);

PointscreenPts=newPoint();

mapView.getProjection().toPixels(point,screenPts);

//---addthemarker---

Bitmapbmp=BitmapFactory.decodeResource(

getResources(),R.drawable.da_marker_red);

canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null);

PaintpaintText=newPaint();

paintText.setTextSize(18);

paintText.setColor(Color.BLACK);

canvas.drawText("★AMap",screenPts.x,screenPts.y,paintText);//绘制文本

PaintmCirclePaint=newPaint();

mCirclePaint.setAntiAlias(true);

mCirclePaint.setColor(Color.BLUE);

mCirclePaint.setAlpha(50);

mCirclePaint.setStyle(Style.FILL);

canvas.drawCircle(screenPts.x+150,screenPts.y,50,mCirclePaint);

PaintpaintLine=newPaint();

paintLine.setColor(Color.RED);

paintLine.setStrokeWidth(3.0f);

paintLine.setStyle(Paint.Style.STROKE);

canvas.drawLine(screenPts.x-100,screenPts.y,screenPts.x,screenPts.y-200,paintLine);

}

@Override

publicbooleanonTap(GeoPointarg0,MapViewarg1){

//TODOAuto-generatedmethodstub

returnsuper.onTap(arg0,arg1);

}

}

添加到MapView的覆盖物中:

mMapView.getOverlays().add(newMyOverlay());

运行结果见图6-1覆盖物效果图:

当前位置(MyLocationOverlay)

将MyLocationOverlay添加到覆盖物中,能够实现在地图上显示当前位置的图标以及指南针:

MyLocationOverlaymylocTest=newMyLocationOverlay(MylocationDemo.this,map);

mylocTest.enableMyLocation();

mylocTest.enableCompass();//打开指南针

map.getOverlays().add(mylocTest);

运行结果见图6-2当前位置效果图:

图6-2当前位置效果图

分条目覆盖物(ItemizedOverlay)

某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类:

自定义类继承ItemizedOverlay,并Override其draw()方法,如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。

classOverItemTextendsItemizedOverlay{

privateListGeoList=newArrayList();

privateDrawablemarker;

privateContextmContext;

privatedoublemLat1=39.9022;//point1纬度

privatedoublemLon1=116.3922;//point1经度

privatedoublemLat2=39.607723;

privatedoublemLon2=116.397741;

privatedoublemLat3=39.917723;

privatedoublemLon3=116.6552;

publicOverItemT(Drawablemarker,Contextcontext){

super(boundCenterBottom(marker));

this.marker=marker;

this.mContext=context;

//用给定的经纬度构造GeoPoint,单位是微度(度*1E6)

GeoPointp1=newGeoPoint((int)(mLat1*1E6),(int)(mLon1*1E6));

GeoPointp2=newGeoPoint((int)(mLat2*1E6),(int)(mLon2*1E6));

GeoPointp3=newGeoPoint((int)(mLat3*1E6),(int)(mLon3*1E6));

//构造OverlayItem的三个参数依次为:

item的位置,标题文本,文字片段

GeoList.add(newOverlayItem(p1,"P1","point1"));

GeoList.add(newOverlayItem(p2,"P2","point2"));

GeoList.add(newOverlayItem(p3,"P3","point3"));

populate();//createItem(int)方法构造item。

一旦有了数据,在调用其它方法前,首先调用这个方法

}

@Override

publicvoiddraw(Canvascanvas,MapViewmapView,booleanshadow){

//Projection接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换

Projectionprojection=mapView.getProjection();

for(intindex=size()-1;index>=0;index--){//遍历GeoList

OverlayItemoverLayItem=getItem(index);//得到给定索引的item

Stringtitle=overLayItem.getTitle();

//把经纬度变换到相对于MapView左上角的屏幕像素坐标

Pointpoint=projection.toPixels(overLayItem.getPoint(),null);

//可在此处添加您的绘制代码

PaintpaintText=newPaint();

paintText.setColor(Color.BLACK);

paintText.setTextSize(15);

canvas.drawText(title,point.x-30,point.y-25,paintText);//绘制文本

}

super.draw(canvas,mapView,shadow);

//调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素

boundCenterBottom(marker);

}

@Override

protectedOverlayItemcreateItem(inti){

//TODOAuto-generatedmethodstub

returnGeoList.get(i);

}

@Override

publicintsize(){

//TODOAuto-generatedmethodstub

returnGeoList.size();

}

@Override

//处理当点击事件

protectedbooleanonTap(inti){

setFocus(GeoList.get(i));

Toast.makeText(this.mContext,GeoList.get(i).getSnippet(),

Toast.LENGTH_SHORT).show();

returntrue;

}

@Override

publicbooleanonTap(GeoPointpoint,MapViewmapView){

//TODOAuto-generatedmethodstub

returnsuper.onTap(point,mapView);

}

}

添加到MapView的覆盖物中:

Drawablemarker=getResources().getDrawable(R.drawable.da_marker_red);//得到需要标在地图上的资源

marker.setBounds(0,0,marker.getIntrinsicWidth(),marker

.getIntrinsicHeight());//为maker定义位置和边界

mMapView.getOverlays().add(newOverItemT(marker,this));//添加ItemizedOverlay实例到mMapView

点击其中一个图标,运行结果见图6-3分条目覆盖效果图:

图6-3分条目覆盖效果图

本地搜索覆盖物(PoiOverlay)

请参见PoiSearch及PoiOverlay的类参考。

驾车、公交路线覆盖物(RouteOverlay)

请参见驾车路线搜索及RouteOverlay和公交路线搜索及RouteOverlay的类参考。

参考资料:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2