- 浏览: 186368 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
Allen_J_Will:
...
python学习,第四天笔记 -
大头K:
qindongliang1922 写道你用的啥IDE工具楼主
...
python学习,第三天笔记 -
qindongliang1922:
你用的啥IDE工具楼主
python学习,第三天笔记 -
大头K:
hksfho 写道你好,怎樣顯不坐標?你说的是在地图上显示坐标 ...
基于百度地图实现的实时定位功能(含项目代码) -
hksfho:
你好,怎樣顯不坐標?
基于百度地图实现的实时定位功能(含项目代码)
使用百度地图有很长一段时间了,每次用的时候都是看官方例子,很少自己作总结,这样每次用的时候都会花时间去理解,今天就抽点时间总结一下:
1.废话不多说,先看效果:
2.基于百度地图版本:Android SDK v2.1.2
下方有官方Demo下载
3.项目中加入所需权限,demo中权限很多,我从中筛选出我们这个覆盖物所需要的权限,如果不放心的话,也可以直接copy demo中的所有权限
4.继承Application,在子类中初始化一些百度地图引擎设置
不要忘记在manifiest里面引用MyApplication
5.接下来来看看Activity代码:
相比demo中代码,这代码相对简洁,把重要部分以最简单的方式展示出来,便于大家理解,有什么疑问或者代码有错误,欢迎指正
以上项目源码下载地址,欢迎大家下载指正:
http://download.csdn.net/detail/qq15989177612/6462621
1.废话不多说,先看效果:
2.基于百度地图版本:Android SDK v2.1.2
下方有官方Demo下载
3.项目中加入所需权限,demo中权限很多,我从中筛选出我们这个覆盖物所需要的权限,如果不放心的话,也可以直接copy demo中的所有权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4.继承Application,在子类中初始化一些百度地图引擎设置
public class MyApplication extends Application { private static MyApplication baseApplication = null; public boolean m_bKeyRight = true; public BMapManager mBMapManager = null; //百度API_KEY public static String BMAP_API_KEY = "957503D42459F015B0BBF70C041B3D6D488A323F"; @Override public void onCreate() { super.onCreate(); baseApplication = this; initEngineManager(this); } public static MyApplication getInstance() { return baseApplication; } // 初始化百度地图引擎 public void initEngineManager(Context context) { if (mBMapManager == null) { mBMapManager = new BMapManager(context); } if (!mBMapManager.init(BMAP_API_KEY, new MyGeneralListener())) { Toast.makeText(MyApplication.getInstance().getApplicationContext(), "BMapManager 初始化错误!", Toast.LENGTH_LONG).show(); } } // 常用事件监听,用来处理通常的网络错误,授权验证错误等 public static class MyGeneralListener implements MKGeneralListener { @Override public void onGetNetworkState(int iError) { if (iError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText( MyApplication.getInstance().getApplicationContext(), "您的网络出错啦!", Toast.LENGTH_LONG).show(); } else if (iError == MKEvent.ERROR_NETWORK_DATA) { Toast.makeText( MyApplication.getInstance().getApplicationContext(), "输入正确的检索条件!", Toast.LENGTH_LONG).show(); } // ... } @Override public void onGetPermissionState(int iError) { if (iError == MKEvent.ERROR_PERMISSION_DENIED) { // 授权Key错误: Toast.makeText( MyApplication.getInstance().getApplicationContext(), "请在 DemoApplication.java文件输入正确的授权Key!", Toast.LENGTH_LONG).show(); MyApplication.getInstance().m_bKeyRight = false; } } } }
不要忘记在manifiest里面引用MyApplication
<application android:name="com.example.baidumaptest.MyApplication"
5.接下来来看看Activity代码:
public class MainActivity extends Activity { private MapView mapView = null; private MapController mMapController = null; private MyOverlay mOverlay = null; private PopupOverlay pop = null; // 经纬度,用来确定覆盖物的位置.这里就写死一个位置 private double lat = 23.12916; private double lng = 113.379379; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initClass(); initBdMapViews(); } // 初始化类 private void initClass() { MyApplication app = (MyApplication) this.getApplication(); if (app.mBMapManager == null) { app.mBMapManager = new BMapManager(this); app.mBMapManager.init(MyApplication.BMAP_API_KEY, new MyApplication.MyGeneralListener()); } } // 初始化地图View private void initBdMapViews() { mapView = (MapView) findViewById(R.id.bmapView); // 设置相关参数 mMapController = mapView.getController(); mMapController.enableClick(true); mMapController.setZoom(17); mapView.setBuiltInZoomControls(true); // 初始化地图覆盖物 initOverlay(); // 调整地图中心点 mMapController.setCenter(transformToGeoP(lat, lng)); } //初始化覆盖物 private void initOverlay() { mOverlay = new MyOverlay(getResources().getDrawable( R.drawable.icon_gcoding), mapView); //一个覆盖物 OverlayItem item1 = new OverlayItem(transformToGeoP(lat, lng), "覆盖物", ""); item1.setMarker(getResources().getDrawable(R.drawable.icon_gcoding)); mOverlay.addItem(item1); mapView.getOverlays().add(mOverlay); mapView.refresh(); //默认弹出 showPopupOverlay(transformToGeoP(lat, lng)); } // 自定义覆盖物 public class MyOverlay extends ItemizedOverlay { public MyOverlay(Drawable arg0, MapView arg1) { super(arg0, arg1); } @Override protected boolean onTap(int arg0) { //弹出覆盖物 showPopupOverlay(getItem(arg0).getPoint()); return true; } @Override public boolean onTap(GeoPoint arg0, MapView arg1) { if (pop != null) { //隐藏覆盖物 pop.hidePop(); } return false; } } // 弹出覆盖物 public void showPopupOverlay(GeoPoint p1) { pop = new PopupOverlay(mapView, null); View view = getLayoutInflater().inflate(R.layout.pop_layout, null); View pop_layout = view.findViewById(R.id.pop_layout); //将View转化成用于显示的bitmap Bitmap[] bitMaps = { BMapUtil.getBitmapFromView(pop_layout) }; pop.showPopup(bitMaps, p1, 32); } // 将经纬度转换成GeoPoint private GeoPoint transformToGeoP(double lat, double lng) { return new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); } //生命周期,必不可少,不全则影响百度性能,严重会报错 @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mapView.onRestoreInstanceState(savedInstanceState); } }
相比demo中代码,这代码相对简洁,把重要部分以最简单的方式展示出来,便于大家理解,有什么疑问或者代码有错误,欢迎指正
以上项目源码下载地址,欢迎大家下载指正:
http://download.csdn.net/detail/qq15989177612/6462621
发表评论
-
android studio 编译问题
2015-08-12 17:58 7211、今天在用AS直接调试安装应用的时候,发现安装的debug应 ... -
BASE64加密解密
2014-08-19 17:59 0import java.io.ByteArrayOutputS ... -
在EditText和TextView显示表情图片(类似QQ表情)
2014-08-04 13:25 1646通过重写EditText和TextView,在EditText ... -
java修改目录所有文件名
2014-07-15 13:03 1883前言: 一直遇到一个问题,android在打包的时候,有时会涉 ... -
webview清除cookie
2014-07-14 15:54 4207前言: 由于项目需要,webview需要与app进行交互,其实 ... -
按正方形裁切图片和图片加边框
2014-06-07 09:13 19101.按正方形裁切图片: /** * 按正方形裁切图片 ... -
解决部分android手机照片被系统自动旋转
2014-05-21 14:13 1804使用某星手机有为应用的图库添加图片时,发现照片已被旋转,APP ... -
关于拍完照或者保存图片,无法在相册上显示问题
2014-05-05 17:43 934场景:拍完照或者保存图片到SDCard时,无法马上在相册上显示 ... -
Universal-Image-Loader 内存占用
2014-04-30 23:24 1542前言:之前项目一直使用Universal-Image-Load ... -
Fragment already added 解决方法
2014-04-22 11:22 13183最近项目上遇到一个问题: 找了很久,尼玛终于找到方法解决 ... -
非官方调用新浪微博
2014-04-18 09:19 1909很多情况,我们都需要用户关注我们的官方微博,现在提供两种办法展 ... -
类似上下滚动切换广告牌效果实现
2014-04-18 06:39 0看到需求时,上下滚动切换,第一反应就是VerticalView ... -
关于刷新自定义View
2014-04-18 06:34 822因为项目需要,需要在自定义View可见之后再动态变化宽度。 ... -
保存网络图片到手机上
2014-04-16 12:00 952// 保存图片到手机端 public static bool ... -
ListView快速定位第一行
2014-04-15 16:23 1039if (Build.VERSION.SDK_INT < ... -
调用手机相机实现拍照、剪裁、保存图片到手机(含github源码地址)
2014-03-20 16:31 5946调用手机相机实现拍照、剪裁图片、并保存图片到手机 先看效果图 ... -
FragmentTabHost切换Fragment时避免UI重新加载
2014-03-12 14:27 4531用FragmentTabHost + Fragment 可以实 ... -
Gridview 去掉橙色点击响应效果
2014-03-12 11:19 948一行代码搞定: gridView.setSelector(ne ... -
如何在service里面弹出对话框
2014-03-10 00:03 3204先给一个需求:需要在service里面监听短信的接收,如果接收 ... -
ViewFlipper 3D旋转动画实现 界面切换
2014-03-08 00:46 1709先来看看效果: 简单介绍一下,两个界面,以水平中线旋转18 ...
相关推荐
在"百度地图自定义覆盖物及相关代码开发"中,主要涉及以下几个核心知识点: 1. **初始化地图**:首先,我们需要通过`BMap.Map`对象创建一个地图实例,并设置地图的中心点坐标和缩放级别。例如: ```javascript var ...
百度地图自定义覆盖物,覆盖物显示信息可完全自己根需求,div+css
自己做的一个综合实例,包括自定义覆盖物 地图单击弹窗 提示信息等功能 。唯一遗憾的是没有实现标注物聚合。这里给出网址大家可以自己研究下http://my.eoe.cn/imesong/archive/21397.html
"百度地图自定义覆盖物绘制"是百度地图API提供的一项服务,它允许开发者通过JavaScript或者Android/iOS SDK来实现这一功能。 首先,我们要理解什么是覆盖物。在地图应用中,覆盖物是指在地图基础图层之上显示的、可...
本文将深入探讨如何使用JavaScript和百度地图API实现一个功能,即当鼠标悬停在特定位置时,能够高亮显示对应的行政区,并创建自定义覆盖物。我们将讨论以下几个核心知识点: 1. **百度地图API**:百度地图API是百度...
自定义标注覆盖物(Custom Overlay)是百度地图中的一种功能,它允许开发者在地图上绘制自定义的标记物,以更符合自己的业务需求和设计风格。通过自定义标注覆盖物,你可以在地图上添加各种类型的标记,如图标、文字...
本教程将深入探讨如何使用百度地图API实现自定义覆盖物的绘制,以及如何计算多边形覆盖物的面积。 首先,我们需要在Android项目中引入百度地图SDK。这通常通过在build.gradle文件中添加依赖来完成,如: ```gradle...
总之,通过百度地图API的自定义覆盖物功能,我们可以自由地在地图上添加各种视觉元素,如水波纹或雷达效果,以满足特定的应用需求。理解并掌握这个过程,不仅可以提升地图应用的互动性和吸引力,还能锻炼我们的编程...
"百度地图类库 自定义覆盖物"这个主题聚焦于如何利用百度地图API创建个性化的地图元素。下面将详细阐述相关知识点。 首先,我们要了解“覆盖物”(Overlay)在地图API中的概念。覆盖物是地图上的一种视觉元素,它...
本demo说明http://blog.csdn.net/zxinlong/article/details/9712909 使用的开发环境:eclipse-4.2;jdk-1.7;编码-utf8;sdk-8
首先,"百度地图自定义标注"指的是在百度地图上添加非默认的图标或者内容,以满足个性化需求。这通常涉及到对百度地图JavaScript API的运用,通过创建自定义覆盖物(Overlay)来替代默认的标记(Marker)。覆盖物...
具体的应用场景简而言之就是需要我们在地图上添加如图中所示的自定义覆盖物。实现的过程作者分为以下两点给大家介绍介绍。 水波紋的实现 自定义覆盖物的实现 水波紋的实现 这个需求的实现肯定是离不开我们自己写...
本篇将重点介绍"百度地图类库 - 自定义覆盖物"的相关知识点,帮助你理解和应用这个类库。 首先,"覆盖物"在地图API中是一个重要的概念,它指的是在地图上添加的个性化元素,如标记、文本、图片等,可以用来标注地点...
在SDK v3.5.0中,我们可以创建自定义覆盖物来满足个性化需求。 要实现一个具有动画效果的标注覆盖物,我们需要做以下几步: 1. **导入百度地图SDK**:首先,需要在Android项目中引入百度地图SDK的依赖库,可以通过...
3. **百度地图API的使用**:学习如何调用API创建地图对象、添加覆盖物(包括多边形和点标记)、设置交互事件等。 4. **数据结构与算法**:对于大量点的处理,可能需要用到如KD树、R树等空间索引数据结构,以优化查询...
"android百度地图标注覆盖物和覆盖物点击出现对话框的实现"这个项目着重于展示如何在地图上添加自定义覆盖物以及处理点击事件来弹出对话框。下面我们将详细探讨这些关键知识点。 1. **百度地图API集成**:首先,你...
在百度地图API和高德地图SDK中,都有相应的接口支持自定义覆盖物的创建。 对于百度地图,我们可以使用`BMap.Marker`类来创建基本的标记,然后通过`BMap.Polygon`或`BMap.Polyline`类绘制多边形或线性覆盖物。如果...
覆盖物是百度地图API中的一个重要元素,它允许用户在地图上添加自定义的图形元素,如图标、文字、图片或者自定义形状。这些元素可以用来标记特定位置、展示数据信息或者增强地图的视觉效果。例如,你可以用覆盖物来...