百度地图AndroidAPI

百度地图AndroidAPI

sf2gis@163.com

2014年1月2日

 

1  概述

百度地图安卓SDK是基于安卓的地图操作SDK,对于非盈利性质应用免费,商用收费。具有基本地图操作、定位、导航(需使用百度地图)、图层管理、POI、地图编码/逆地理编码、路线规划、云存储、离线地图、分享等功能。

参考:http://developer.baidu.com/map/sdk-android.htm

2 使用步骤

2.1 使用SDK之前需要申请Key

通过SDK的主页进入Key页面,按照说明生成Key。

1)  生成keystorefile

右键项目-》Android工具-》导出签名应用-》生成keystorefile。

2)  生成sha1

使用keytool命令生成sha1等安全码。

 keytool -list -v -keystore keystorefile-storepass 123456

3)  生成key

将sha1码和包名提交百度,生成key。

2.2 引入百度地图库

下载SDK,按照说明引用相关库。

2.3 显示地图

2.3.1 Manifest添加权限

2.3.2 Activity中添加MapView

<com.baidu.mapapi.map.MapView

    android:id=@+id/mapview

    android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

    android:clickable=”true”

/>

2.3.3 控制Activity

注意:所有的Activity状态响应,都要调用MapView的状态响应。

2.3.4 生成地图控件

在Activity的onCreate()中生成地图管理器,一定要在setContentView()之前初始化地图控件。

bMapManager = newBMapManager(getApplication());

2.3.4.1  验证Key

bMapManager.init(key,MKGeneralListener);

2.3.5 生成地图初图

bMapView = (MapView)findViewById(R.id.mapview);//获取MapView指针

bMapView.setBuiltInZoomControls(true);//使用内置缩放器

//设置视图

               MapController mapcontroller = bmapView.getController();

                GeoPointptCenter = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));

               mapcontroller.setCenter(ptCenter);//设置地图中心点

          mapcontroller.setZoom(12);//设置缩放级别

2.4 查询

百度地图查询使用MKSearch进行异步查询。查询结果在MKSearchListener处理。查询完成之后使用destroy释放。

2.4.1 POI查询

2.5 Overlay

指地图之上的所有图层。

增加/删除步骤:

1)  获取Overlay列表:mapview.getOverlays();

2)  修改列表。

3)  刷新显示:mapview.refresh();

2.5.1 GraphicsOverlay

用于绘制点、线、面等几何图形。

 

    public void showPolyline(String[] polyline)

    {

       //生成地理点数组

       GeoPoint[] pts = new GeoPoint[polyline.length];

       for(int i = 0; i < polyline.length; i++)

       {

           String strPt = polyline[i];

           String[] ptXY = strPt.split(",");

           double[] dPt = {Double.parseDouble(ptXY[0]),Double.parseDouble(ptXY[1])};

           GeoPoint pt = new GeoPoint((int)(dPt[0]*1E6),(int)(dPt[1]*1E6));

           pts[i] = pt;

       }

      

       //生成对象

       Geometry geoPolyline = new Geometry();

       geoPolyline.setPolyLine(pts);

       Symbol symbolLine = new Symbol();

       Symbol.Color colorLine = symbolLine.new Color(255,255,0,0);//AARRGGBBAA表示不透明度,如果是0表示全透明,255表示完全不透明

       symbolLine.setLineSymbol(colorLine, 5);

       Graphic graphicPolyline = new Graphic(geoPolyline, symbolLine);//一定要设置样式,如果使用null,将无法显示

       GraphicsOverlay overlayPolyline = new GraphicsOverlay(bmapView);

       overlayPolyline.setData(graphicPolyline);

      

       //overlay列表

       bmapView.getOverlays().add(overlayPolyline);

      

       //refresh

       bmapView.refresh();

}

2.5.2 MyLocationOverlay

 

2.6 导航

设置导航参数:起止点坐标、起止点名称。

打开百度导航:BaiduMapNavigation.openBaiduMapNavi。

    /**

     * 打开百度导航。

     * 注意:返回后要刷新MapView

     */

    public void showNavigation()

    {

       GeoPoint ptStart = new GeoPoint((int)(39.945*1E6),(int)(116.404*1E6));

       GeoPoint ptEnd = new GeoPoint((int)(0),(int)(0));

       NaviPara navipara = new NaviPara();

       navipara.startPoint = ptStart;

       //navipara.startName = "默认起点:天安门";

       navipara.endPoint = ptStart;

       //navipara.endName = "保福寺";

       try

       {

           BaiduMapNavigation.openBaiduMapNavi(navipara,this);       

       }

       catch(BaiduMapAppNotSupportNaviException e)

       {

           e.printStackTrace();       

       }

    }

2.7     定位

2.7.1 申请Key

与百度地图AndroidSDK 可以使用相同的key,申请方式相同(见2.1)。

2.7.2 导入库文件

将liblocSDK4.so复制到项目的libs/armeabi文件夹中。

在libs文件夹下加入jar文件。

在项目属性中java build path->library->add jars添加jar。

2.7.3 声明service组件

在AndroidManifest.xml中声明定位服务组件。

<service android:name=”com.baidu.location.f” android:enabled=”true” android:process=”:remote”/>

2.7.4 声明使用权限

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

<uses-permissionandroid:name="android.permission.READ_LOGS"></uses-permission>

 

3 相关类

3.1 BMapManager 

包:com.baidu.mapapi

功能:地图引擎管理器,用于验证Key,开启消息循环,释放资源。

方法:

BMapManager(context):使用应用程序构造。

init(key,MKGeneralListener):验证key,返回网络状态和验证信息。

start()/stop():开启/停止消息循环。

destroy():释放资源。

3.1.1 MKGeneralListener

包:com.baidu.mapapi

功能:检测网络状态。

方法:

onGetNetwWorkState():检测网络状态。

onGetPermissionState():检测授权状态。

3.2 MapView 

包:com.baidu.mapapi.map

功能:地图视图,在布局上设置地图视图,并在后台处理地图操作函数。

方法:

setBuiltInZoomControls():使用内置的缩放控制器。

onPause():隐藏时调用。

onResume():显示时调用。

destroy():释放资源。

getController():返回缩放、平移控制器。

setTraffic():显示路况图。

setSatellite():显示卫星图。

showScaleControl():显示比例尺。

setScaleControlPosition(x,y):x,y表示屏幕的像素值,以地图的左上角为原点。

setVisibility():透明度。0:不透明,100:全透明。

getOverlays():获取Overlay列表。

3.3 MapController 

包:com.baidu.mapapi.map

功能:地图控制器。用于控制地图的显示、缩放等动作。

3.4 Graphic

 包:com.baidu.mapapi.map

功能:图形类。设置图形的坐标和样式(如果不设置样式,则无法显示)。

方法:

getGeometry()/getID()/getSymbol():获取几何元素、ID、样式。

3.5 Geometry

包:com.baidu.mapapi.map

功能:几何图形类。

方法:

setPoint()/setPolyline()/setPolygon()/setEnvelop()/setCircle():设置点、线、面、矩形、圆。

3.6 GeoPoint 

包:com.baidu.platform.comapi.basestruct

功能:表示地理坐标点。以微度(10E-6)为单位。

方法:

GeoPoint(纬度,经度):构造,注意参数顺序。

3.7 Symbol

包:com.baidu.mapapi.map

功能:样式类。

方法:

setPointSymbol()/setLineSymbol()/setSurfaceSymbol():设置样式。

3.7.1 Symbol.Color

功能:颜色类。

按照:alpha,R,G,B排列。0~255之间取值。可以使用0xAARRGGBB设置。

3.7.2 Symbol.Stroke

功能:边框类。

可以设置颜色和宽度。

3.8 MKSearch

包:com.baidu.mapapi.search

功能:搜索。

3.9 MKSearchListener

包:com.baidu.mapapi.search

功能:搜索结果通知接口。返回POI、公交、驾乘、步行搜索结果。

方法:

onGetPoiResult():回调POI搜索结果。

OnGetPoiDetailSearchResult():回调POI详细搜索结果。

3.10 MKPoiResult

包:com.baidu.mapapi.search

功能:POI结果类。

3.11 MKPoiInfo

包:com.baidu.com.mapapi.search

功能:POI信息。

3.12 GraphicsOverlay

包:com.baidu.mapapi.map

功能:绘制点、线、面的图层。

方法:

GraphicsOverlay():使用MapView的对象构造。

getAllGraphics():获取所有几何对象列表。

removeAll():删除所有几何对象。

removeGraphic():删除指定几何对象。

setData():添加几何对象。

3.13 BaiduMapNavigation

包:com.baidu.mapapi.navi

功能:调用百度地图进行导航(必须安装百度导航)。

方法:

GetLatestBaiduMapApp(Activity context):打开最新版百度地图APP下载页面。

openBaiduMapNavi(NaviPara para,Activity context):打开百度地图APP。

3.14 NaviPara

包:com.baidu.mapapi.navi

功能:输入百度地图导航的初始导航路径。如果GPS可用,则定位当前位置到终点的导航路径;如果GPS不可用,则使用给定路径的模拟导航。

方法:

startPoint/endpoint:起止点,不可以为空。

startName/endName:起止点名称,可以为空,只用于显示。

3.15 LocationClient

3.16 MyLocationOverlay

包:com.baidu.mapapi.map

功能:用于显示位置点的图层。可以设置位置、指南针、图标。

方法:

MyLocationOverlay(MapView):使用MapView构造。

3.17 LocationData

包:com.baidu.mapapi.map

功能:位置点图层的定位数据。包括GPS速度、方向、卫星数据,以及经纬度。

方法:

注意:这里的经度和纬度都是使用度为单位的double型。

3.18 示例

package com.example.yjtdemo;

 

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.app.Activity

import android.content.res.Configuration

import android.os.Bundle

import android.view.Menu

import android.widget.CheckBox;

import android.widget.FrameLayout

import android.widget.RadioButton;

import android.widget.Toast

import com.baidu.mapapi.BMapManager; 

import com.baidu.mapapi.map.MKMapViewListener

import com.baidu.mapapi.map.MapController; 

import com.baidu.mapapi.map.MapPoi

import com.baidu.mapapi.map.MapView; 

import com.baidu.platform.comapi.basestruct.GeoPoint; 

  

public class MainActivity extends Activity {

    BMapManager mBMapMan = null

    MapView mMapView = null

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState); 

        mBMapMan=new BMapManager(getApplication()); 

        mBMapMan.init("wo0msZa5DUTBSgOAUXFa9csP", null);   

        //注意:请在试用setContentView前初始化BMapManager对象,否则会报错 

        setContentView(R.layout.activity_main); 

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

        mMapView.setBuiltInZoomControls(true); 

        //设置启用内置的缩放控件 

        MapController mMapController=mMapView.getController(); 

        // 得到mMapView的控制权,可以用它控制和驱动平移和缩放 

        GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404*1E6)); 

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

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

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

    }

 

    public void loadSatelliteMap(View v)

    {

       CheckBox cb = (CheckBox)v;

       boolean bCheck = cb.isChecked();

       cb.setChecked(bCheck);     

       mMapView.setSatellite(bCheck);

    }

   

    public void loadCommunicateMap(View v)

    {

       CheckBox cb = (CheckBox)v;

       boolean bCheck = cb.isChecked();

       cb.setChecked(bCheck);     

       mMapView.setTraffic(bCheck);

       mMapView.showScaleControl(bCheck);

       mMapView.setScaleControlPosition(10, 100);

       mMapView.setVisibility(0);

       GeoPoint ptCenter = mMapView.getMapCenter();

       int iLat = ptCenter.getLatitudeE6();

       ptCenter.setLatitudeE6(iLat + 1000000);

       MapController mController = mMapView.getController();

       mController.setCenter(ptCenter);

       mController.animateTo(ptCenter);

 

    }

 

    @Override 

    protected void onDestroy(){ 

            mMapView.destroy(); 

            if(mBMapMan!=null){ 

                    mBMapMan.destroy(); 

                    mBMapMan=null

            } 

            super.onDestroy(); 

    } 

    @Override 

    protected void onPause(){ 

            mMapView.onPause(); 

            if(mBMapMan!=null){ 

                   mBMapMan.stop(); 

            } 

            super.onPause(); 

    } 

    @Override 

    protected void onResume(){ 

            mMapView.onResume(); 

            if(mBMapMan!=null){ 

                    mBMapMan.start(); 

            } 

           super.onResume(); 

    }    

}

 

4 Android基础

4.1 Activity生命周期

4.1.1 活动状态

onCreate():首次启动Activity时,使用NULL作为参数。结束后重新打开,使用Bundle恢复。Activity重建时。

4.1.2 Destory状态:activity释放

onDestroy():Activity释放资源时。

4.1.3 Stop状态:activity被其它activity隐藏

onStart():激活时。

onStop():退出时。

onRestart():重新启动。

4.1.4 Pause状态:被通知等隐藏,但仍可见

onPause():当前Activity被覆盖时。

OnResume():pause之后重新显示。

4.1.5 状态保存

onSaveInstanceState():保存状态Bundle。

OnRestoreInstanceState():恢复状态Bundle。

4.2 Activity消息传递

使用Intent传递消息,包括动作和参数。

4.3 启动Activity

startActivity():启动活动。

startActivityForResult():启动活动,完成后回调onActivityResult()。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值