Android原生定位转火星坐标实现流程
本文将介绍如何通过Android原生定位API将定位坐标转换为火星坐标。火星坐标是一种经过偏移处理的坐标系统,主要用于解决国内地图偏移问题。
流程图
flowchart TD
A[开始] --> B[获取定位信息]
B --> C[判断是否为火星坐标]
C -->|是| D[直接使用定位坐标]
C -->|否| E[将定位坐标转换为火星坐标]
E --> F[使用转换后的火星坐标]
F --> G[结束]
代码实现步骤
步骤 | 操作 | 代码 |
---|---|---|
1 | 获取定位信息 | java Location location = locationManager.getLastKnownLocation(provider); |
2 | 判断是否为火星坐标 | java boolean isGCJ02 = LocationUtils.isLocationInChina(location.getLatitude(), location.getLongitude()); |
3 | 若是火星坐标,则直接使用定位坐标 | java if (isGCJ02) { // 直接使用定位坐标 } |
4 | 若不是火星坐标,则将定位坐标转换为火星坐标 | java LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); LatLng marsLatLng = LocationUtils.convertWGS84ToGCJ02(latLng); |
5 | 使用转换后的火星坐标 | java double marsLatitude = marsLatLng.latitude; double marsLongitude = marsLatLng.longitude; |
6 | 结束 | java // 结束操作 |
代码解释
-
获取定位信息
Location location = locationManager.getLastKnownLocation(provider);
通过LocationManager的getLastKnownLocation方法获取到最后一次的定位信息。这里需要传入一个定位提供者(provider),可以根据需求选择合适的定位方式,例如GPS定位、网络定位等。
-
判断是否为火星坐标
boolean isGCJ02 = LocationUtils.isLocationInChina(location.getLatitude(), location.getLongitude());
通过LocationUtils工具类的isLocationInChina方法判断当前定位是否为火星坐标。该方法会根据定位的经纬度判断是否在中国范围内,来判断是否为火星坐标。
-
若是火星坐标,则直接使用定位坐标
if (isGCJ02) { // 直接使用定位坐标 }
如果判断定位坐标为火星坐标,那么可以直接使用定位得到的经纬度进行相关操作。
-
若不是火星坐标,则将定位坐标转换为火星坐标
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); LatLng marsLatLng = LocationUtils.convertWGS84ToGCJ02(latLng);
如果判断定位坐标不是火星坐标,就需要通过LocationUtils工具类的convertWGS84ToGCJ02方法进行坐标转换。该方法将WGS84坐标转换为火星坐标。
-
使用转换后的火星坐标
double marsLatitude = marsLatLng.latitude; double marsLongitude = marsLatLng.longitude;
获取到转换后的火星坐标后,可以通过latitude和longitude属性获取到经纬度。
-
结束
在这一步,可以根据实际需求进行相关操作,例如将火星坐标显示在地图上、发送给服务器等。
状态图
stateDiagram
[*] --> 获取定位信息
获取定位信息 --> 判断是否为火星坐标
判断是否为火星坐标 --> 若是火星坐标
若是火星坐标 --> 使用定位坐标
若是火星坐标 --> 结束
判断是否为火星坐标 --> 若不是火星坐标
若不是火星坐标 --> 将定位坐标转换为火星坐标
将定位坐标转换为火星坐标 --> 使用转换后的火星坐标
使用转换