FlutterAR -在真实的位置添加销

uqjltbpv  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(137)

我正在尝试使用ar_flutter_plugin在flutter平台上为移动的设备实现AR。我不知道如何计算ARNode对象的位置。添加对象到真实的的方法:

Future<void> addPointsOnmap() async {
    var location = await Geolocator.getCurrentPosition();
    var data = await GetObjekti.getResults(
        location.latitude.toString() + "," + location.longitude.toString(), 2);
    List<Result> results = data["results"];
    for (var i = 0; i < results.length; i++) {
      //I need to calculate value of position
      ARNode node = ARNode(
          type: NodeType.localGLTF2,
          uri: "assets/Chicken_01/Chicken_01.gltf",
          scale: Vector3(100.0, 100.0, 100.0),
          position: Vector3(0.0, 0.0, 0.0),
          rotation: Vector4(1.0, 0.0, 0.0, 0.0));
      results[i].arNodeName = node.name;
      bool? addNode = await arObjectManager.addNode(node);
      if (addNode!){
        nodes.add(node);
      }
    }
  }

方法getResults从API获取数据,来自响应的一个对象的示例为:

{
                "distance": 0.48079831661545036,
                "centroid": {
                    "lon": 16.343588998,
                    "lat": 46.294568693
                },
                "label": "Some label",
                "id": 106405,
                "object_id": 10575,
                "feature_class_id": 1431
            }

其中距离是计算距离从用户的地理位置的地方从结果公里(公里)和质心包含地理经度和纬度。任何建议或帮助,欢迎。

icnyk63a

icnyk63a1#

要计算ARNode对象在真实空间中的位置,需要使用该位置的GPS坐标(纬度和经度)以及从用户位置到该位置的距离。
要实现这一点,可以使用以下方法:
将纬度和经度坐标转换为笛卡尔坐标。
使用从用户位置到地点的距离来计算ARNode在x、y和z轴上的位置。
下面是一个示例实现:

double earthRadius = 6371; // Earth's radius in km

Vector3 position = Vector3(
    earthRadius *
        Math.cos(latitude * Math.pi / 180) *
        Math.cos(longitude * Math.pi / 180),
    earthRadius *
        Math.cos(latitude * Math.pi / 180) *
        Math.sin(longitude * Math.pi / 180),
    earthRadius * Math.sin(latitude * Math.pi / 180));

position = position.normalize() * distance;

ARNode node = ARNode(
    type: NodeType.localGLTF2,
    uri: "assets/Chicken_01/Chicken_01.gltf",
    scale: Vector3(100.0, 100.0, 100.0),
    position: position,
    rotation: Vector4(1.0, 0.0, 0.0, 0.0));

在本例中,我们将纬度和经度转换为笛卡尔坐标,然后使用距离来缩放位置,得到的位置向量表示ARNode对象在现实空间中相对于用户位置的位置。

相关问题