AR矢量数据可视化

矢量数据即表示地理空间信息的点、线、面对象。SuperMap AR可以展示二维的矢量数据也可以展示三维的矢量数据。二维面对象展示效果如下图:

图:AR矢量数据可视化

必备类库

进行矢量数据AR可视化必需的类库为sceneform-sm_v1.19.7.aar、com.supermap.ar.jar、com.supermap.data.jar,必需的so库为libimb.so或libimb2d.so。开发环境要求AndroidStudio 3.6.0以上,gradle 5.6.4以上。

关键代码

矢量数据可视化支持两种方式的绘制,一种是使用ARGeometry的方式绘制,该方式适用于水平面方向上的对象绘制,对象绘制时需要提供其在AR场景中的空间位置和方向角。另一种方式是使用Shape绘制,该方式适用于三维空间中任意维度的对象绘制,绘制时不需要提供空间位置和方向角信息,其自由度更高些。

点数据AR可视化

//方式1:使用ARGeoPoint绘制
ARGeoPoint arGeoPoint = new ARGeoPoint();
//设置相关属性
arGeoPoint.setParentNode(arEffectView);
arGeoPoint.setColor(0,0,0,1);
arGeoPoint.setRadius(0.02f);
//添加点
arGeoPoint.addPart(point);
//设置对象风格
ShapeStyle shapeStyle = new ShapeStyle();
    shapeStyle.setReflectance(0.5f);//反射率
    shapeStyle.setMetallic(0.6f);//金属度
    shapeStyle.setRoughness(0.2f);//粗糙度
    shapeStyle.setColor(0,0,0,1);//颜色
arGeoPoint.setShapeStyle(shapeStyle);
//方式2:使用Shape绘制
Shape shape = new Shape(/*材质类型*/BaseShape.MatType.OPAQUE);
shape.setParentNode(arEffectView);
//设置对象风格
Shape.t.setShapeStyle(shapeStyle);
//设置偏移量(相对父节点)
shape.drawSphere(new Vector(1,1,1),0.018f);

线数据AR可视化

List pointList = new ArrayList<>();
    pointList.add(new Point3D(0,0,0));
    pointList.add(new Point3D(1,0,0));
    pointList.add(new Point3D(1,1,0));
    pointList.add(new Point3D(0,1,0));
//方式1:使用ARGeoLine绘制
ARGeoLine arGeoLine = new ARGeoLine();
//设置相关属性
arGeoLine.setParentNode(arEffectView);
arGeoLine.setRadius(0.018f);
//添加点集和设置线风格
arGeoLine.addPart(pointList);
arGeoLine.setShapeStyle(shapeStyle);
//方式2:使用Shape绘制并设置线对象风格
Shape shape = new Shape(/*材质类型*/BaseShape.MatType.OPAQUE);
shape.setParentNode(arEffectView);
shape.drawLine(pointList);
shape.setShapeStyle(shapeStyle);
//方式2:使用Shape绘制面对象
Shape shape = new Shape(BaseShape.MatType.OPAQUE);
shape.setParentNode(arEffectView);
shape.setShapeStyle(shapeStyle);
shape.drawPolygon(BaseShape.Mode.TRIANGLE_FAN,pointList);

面数据AR可视化

pointList.add(new Point3D(0,0,0));
//方式1:使用ARGeoRegion绘制面对象
ARGeoRegion arGeoRegion = new ARGeoRegion();
//设置相关属性和面对象风格
arGeoRegion.setParentNode(arEffectView);
arGeoRegion.setShapeStyle(shapeStyle);
//添加点集
arGeoRegion.addPart(pointList);