Android Map 开发之高德地图

android Map 开发之google Map 可参考文档     Android Google Map API V2 开发入门.doc (360.5 KB, 下载次数: 10)

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

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

20130506142727339.jpg

MapApi.jar  MapApi.jar (740.23 KB, 下载次数: 6)

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

在manifest 中设置相应的权限

下面介绍在程序开发中需注意的问题:必须在AndroidManifest.xml 中设置相应的权限,添加代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<uses-permission
android:name= "android.permission.ACCESS_COARSE_LOCATION" ></uses-permission>
<uses-permission 
android:name= "android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission 
android:name= "android.permission.INTERNET" ></uses-permission>
<uses-permission 
android:name= "android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
<uses-permission 
android:name= "android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
<uses-permission 
android:name= "android.permission.READ_PHONE_STATE" ></uses-permission>
<uses-permission 
android:name= "android.permission.CHANGE_WIFI_STATE" ></uses-permission>
<uses-permission 
android:name= "android.permission.ACCESS_WIFI_STATE" ></uses-permission>

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

栅格地图显示

MapActivity是一个抽象类,任何想要显示MapView 的activity 都需要派生自MapActivity。并且在其派生类的onCreate() 中,都要创建一个MapView 实例。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
public class GridMapView extends MapActivity{
private MapView mMapView;
private MapController mMapController;
private GeoPoint point;
@Override
/**
*显示栅格地图,启用内置缩放控件,并用MapController 控制地图的中心点及Zoom 级别
*/
protected void onCreate(Bundle  savedInstanceState) {
// TODO Auto-generated method stub
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 = new GeoPoint(( int ) ( 39.982378 *  1E6),
( int ) ( 116.304923 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度(度* 1E6)
mMapController.setCenter(point);  //设置地图中心点
mMapController.setZoom( 12 );    //设置地图zoom 级别
}
}

在布局文件夹 res/layout/mapview.xml 文件中添加地图控件代码如下:
01
02
03
04
05
06
07
08
09
10
<?xml version= "1.0" encoding= "utf-8" ?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"                                
android:orientation= "vertical" android:layout_width= "fill_parent"
android:layout_height= "fill_parent" >
<com.amap.mapapi.map.MapView android:id= "@+id/mapView"
android:layout_width= "fill_parent" android:layout_height= "fill_parent"
android:clickable= "true"  
/>
</LinearLayout>


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

20130506143109712.jpg


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

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

矢量地图显示

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

20130506143221471.jpg

图3-2 工程目录结构图

代码如下:


01
02
03
04
05
06
07
08
09
10
11
12
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
                 setContentView(R.layout.vmapview);
                 mMapView = (MapView) findViewById(R.id.vmapView);
                 mMapView.setVectorMap( true ); //设置地图为矢量模式
                 mMapView.setBuiltInZoomControls( true );  //设置启用内置的缩放控件
                 mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
                 point = new GeoPoint(( int ) ( 39.90923 * 1E6),
                                 ( int ) ( 116.397428 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
                 mMapController.setCenter(point);  //设置地图中心点
                 mMapController.setZoom( 12 );    //设置地图zoom级别               
}

结果见图3-3

20130506143354686.jpg 

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

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

地图覆盖物

概述

所有叠加或覆盖到地图的内容,统称为地图覆盖物。如标注、矢量图形元素((包括:折线和多边形和圆))、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
高德地图Android API 提供了如下几种覆盖物:
Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。
MyLocationOverlay:一个负责显示用户当前位置的Overlay。
ItemizedOverlay:Overlay 的一个基类,包含了一个OverlayItem 列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。
PoiOverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“天安门”,通过此图层将包含“天安门”关键字的标注显示在地图上。
RouteOverlay:公交,驾车导航线路图层,将公交、驾车出行方案的路线及关键点显示在地图上。

覆盖物的抽象基类(Overlay)

一般来说,在MapView 中添加一个Overlay 需要经过以下步骤:
自定义类继承Overlay,并Override 其draw()方法可以实现点,线,面等的显示,如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。
添加到MapView 的覆盖物中:


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
publicclass MyOverlay extends Overlay{
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
  // TODO Auto-generated method stub
  super .draw(canvas, mapView, shadow);
Point screenPts = new Point();
mapView.getProjection().toPixels(point, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(
getResources(), R.drawable.da_marker_red);           
canvas.drawBitmap(bmp, screenPts.x, screenPts.y- 50 , null ); 
Paint paintText = new Paint();
paintText.setTextSize( 18 );
paintText.setColor(Color.BLACK);
canvas.drawText( "★AMap" , screenPts.x, screenPts.y, paintText); // 绘制文本
Paint mCirclePaint = new Paint();
mCirclePaint.setAntiAlias( true );
mCirclePaint.setColor(Color.BLUE);
mCirclePaint.setAlpha( 50 );
mCirclePaint.setStyle(Style.FILL);
canvas.drawCircle(screenPts.x+ 150 , screenPts.y, 50 , mCirclePaint);
Paint paintLine = new Paint();
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
public boolean onTap(GeoPoint arg0, MapView arg1) {
// TODO Auto-generated method stub
return super .onTap(arg0, arg1);
}
}

添加到MapView 的覆盖物中:
1
mMapView.getOverlays().add( new MyOverlay());

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

20130506143650890.jpg


当前位置(MyLocationOverlay)

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


1
2
3
4
MyLocationOverlay mylocTest = new MyLocationOverlay(MylocationDemo. this , map);
mylocTest.enableMyLocation();
mylocTest.enableCompass(); // 打开指南针
map.getOverlays().add(mylocTest);

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

20130506143903871.jpg


图6-2 当前位置效果图

分条目覆盖物(ItemizedOverlay)

某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类:
自定义类继承ItemizedOverlay,并Override其draw() 方法,如果需要点击、按键、触摸等交互操作,还需OverrideonTap() 等方法。


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class OverItemT extends ItemizedOverlay<overlayitem> {
private List<overlayitem> GeoList = new ArrayList<overlayitem>();
private Drawable marker;
private Context mContext;
private double mLat1 = 39.9022 ; // point1 纬度
private double mLon1 = 116.3922 ; // point1 经度
private double mLat2 = 39.607723 ;
private double mLon2 = 116.397741 ;
private double mLat3 = 39.917723 ;
private double mLon3 = 116.6552 ;
public OverItemT(Drawable marker, Context context) {
super (boundCenterBottom(marker));
this .marker = marker;
this .mContext = context;
// 用给定的经纬度构造GeoPoint,单位是微度(度* 1E6)
GeoPoint p1 = new GeoPoint(( int ) (mLat1 * 1E6), ( int ) (mLon1 * 1E6));
GeoPoint p2 = new GeoPoint(( int ) (mLat2 * 1E6), ( int ) (mLon2 * 1E6));
GeoPoint p3 = new GeoPoint(( int ) (mLat3 * 1E6), ( int ) (mLon3 * 1E6));
// 构造OverlayItem 的三个参数依次为:item 的位置,标题文本,文字片段
GeoList.add( new OverlayItem(p1, "P1" , "point1" ));
GeoList.add( new OverlayItem(p2, "P2" , "point2" ));
GeoList.add( new OverlayItem(p3, "P3" , "point3" ));
populate();  //createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// Projection 接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换
Projection projection = mapView.getProjection();
for ( int index = size() - 1 ; index >= 0 ; index--) { // 遍历GeoList
OverlayItem overLayItem = getItem(index); // 得到给定索引的item
String title= overLayItem.getTitle();
// 把经纬度变换到相对于MapView 左上角的屏幕像素坐标
Point point = projection.toPixels(overLayItem.getPoint(), null );
  // 可在此处添加您的绘制代码
Paint paintText = new Paint();
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
protected OverlayItem createItem( int i) {
  // TODO Auto-generated method stub
return GeoList.get(i);
}
@Override
public int size() {
  // TODO Auto-generated method stub
return GeoList.size();
  }
  @Override
// 处理当点击事件
  protected boolean onTap( int i) {
  setFocus(GeoList.get(i));
Toast.makeText( this .mContext, GeoList.get(i).getSnippet(),
Toast.LENGTH_SHORT).show();
return true ;
}
@Override
public boolean onTap(GeoPoint point, MapView mapView) {
// TODO Auto-generated method stub
return super .onTap(point, mapView);
  }
}

添加到MapView 的覆盖物中:
1
2
3
4
Drawable marker = getResources().getDrawable(R.drawable.da_marker_red);  //得到需要标在地图上的资源
marker.setBounds( 0 , 0 , marker.getIntrinsicWidth(), marker
.getIntrinsicHeight());   //为maker 定义位置和边界
  mMapView.getOverlays().add( new OverItemT(marker, this )); //添加ItemizedOverlay 实例到mMapView

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

20130506144233616.jpg 

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

本地搜索覆盖物(PoiOverlay)

请参见PoiSearch 及PoiOverlay 的类参考。

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

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

参考资料:http://api.amap.com/Android/Hello_World      MapApi.jar  


 版权所有 违者必究 !http://blog.csdn.net/yaohucaizi/article/details/8890376
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值