一、展示百度地图,并将一个指定的点(根据经纬度确定)展示在手机屏幕中心

1.下载百度地图移动版API(Android)开发包

要在Android应用中使用百度地图API,就要在工程中引入百度地图API开发包,这个开发宝宝含两个文件:baidumapapi.jar和libMapApiEngine.so

2.申请API KEY

3.创建一个Android工程

百度地图移动版api支持Android 1.5及以上系统,将baidumapapi.jar和libBMapApiEngine.so分别拷贝到工程的根目录及libs/armeabi目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定baidumapapi.jar,这样就可以在应用中使用百度地图API了。

4.在布局文件中添加地图控件

<?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.baidu.mapapi.MapView
android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
</LinearLayout>

5.创建Activity继承com.baidu.mapapi.MapActivity

public class MainActivity extends MapActivity {
private BMapManager mapManager;
private MapView mapView;
private MapController mapController; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
super.initMapActivity(mapManager); mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true); // 用给定的经纬度构造一个GeoPoint(纬度,经度)
GeoPoint point = new GeoPoint((int) (47.118440 * 1E6), (int) (87.493147 * 1E6)); // 创建标记maker
Drawable marker = this.getResources().getDrawable(R.drawable.iconmarka);
// 为maker定义位置和边界
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); // 取得地图控制器对象,用于控制MapView
mapController = mapView.getController();
// 设置地图的中心
mapController.setCenter(point);
// 设置地图默认的缩放级别
mapController.setZoom(12);
} @Override
protected boolean isRouteDisplayed() {
return false;
} @Override
protected void onDestroy() {
if (mapManager != null) {
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
} @Override
protected void onPause() {
if (mapManager != null) {
mapManager.stop();
}
super.onPause();
} @Override
protected void onResume() {
if (mapManager != null) {
mapManager.start();
}
super.onResume();
}
}

6.在AndroidManifest.xml中设置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> <uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>

二、百度地图API之ItemizedOverlay的使用

Overlay简介

Overlay通常被译为“图层”或“覆盖物”,如标注、矢量图形元素(包括折现和多边形和圆)、定位图表等。覆盖物拥有自己的地理坐标,当拖动会所方地图时,他们会相应移动。

百度地图API提供了以下几种Overlay:

(1)Overlay:它是所有覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示

(2)MyLocationOverlay:一个只负责显示用户当前位置的Overlay

(3)ItemizedOverlay:它包含了一个OverlayItem列表,相当于一组分条的Overlay,通过继承此类,将一组性缺点显示在地图上

(4)PoiOverlay:本地搜索图层,提供某一特定地区的搜索服务。例:在一个城市搜索“公园”,通过此图层将公园显示在图层上。

(5)RouteOverlay:步行、驾车导航线路图层。将步行、驾车出行方案的路线及关键点显示在地图上

(6)TransitOverlay:公交换乘线路图层

ItemizedOverlay的使用示例

ItemizedOverlay提供了一种快捷的方法,可以把标记图片和相关的文本分配给特定的地理位置。ItemizedOverlay实例可以处理每一个OverlayItem标记的绘制、放置、单击处理、焦点控制和布局优化。

res/layout/main_activity.xml

<?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.baidu.mapapi.MapView android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
</LinearLayout>

MainActivity.java

public class MainActivity extends MapActivity {
private BMapManager mapManager;
private MapView mapView;
private MapController mapController; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); /**
* 初始化MapActivity
*/
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
super.initMapActivity(mapManager); mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true); /**
* 创建图标资源(用于显示在overlayItem所标记的位置)
*/
Drawable marker = this.getResources().getDrawable(R.drawable.ic_balloon);
// 为maker定义位置和边界
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); /**
* 创建自定义的ItemizedOverlay
*/
CustomItemizedOverlay overlay = new CustomItemizedOverlay(marker, this); /**
* 创建并添加第一个标记:地址(经度:80.235641 纬度:120.493147)
*/
// 构造一个经纬度点
GeoPoint point = new GeoPoint((int) (80.235641 * 1E6), (int) (120.493147 * 1E6));
// 创建标记(地址描述)
OverlayItem overlayItem = new OverlayItem(point, "地址", "地址描述");
// 将标记添加到图层中(可添加多个OverlayItem)
overlay.addOverlay(overlayItem); /**
* 创建并添加第二个标记:地址1(经度:120.125648 纬度:80.123215)
*/
point = new GeoPoint((int) (120.125648 * 1E6), (int) (80.123215 * 1E6));
// 创建标记地址1
overlayItem = new OverlayItem(point, "地址1", "地址1描述");
// 将标记添加到图层中(可添加多个OverlayItem)
overlay.addOverlay(overlayItem); /**
* 往地图上添加自定义的ItemizedOverlay
*/
List<Overlay> mapOverlays = mapView.getOverlays();
mapOverlays.add(overlay); /**
* 取得地图控制器对象,用于控制MapView
*/
mapController = mapView.getController();
// 设置地图的中心
mapController.setCenter(point);
// 设置地图默认的缩放级别
mapController.setZoom(9);
} @Override
protected boolean isRouteDisplayed() {
return false;
} @Override
protected void onDestroy() {
if (mapManager != null) {
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
} @Override
protected void onPause() {
if (mapManager != null) {
mapManager.stop();
}
super.onPause();
} @Override
protected void onResume() {
if (mapManager != null) {
mapManager.start();
}
super.onResume();
}
}

自定义ItemizedOverlay

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {  

    private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();
private Context context; public CustomItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
} public CustomItemizedOverlay(Drawable marker, Context context) {
super(boundCenterBottom(marker));
this.context = context;
} @Override
protected OverlayItem createItem(int i) {
return overlayItemList.get(i);
} @Override
public int size() {
return overlayItemList.size();
} public void addOverlay(OverlayItem overlayItem) {
overlayItemList.add(overlayItem);
this.populate();
} @Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
// Projection接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换
Projection projection = mapView.getProjection();
// 遍历所有的OverlayItem
for (int index = this.size() - 1; index >= 0; index--) {
// 得到给定索引的item
OverlayItem overLayItem = getItem(index); // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
Point point = projection.toPixels(overLayItem.getPoint(), null); Paint paintText = new Paint();
paintText.setColor(Color.RED);
paintText.setTextSize(13);
// 绘制文本
canvas.drawText(overLayItem.getTitle(), point.x + 10, point.y - 15, paintText);
}
} @Override
// 处理点击事件
protected boolean onTap(int i) {
setFocus(overlayItemList.get(i));
Toast.makeText(this.context, overlayItemList.get(i).getSnippet(), Toast.LENGTH_SHORT).show();
return true;
}
}

Android 百度地图用法的更多相关文章

  1. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

  2. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  3. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  4. Android 百度地图API(01)_开发环境 HelloBaiduMap

    转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...

  5. Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  6. Android百度地图相关内容汇总

    Android百度地图知识讲解 1.百度地图开发环境搭建    http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程    h ...

  7. android 百度地图开发实例(转载)

    因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...

  8. Android百度地图(二)结合方向传感器我们自己定位哪里走

    Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...

  9. Android 百度地图 简单实现--- 美食搜索

    Android 百度地图 简单实现---  美食 依赖包: 加入 Android 百度依赖包: 1  key:  <!--        开发人员 key --> <meta-dat ...

随机推荐

  1. 攻防世界 WEB 高手进阶区 NSCTF web2 Writeup

    攻防世界 WEB 高手进阶区 NSCTF web2 Writeup 题目介绍 题目考点 php基本函数语法 加密解密函数 base64_decode().str_rot13() 字符串反转函数 str ...

  2. 组件通信之全局事件总线 & 消息订阅发布

    全局事件总线 介绍 一种组件间通信的方式,适用于任意组件间通信. 在使用全局事件总线之前需要一些知识准备 所有组件实例的原型对象的原型对象就是 Vue 的原型对象,即VueComponent.prot ...

  3. Ubuntu20.04配置Java开发环境

    Ubuntu20.04配置Java开发环境 JDK 1.8 安装 下载地址 下载后进行解压 tar -xvzf jdk-8u301-linux-x64.tar.gz 配置环境变量 gedit ~/.b ...

  4. Linux基础五:网络配置与管理

    五.网络配置与管理 1.网络知识 2.命令 ifconfig命令  <=>  ip  addr  show 命令--查看本地所有网卡配置信息 ens32:本地以太网网卡,lo:本地回环网卡 ...

  5. 深入理解Spring IOC源码分析

    Spring容器初始化 本文使用的是Spring 5.1.7版本 写在前面:我们看源码一般有3种方式. 第一种直接用class文件,IDEA会帮我们反编译成看得懂的java代码 第二种是用maven的 ...

  6. [cf1261F]Xor-Set

    构造一棵权值范围恰为$[0,2^{60})$的权值线段树,考虑其中从下往上第$h$层($0\le h\le 60$)中的一个区间,假设其左端点为$l$,即$[l,l+2^{h})$ 这样的一个区间具有 ...

  7. go程序不停机重启

    让我们给http服务写一个版本更新接口,让它自动更新版本并重启服务吧. 初步例子 注:为了精简,文中代码都去除了err处理 main.go var Version = "1.0" ...

  8. PHP绕过MD5比较的各种姿势

    1.用==进行弱类型比较时, 可以通过两个0e开头后面纯数字的md5绕过 php在进行弱类型比较时,如果为字符串为纯数字,包括浮点数.科学计数法.十六进制数等,都会转化为数字类型再进行比较,利用这点, ...

  9. vue实现聊天+图片表情功能

    项目需求是这样的:要求实现类似于微信聊天一样,表情+文字效果 "文字效果" 表情包三种方案 表情包的实现其实可以分为以下三种情况: 表情包:点击表情--直接发送大表情(这种方案其实 ...

  10. maven私服-账号管理

    关于maven私服的相关数据: 默认账号admin,密码:admin123 这个账号是不能进行上传代码 到maven仓库的. 我们光是有admin和匿名账号是不够的,我们需要创建一个专门用来部署的账号 ...