AR图片定位

原理

在场景中放置一张或者多张图片,并将每一张图片与真实的坐标(可以是户型图的对应坐标,也可以是地理坐标)关联,关联坐标信息填写到指定的配置文件中。对某张图片识别成功后即可获得到该图片所关联的真实坐标,至此,移动设备通过扫描图片的方式完成了初始定位。

应用场景

AR图片定位主要应用于室内或者室外无GPS等高精度定位数据的场景,AR图片定位一般和惯导结合进行应用,例如巡检,导航,游览等。AR图片定位的精度取决于图片对应坐标来源本身的精度和图片放置的精度,若数据来源精度高且放置准确,图片定位的精度可低于厘米级,甚至无限趋近于0。

功能实现

必备类库

进行AR惯导定位功能开发必需的类库为com.supermap.ar.jar、com.supermap.data.jar,必需的so库为libarcore_sdk_c.so、libarcore_sdk_jni.so、libimb.so。开发前,请联系我们,获取相应类库。

关键代码

//获取图片
Bitmap bitmapA = BitmapFactory.decodeFile(sdcard+"/pointA.png");
Bitmap bitmapB = BitmapFactory.decodeFile(sdcard+"/pointB.png");
Bitmap bitmapC = BitmapFactory.decodeFile(sdcard+"/pointC.png");
//设置图片扫描器
ImageScanner imageScanner = ImageScanner.getInstance(arView);
//添加图片
imageScanner.addImage("pointA",bitmapA);
imageScanner.addImage("pointB",bitmapB);
imageScanner.addImage("pointC",bitmapC);
//添加监听
imageScanner.addImageListener(new ImageScanner.ImageListener() {
  @Override
  public void onImageChanged(Collection<AugmentedImage> images) {
    for (AugmentedImage e:images) {
      switch (e.getName()){
        case "pointA":
          //设图片的地理坐标为103,30
          Location imgLocation = new Location(103,30,0);
          //获取图片位置的pose
          Pose centerPose = e.getCenterPose();
          Point3D imgPosition = PointConvertTool.convertToPoint3D(new Vector3(centerPose.tx(), centerPose.ty(), centerPose.tz()));
          //计算相机启动的AR坐标
          Location location = ConvertTool.calculateDeviceLocation(imgLocation, imgPosition, arView.getAzimuth());
          //之后可通过惯导计算场景中任意位置的地理坐标
        break;
      }
    }
  }
});