在Android上使用百度地图SDK开发时,需要读取手机和GPS模块的定位坐标,然后在手机端的百度地图上显示出来,由于坐标系的不同,所以需要进行坐标的转换。我使用的是百度地图提供的API函数来进行转换。

1.在百度地图SDK开发包下载选择上“计算工具”

2.导入类接口

import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.utils.CoordinateConverter;

3.坐标转换

            LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());    //获取手机定位坐标CoordinateConverter converter  = new CoordinateConverter()  .from(CoordinateConverter.CoordType.COMMON).coord(ll);LatLng ll_bd = converter.convert();//将GCJ02坐标转换为百度坐标

GPS的话只需要将CoordinateConverter.CoordType.COMMON修改为CoordinateConverter.CoordType.GPS即可。

代码:

package com.example.phonelocation;import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.utils.CoordinateConverter;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
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.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {public LocationClient mLocationClient;private TextView positionText;private MapView mapView;private BaiduMap baiduMap;private boolean isFirstLocate = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.bmapView);baiduMap = mapView.getMap();baiduMap.setMyLocationEnabled(true);positionText = (TextView) findViewById(R.id.position_text_view);List<String> permissionList = new ArrayList<>();if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_DENIED){permissionList.add(Manifest.permission.READ_PHONE_STATE);}if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if (!permissionList.isEmpty()){String [] permission = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this, permission, 1);}else {requestLocation();}}private void requestLocation( ){initLocation();mLocationClient.start();}private void initLocation( ){LocationClientOption option = new LocationClientOption();option.setScanSpan(2500);option.setIsNeedAddress(true);  //获取街道信息option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);   //指定了传感器模式,即只使用gps定位。去掉这句话可以使用流量定位mLocationClient.setLocOption(option);}@Overrideprotected void onResume() {super.onResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mLocationClient.stop();mapView.onDestroy();baiduMap.setMyLocationEnabled(false);}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){case 1:if (grantResults.length > 0){for (int result : grantResults){if (result != PackageManager.PERMISSION_GRANTED){Toast.makeText(this, "必须同意所有权限才能使用程序",Toast.LENGTH_SHORT).show();finish();return;}}requestLocation();} else {Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show();finish();}break;default:}}private void navigateTo(BDLocation location){if (isFirstLocate){LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());CoordinateConverter converter  = new CoordinateConverter()  //将GCJ02坐标转换为百度坐标.from(CoordinateConverter.CoordType.COMMON).coord(ll);LatLng ll_bd = converter.convert();MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll_bd);baiduMap.animateMapStatus(update);update = MapStatusUpdateFactory.zoomTo(18f);baiduMap.animateMapStatus(update);isFirstLocate = false;}MyLocationData.Builder locationBuilder = new MyLocationData.Builder();LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());CoordinateConverter converter  = new CoordinateConverter()  //将GCJ02坐标转换为百度坐标.from(CoordinateConverter.CoordType.COMMON).coord(ll);LatLng ll_bd = converter.convert();locationBuilder.latitude(ll_bd.latitude);locationBuilder.longitude(ll_bd.longitude);MyLocationData locationData = locationBuilder.build();baiduMap.setMyLocationData(locationData);}int timess=0;public class MyLocationListener implements BDLocationListener{@Overridepublic void onReceiveLocation(BDLocation Location) {if (Location.getLocType() == BDLocation.TypeGpsLocation|| Location.getLocType() == BDLocation.TypeNetWorkLocation){navigateTo(Location);}int errora = Location.getLocType();timess=timess+1;StringBuffer currentPosition = new StringBuffer();currentPosition.append("错误是:").append(errora).append(" times:").append(timess).append("\n");currentPosition.append("纬度: ").append(Location.getLatitude()).append("\n");currentPosition.append("经度: ").append(Location.getLongitude()).append("\n");currentPosition.append("国家:").append(Location.getCountry()).append("\n");currentPosition.append("省:").append(Location.getProvince()).append("\n");currentPosition.append("市:").append(Location.getCity()).append("\n");currentPosition.append("区:").append(Location.getDistrict()).append("\n");currentPosition.append("街道:").append(Location.getStreet()).append("\n");positionText.setText(currentPosition);}}
}

参考资料:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/tool/coordinate

完整代码:
https://download.csdn.net/download/Emb_2333/12206247

使用百度地图工具进行坐标转换相关推荐

  1. 百度地图根据地理坐标转换经纬度

    百度地图根据地理坐标转换经纬度 这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方便的.只要简单几步注册下,就可以 ...

  2. 百度地图API 批量坐标转换

    在将原始坐标批量转换的时候,回调的时候发现 data.status = 25 translateCallback = function (data){//回调时 data.status = 25 } ...

  3. 地图坐标系之间的转换(百度地图、GCJ、WGS84)

    文章目录 文章参考 坐标系介绍 常见坐标系 WGS84坐标系(标准的GPS坐标) WGS84 Web墨卡托(平面地图) GCJ02经纬度投影(火星坐标系) GCJ02 Web 墨卡托投影 BD09 经 ...

  4. 简单的通过两点坐标判断当前两点间距离 ----百度地图 苹果定位

    在做应用的时候,公司提出要做一个雷达功能,搜索附近的用户,但是不想用云检索.围了实现功能,需要在不同分辨率的屏幕上进行雷达扫描动画,雷达的半径在不同的手机上是不一样的.而我又没有在网上找到特别有用的材 ...

  5. 【百度地图API】百度API卫星图使用方法和卫星图对比工具

    百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度地图API卫星图 调用百度卫星图有两种方式,一是地图类型控件,一是 ...

  6. vue项目引入百度地图BMapGL鼠标绘制和BMap辅助工具

    目录 引言 1.引用百度地图 2.在项目中使用百度地图 2-1.页面结构部分 2-2.js逻辑部分 3-1.页面结构部分 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架.它旨 ...

  7. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

    一.如何进行标注 1.首先,我们需要找准标注的位置.比如,我想标注"中央民族大学"附近的网球场.那么,我转到坐标拾取工具页面,请点击http://openapi.baidu.com ...

  8. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍...

    摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. -------------------------------------------------- ...

  9. js GPS 百度地图坐标转换

    2019独角兽企业重金招聘Python工程师标准>>> 首先要引用百度地图的 <scrtipt>: <script type="text/javascri ...

最新文章

  1. https和server-status配置案例
  2. DCMTK:命令行应用程序修改DICOM文件中的标签
  3. 读书笔记--互联网必读《长尾理论》作者克里斯.安德森
  4. view如何接受json_如何将你的 ThinkJS 项目部署到 ZEIT 上
  5. html json to table,javascript - HTML - Convert json to table - Stack Overflow
  6. 关于信贷业务中常用的模型说明
  7. pycharm安装第三方包问题解决
  8. Unity 常用脚本:ScreenCapture
  9. nrr评分预测_NRR的完整形式是什么?
  10. Shell脚本之免交互操作
  11. MySQL(InnoDB剖析):08---InnoDB关键特性(插入缓冲(Insert Buffer)、两次写(doublewrite)、自适应哈希索引(AHI)、异步IO(AIO)、刷新邻接页)
  12. python如何调用pyd_C#调用pyd
  13. u盘里的视频文件损坏了怎么修复?
  14. 图神经网络对抗攻击的研究学习(一)
  15. Watering Grass UUV 1038 贪心
  16. 1718 Cos的多项式
  17. 微时代的微营销利器有哪些
  18. gradle-6.5.1-all 快速下载
  19. Latex 篇章结构 特殊字符
  20. UG曲面造型-曲率梳

热门文章

  1. 什么样的量化策略才算好策略?
  2. 万能ViewHolder
  3. 【Houdini18.5/入门】程序化uv01-将uv壳布局在指定范围
  4. 前3名突然变了,揭秘 7 月编程语言最新排行榜
  5. 高数 | 多元函数求极限 使用极坐标代换的条件与细节
  6. Vue源码学习之生成代码
  7. Java 打印堆栈的几种方法
  8. 网站推广实战:100条不容错过的经验
  9. UG12.0安装 出现 General Fault Exception 是硬件还是软件问题
  10. python贴吧发帖脚本-python+脚本