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 // 结束操作

代码解释

  1. 获取定位信息

    Location location = locationManager.getLastKnownLocation(provider);
    

    通过LocationManager的getLastKnownLocation方法获取到最后一次的定位信息。这里需要传入一个定位提供者(provider),可以根据需求选择合适的定位方式,例如GPS定位、网络定位等。

  2. 判断是否为火星坐标

    boolean isGCJ02 = LocationUtils.isLocationInChina(location.getLatitude(), location.getLongitude());
    

    通过LocationUtils工具类的isLocationInChina方法判断当前定位是否为火星坐标。该方法会根据定位的经纬度判断是否在中国范围内,来判断是否为火星坐标。

  3. 若是火星坐标,则直接使用定位坐标

    if (isGCJ02) {
        // 直接使用定位坐标
    }
    

    如果判断定位坐标为火星坐标,那么可以直接使用定位得到的经纬度进行相关操作。

  4. 若不是火星坐标,则将定位坐标转换为火星坐标

    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    LatLng marsLatLng = LocationUtils.convertWGS84ToGCJ02(latLng);
    

    如果判断定位坐标不是火星坐标,就需要通过LocationUtils工具类的convertWGS84ToGCJ02方法进行坐标转换。该方法将WGS84坐标转换为火星坐标。

  5. 使用转换后的火星坐标

    double marsLatitude = marsLatLng.latitude;
    double marsLongitude = marsLatLng.longitude;
    

    获取到转换后的火星坐标后,可以通过latitude和longitude属性获取到经纬度。

  6. 结束

    在这一步,可以根据实际需求进行相关操作,例如将火星坐标显示在地图上、发送给服务器等。

状态图

stateDiagram
    [*] --> 获取定位信息
    获取定位信息 --> 判断是否为火星坐标
    判断是否为火星坐标 --> 若是火星坐标
    若是火星坐标 --> 使用定位坐标
    若是火星坐标 --> 结束
    判断是否为火星坐标 --> 若不是火星坐标
    若不是火星坐标 --> 将定位坐标转换为火星坐标
    将定位坐标转换为火星坐标 --> 使用转换后的火星坐标
    使用转换