直接上代码:

先看下效果图:

我这里主要做了三个功能:

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开发之百度地图定位以及简单覆盖物的实现相关推荐

  1. Android开发之百度地图定位

    Android开发之百度地图定位 一.效果图 二.下载百度地图SDK 1.打开[百度地图](https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9% ...

  2. Android开发之百度地图定位打卡

    Android开发之百度地图定位打卡 一.效果图 二.下载百度地图SDK 三.代码实现 1.布局文件(activity_main) 2.布局文件(activity_map) 3.在res文件夹下新建m ...

  3. Android开发-基于百度地图API开发仿滴滴出行APP界面的实现

    前 言 近年来,由于移动互联网快速的发展以及基于移动设备的APP的普及,移动互联网改变了人们的生活方式.从线上的电子支付到线下的出行,移动互联网是当今社会人们生活不可或缺的一部分,而线下出行的网约车的 ...

  4. android百度地图自定义图层,百度地图开发之百度地图定位图层基本使用方法讲解...

    (一):基本介绍: 百度地图可以直接提供定位功能,并且把位置信息以图层的形式标注在地图上面(PopupView),同时还支持自定义设置图标,这样便于用户直接查看位置信息.要实现以上的方法,我们主要需要 ...

  5. Android 轻松实现百度地图定位

    最近在做一地图定位软件,下面分享一下自己在做的过程中遇到的问题,希望对大家有帮助: 首先就是要用百度地图的API需要申请一个Key值,要到百度地图API中申请: http://developer.ba ...

  6. 【转载】Android应用之——百度地图定位返回4.9E-324的解决方案

    用百度定位的时候一直定位不到,拿到的经纬度都是4.9E-324,Google了一下,发现不少人出现这个问题,经过一番研究,最终解决了这个问题. 目前看来,出现这个问题说明定位失败了,定位失败返回的就是 ...

  7. Android开发实现高德地图定位详解

     一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的地图SDK和定位S ...

  8. Android开发之百度地图(soso地图,搜狗地图,阿里云地图)转高德地图经纬度的方法

    //将百度地图经纬度转换为高德地图经纬度CoordinateConverter converter = new CoordinateConverter(this);// CoordType.BAIDU ...

  9. Android开发之百度地图距离判断(判断定位位置是否在圆的范围内)

    直接上代码,简单明了 /*** 返回是否在打卡范围内** @return 返回值*var0表示圆心的坐标,var1代表圆心的半径,var2代表要判断的点是否在圆内*isCircleContainsPo ...

最新文章

  1. docker快速入门教程
  2. mac bash file密码_Mac系统 | 菜鸟程序员项目模拟数据迁移,会安装Mysql服务端吗
  3. 1.3.3 系统调用(执行过程、访管指令、库函数与系统调用)
  4. Docker入门到实践
  5. java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?
  6. html表单样式怎么去掉,HTML表单元素覆盖样式元素问题及其补救之道
  7. 为什么现在不看好 CV 方向了呢?
  8. php元换成万元,人民币单位换算器(元换算成万元换算器)
  9. Codeforces 1096D
  10. 有哪些有意思高质量的中文网站
  11. Web API数据传输加密
  12. Spire.PDF 教程:在C#中显示或隐藏PDF图层
  13. 带宽与网速之间的换算
  14. 探花交友(3)——接口实现分析
  15. html转换成word文档没有边框,解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题...
  16. 如何更改AutoCAD软件图纸背景颜色?
  17. getline()函数的几点疑惑
  18. 状态码502和504分析
  19. 【ChatGPT初体验与Android的集成使用】
  20. Verilog硬件描述语言 西安电子科技大学 蔡觉平主讲 P8 语言设计思想和和可综合特性、组合电路设计 课程笔记

热门文章

  1. Nexys4DDR+OV7670实现图像灰度显示系统
  2. JESD204B的AXI4-Lite时序分析(对比SRIO的AXI4-Lite时序分析)
  3. Linux如何访问mmio空间,一文读懂Linux下如何访问I/O端口和I/O内存
  4. pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!
  5. python中的字典推导式_17.python 字典推导式(经典代码)
  6. mysql基础表和修理表_MySQL基础知识——创建数据库和表
  7. 大数据 -- Hadoop集群环境搭建
  8. scrollHeight、clientHeight、offsetHeight、scrollTop等的定义以及图解
  9. luogu P1762 偶数
  10. UESTC - 1610 递推方程+矩阵快速幂