Android 百度地图用法
一、展示百度地图,并将一个指定的点(根据经纬度确定)展示在手机屏幕中心
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 百度地图用法的更多相关文章
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图API(01)_开发环境 HelloBaiduMap
转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android百度地图相关内容汇总
Android百度地图知识讲解 1.百度地图开发环境搭建 http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程 h ...
- android 百度地图开发实例(转载)
因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...
- Android百度地图(二)结合方向传感器我们自己定位哪里走
Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...
- Android 百度地图 简单实现--- 美食搜索
Android 百度地图 简单实现--- 美食 依赖包: 加入 Android 百度依赖包: 1 key: <!-- 开发人员 key --> <meta-dat ...
随机推荐
- Mysql基础教程:(七)MySQL基础练习
MySQL基础练习 一.创建student和score表 CREATE TABLE student (id INT(10) NOT NULL PRIMARY KEY ,name VARCHAR(20) ...
- EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?
场景描述:项目中存在两个迁移 Teacher 和 TeachingPlan ,TeachingPlan 在 Teacher 之后创建,并且已经执行 dotnet ef database update ...
- Python 循环控制
for循环 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串 for 变量 in 列表.字典.字符串.函数: 执行语句 ...
- [cf1421E]Swedish Heroes
令$p_{i}$为最终$a_{i}$之前的系数($p_{i}\in \{-1,1\}$),则有$n+\sum_{i=1}^{n}[p_{i}=-1]\equiv 1(mod\ 3)$ 证明:对于两个满 ...
- [bzoj5294]二进制
首先可以发现$2^k$模3意义下有循环节,也就是1,-1,1,-1--考虑对于x个1,y个0,判断是否存在3的倍数1.x为偶数时一定可以,选择等量的1和-1即可2.x为奇数,要满足$x\ge 3$且$ ...
- 通过 for 循环,比较 Python 与 Ruby 编程思想的差别
作者:Doug Turnbull 译者:豌豆花下猫@Python猫 原文:https://softwaredoug.com/blog/2021/11/12/ruby-vs-python-for-loo ...
- gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
前言 Excel功能强大,应用广泛.随着web应用的兴起和完善,用户的要求也越来越高.很多Excel的功能都搬到了sass里面.恨不得给他们做个Excel出来...程序员太难了... 去年我遇到了 ...
- 初识XSS攻击
初识XSS攻击 本文参考于<白帽子讲Web安全>第3章跨站脚本攻击(XSS),该书出版于2014年,因而现在可能存在一些新场景或新技术而未被提及,但本文对学习和了解XSS攻击仍具有重要价值 ...
- Pycharm整体缩进和减少缩进
整体缩进:鼠标拉选住代码块,按下tab键. 反向缩进:鼠标拉选住代码块,按下shift+tab键.
- 网络协议之:一定要大写的SOCKS
目录 简介 SOCKS的故事 SOCKS的历史 SOCKS协议的具体内容 SOCKS4 SOCKS4a SOCKS5 总结 简介 很久很久以前,人们还穿的是草鞋,草鞋虽然穿着舒服,但是不够美观.然后人 ...