Android开发之百度地图定位以及简单覆盖物的实现
直接上代码:
先看下效果图:
我这里主要做了三个功能:
1.一秒钟实时定位功能;
2.添加任意经纬度地点到地图上;
3.判断朝阳门是否在本人定位范围1000米内;
百度地图初始化方法:
DemoApplication.java
package com.qfy.qfymap;import android.app.Application;import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContextSDKInitializer.initialize(this);//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。SDKInitializer.setCoordType(CoordType.BD09LL);}
}
mainactivity.java
package com.qfy.qfymap;import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.utils.SpatialRelationUtil;/*** 此demo用来展示如何结合定位SDK实现定位,并使用MyLocationOverlay绘制定位位置 同时展示如何使用自定义图标绘制并点击时弹出泡泡*/
public class MainActivity extends Activity implements SensorEventListener {// 定位相关LocationClient mLocClient;public MyLocationListenner myListener = new MyLocationListenner();private LocationMode mCurrentMode;BitmapDescriptor mCurrentMarker;private static final int accuracyCircleFillColor = 0xAAFFFF88;private static final int accuracyCircleStrokeColor = 0xAA00FF00;private SensorManager mSensorManager;private Double lastX = 0.0;private int mCurrentDirection = 0;private double mCurrentLat = 0.0;private double mCurrentLon = 0.0;private float mCurrentAccracy;MapView mMapView;BaiduMap mBaiduMap;// 初始化全局 bitmap 信息,不用时及时 recycleBitmapDescriptor bdA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);BitmapDescriptor bdB = BitmapDescriptorFactory.fromResource(R.drawable.icon_markb);// UI相关OnCheckedChangeListener radioButtonListener;Button requestLocButton;boolean isFirstLoc = true; // 是否首次定位private MyLocationData locData;private float direction;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);requestLocButton = (Button) findViewById(R.id.button1);mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);//获取传感器管理服务mCurrentMode = LocationMode.NORMAL;requestLocButton.setText("普通");OnClickListener btnClickListener = new OnClickListener() {public void onClick(View v) {switch (mCurrentMode) {case NORMAL:requestLocButton.setText("跟随");mCurrentMode = LocationMode.FOLLOWING;mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));MapStatus.Builder builder = new MapStatus.Builder();builder.overlook(0);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));break;case COMPASS:requestLocButton.setText("普通");mCurrentMode = LocationMode.NORMAL;mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));MapStatus.Builder builder1 = new MapStatus.Builder();builder1.overlook(0);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder1.build()));break;case FOLLOWING:requestLocButton.setText("罗盘");mCurrentMode = LocationMode.COMPASS;mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));break;default:break;}}};requestLocButton.setOnClickListener(btnClickListener);RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);radioButtonListener = new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if (checkedId == R.id.defaulticon) {// 传入null则,恢复默认图标mCurrentMarker = null;mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, null));}if (checkedId == R.id.customicon) {// 修改为自定义markermCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker,accuracyCircleFillColor, accuracyCircleStrokeColor));}}};group.setOnCheckedChangeListener(radioButtonListener);// 地图初始化mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);mLocClient.setLocOption(option);mLocClient.start();mBaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {@Overridepublic void onMapLoaded() {initOverlay();}});}/*** 初始化Overlay*/public void initOverlay() {// add marker overlay
// LatLng llA = new LatLng(39.94019, 116.43876);LatLng llA = new LatLng(40.123798,116.28088);LatLng llB = new LatLng(39.940398, 116.438944);MarkerOptions ooA = new MarkerOptions().position(llA).icon(bdA);Marker mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));MarkerOptions ooB = new MarkerOptions().position(llB).icon(bdB);Marker mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(18.0f);mBaiduMap.setMapStatus(msu);}@Overridepublic void onSensorChanged(SensorEvent sensorEvent) {double x = sensorEvent.values[SensorManager.DATA_X];if (Math.abs(x - lastX) > 1.0) {mCurrentDirection = (int) x;locData = new MyLocationData.Builder().accuracy(mCurrentAccracy)// 此处设置开发者获取到的方向信息,顺时针0-360.direction(mCurrentDirection).latitude(mCurrentLat).longitude(mCurrentLon).build();mBaiduMap.setMyLocationData(locData);}lastX = x;}@Overridepublic void onAccuracyChanged(Sensor sensor, int i) {}/*** 定位SDK监听函数*/public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {// map view 销毁后不在处理新接收的位置if (location == null || mMapView == null) {return;}mCurrentLat = location.getLatitude();mCurrentLon = location.getLongitude();mCurrentAccracy = location.getRadius();Log.e("打印半径", mCurrentAccracy + "==");locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(mCurrentDirection).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);if (isFirstLoc) {isFirstLoc = false;LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatus.Builder builder = new MapStatus.Builder();builder.target(ll).zoom(18.0f);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));}//定位成功后取到经纬度信息MyLocationData locationData = mBaiduMap.getLocationData();double lt = locationData.latitude;double li = locationData.longitude;Log.e("打印经纬度1", li + "," + lt);Log.e("打印经纬度2", mCurrentLon + "," + mCurrentLat);
// Toast.makeText(MainActivity.this, "朝阳门是否在融宝打卡范围内?" + SpatialRelationUtil.isCircleContainsPoint(new LatLng(116.440149,39.939851), 30, new LatLng(116.440108, 39.93058)), Toast.LENGTH_LONG).show();Toast.makeText(MainActivity.this, "朝阳门是否在公司打卡范围内?" + SpatialRelationUtil.isCircleContainsPoint(new LatLng(lt, li), 1000, new LatLng(39.93058, 116.440108)), Toast.LENGTH_LONG).show();}public void onReceivePoi(BDLocation poiLocation) {}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();//为系统的方向传感器注册监听器mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_UI);}@Overrideprotected void onStop() {//取消注册传感器监听mSensorManager.unregisterListener(this);super.onStop();}@Overrideprotected void onDestroy() {// 退出时销毁定位mLocClient.stop();// 关闭定位图层mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();}}
百度地图相关jar包库文件请下载源码查看:
如果看不懂可以下载源码:
源码下载
Android开发之百度地图定位以及简单覆盖物的实现相关推荐
- Android开发之百度地图定位
Android开发之百度地图定位 一.效果图 二.下载百度地图SDK 1.打开[百度地图](https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9% ...
- Android开发之百度地图定位打卡
Android开发之百度地图定位打卡 一.效果图 二.下载百度地图SDK 三.代码实现 1.布局文件(activity_main) 2.布局文件(activity_map) 3.在res文件夹下新建m ...
- Android开发-基于百度地图API开发仿滴滴出行APP界面的实现
前 言 近年来,由于移动互联网快速的发展以及基于移动设备的APP的普及,移动互联网改变了人们的生活方式.从线上的电子支付到线下的出行,移动互联网是当今社会人们生活不可或缺的一部分,而线下出行的网约车的 ...
- android百度地图自定义图层,百度地图开发之百度地图定位图层基本使用方法讲解...
(一):基本介绍: 百度地图可以直接提供定位功能,并且把位置信息以图层的形式标注在地图上面(PopupView),同时还支持自定义设置图标,这样便于用户直接查看位置信息.要实现以上的方法,我们主要需要 ...
- Android 轻松实现百度地图定位
最近在做一地图定位软件,下面分享一下自己在做的过程中遇到的问题,希望对大家有帮助: 首先就是要用百度地图的API需要申请一个Key值,要到百度地图API中申请: http://developer.ba ...
- 【转载】Android应用之——百度地图定位返回4.9E-324的解决方案
用百度定位的时候一直定位不到,拿到的经纬度都是4.9E-324,Google了一下,发现不少人出现这个问题,经过一番研究,最终解决了这个问题. 目前看来,出现这个问题说明定位失败了,定位失败返回的就是 ...
- Android开发实现高德地图定位详解
一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的地图SDK和定位S ...
- Android开发之百度地图(soso地图,搜狗地图,阿里云地图)转高德地图经纬度的方法
//将百度地图经纬度转换为高德地图经纬度CoordinateConverter converter = new CoordinateConverter(this);// CoordType.BAIDU ...
- Android开发之百度地图距离判断(判断定位位置是否在圆的范围内)
直接上代码,简单明了 /*** 返回是否在打卡范围内** @return 返回值*var0表示圆心的坐标,var1代表圆心的半径,var2代表要判断的点是否在圆内*isCircleContainsPo ...
最新文章
- docker快速入门教程
- mac bash file密码_Mac系统 | 菜鸟程序员项目模拟数据迁移,会安装Mysql服务端吗
- 1.3.3 系统调用(执行过程、访管指令、库函数与系统调用)
- Docker入门到实践
- java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?
- html表单样式怎么去掉,HTML表单元素覆盖样式元素问题及其补救之道
- 为什么现在不看好 CV 方向了呢?
- php元换成万元,人民币单位换算器(元换算成万元换算器)
- Codeforces 1096D
- 有哪些有意思高质量的中文网站
- Web API数据传输加密
- Spire.PDF 教程:在C#中显示或隐藏PDF图层
- 带宽与网速之间的换算
- 探花交友(3)——接口实现分析
- html转换成word文档没有边框,解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题...
- 如何更改AutoCAD软件图纸背景颜色?
- getline()函数的几点疑惑
- 状态码502和504分析
- 【ChatGPT初体验与Android的集成使用】
- Verilog硬件描述语言 西安电子科技大学 蔡觉平主讲 P8 语言设计思想和和可综合特性、组合电路设计 课程笔记
热门文章
- Nexys4DDR+OV7670实现图像灰度显示系统
- JESD204B的AXI4-Lite时序分析(对比SRIO的AXI4-Lite时序分析)
- Linux如何访问mmio空间,一文读懂Linux下如何访问I/O端口和I/O内存
- pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!
- python中的字典推导式_17.python 字典推导式(经典代码)
- mysql基础表和修理表_MySQL基础知识——创建数据库和表
- 大数据 -- Hadoop集群环境搭建
- scrollHeight、clientHeight、offsetHeight、scrollTop等的定义以及图解
- luogu P1762 偶数
- UESTC - 1610 递推方程+矩阵快速幂