AR高精定位

原理

AR高精定位是指通过接入第三方的高精度坐标,然后经过坐标转换来实时的校正AR坐标,从而提高AR场景的定位精度。目前AR支持的高精定位只有千寻定位。

应用场景

AR高精定位适应于室外场景,要求场地宽阔无遮挡,远离楼宇,立交桥,大树等空旷区域。可应用于室外的数据场景恢复,采集等诸多场景。

功能实现

//添加华为定位服务和依赖
//设置项目级 build.gradle
allprojects {
    repositories {
        // 添加Maven库地址
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

buildscript{
    repositories {
        // 添加Maven库地址
        maven { url 'https://developer.huawei.com/repo/' }
    }
    dependencies {
        //添加华为依赖
        classpath 'com.huawei.agconnect:agcp:1.5.2.300'
    }
}

// 设置模块级 build.gradle
dependencies {
    // 添加华为依赖
    implementation 'com.huawei.agconnect:agconnect-core:1.5.2.300'
}
apply plugin: 'com.huawei.agconnect'

// 通过OnLocationChangeListener接口的onLocationUpdate()方法回调得到定位数据。
public class QXActivity extends AppCompatActivity implements LocationQXManager.OnLocationChangeListener {
    private static LocationQXManager locationQXManager = null;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        locationQXManager = LocationQXManager.getInstance(this);
        // 设置接口回调
        locationQXManager.setOnLocationChangeListener(this);
        // 设置定位时间间隔,单位毫秒(默认是1000毫秒一个)
        locationQXManager.setInterval(1000);
        // 设置定位类型(默认是HIGH,代表高精度)
        locationQXManager.setType(LocationType.HIGH); 
    }
    @Override
    protected void onResume() {
        super.onResume();
        // 重启定位
        locationQXManager.onResume();    
    }
    @Override
    protected void onPause() {
        super.onPause();
        // 暂停定位
        locationQXManager.onPause();    
    }
    @Override
    public void onLocationUpdate(LocationResult location, boolean isHighPrecision) {
        if (isHighPrecision){
            System.out.println("当前是高精度~"+"经度:"+location.getLongitude()+"\n"+"纬度:"+location.getLatitude()+
                "\n"+"水平精度值:"+location.getAccuracy());
        }else{
            System.out.println("当前不是高精度~"+"经度:"+location.getLongitude()+"\n"+"纬度:"+location.getLatitude()+
                "\n"+"水平精度值:"+location.getAccuracy());
        }
    }
}