首页 / 浏览问题 / 三维GIS / 问题详情
webgl怎么获取俩个卡迪尔坐标的距离
40EXP 2020年08月13日

怎么获取俩个迪尔坐标的距离 如下面俩个坐标的距离米
 

        {

          heading: 1.6165780437751147,

          pitch: -0.15193583271972821,

          position_x: -2474026.3668973297,

          position_y: 4590620.8978860555,

          position_z: 3672336.501861552,

          roll: 6.283185307179586,

          time: 10,

        },

        {

          heading: 1.6165829765351827,

          pitch: -0.15193583271972888,

          position_x: -2474065.6687441943,

          position_y: 4590599.651837615,

          position_z: 3672336.501861552,

          roll: 6.283185307179586,

          time: 10,

        },

移动相机是每调用一次就移动amount的距离吗

1个回答

1,545EXP 2020年08月14日
距离算的和我用js算的一样,所以问题出在了哪里?是move的移动距离不准吗?还是算出来的距离不是米?还是move移动的单位不是米

这是我用来移动相机的方法

您把完整代码发我一下吧我测试一下,您这是通过相机定位的两个位置,计算这两个飞行站点之间的距离吗。

是的想实现的是一个数组有多个点,相机在这几个点间飞行从a到b,然后b到c依次下去。结果计算出的a-b距离40米然后一直飞不会停。文件地址 https://cowtransfer.com/s/30b00f51762f4f

您好,

       for(var j=1;j<length;j++){
                    //将笛卡尔坐标转为经纬度坐标,用于绘制线
                    position_1=new Cesium.Cartesian3(that.allSites[j].position_x,that.allSites[j].position_y,that.allSites[j].position_z)
                    point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
                    x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
                    y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
                    z1 = point_1_cartographic.height;

                    position_2=new Cesium.Cartesian3(that.allSites[j-1].position_x,that.allSites[j-1].position_y,that.allSites[j-1].position_z)
                    point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
                    x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
                    y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
                    z2 = point_2_cartographic.height;
                    that.entities.add({
                          id:50000+j,
                       // name : drowallStops.length,
                        polyline : {
                            positions : Cesium.Cartesian3.fromDegreesArrayHeights([x1,y1,z1,x2,y2,z2]),
                            width : 5,
                            material : Cesium.Color.WHITE
                        }
                    });
                 
                 //显示两条线的长度
                   var dis= Cesium.Cartesian3.distance(position_1,position_2);
                         
                         console.log('距离');
                         console.log(dis);
                 
                 
                 
                }  这样是可以获取到两个飞行站点的位置的。
这个做不了我的需求,我是要实现的是一个数组有多个点,相机在这几个点间飞行从a到b,然后b到c依次下去。在a到b的时候做一些操作如出现一个弹框/相机转移角度等,现在遇到的问题时相机移动的方法执行的距离和文档上不一样我无法通过相机移动了多少距离来判断相机是否到达b点。
您好,您直接加一个到达的监听事件可以满足您要求吗,例如flyManager.stopArrived.addEventListener(function (routeStop) {
                routeStop.waitTime = 1; // 在每个站点处停留1s
            });。

我这里没有用飞行事件,用的是相机移动事件,产生的问题是文档的相机移动是米实际中不是的,比如两点直接的距离是40米   相机以1m/s移动结果3秒就跑过去了,我的监听事件显示的还是相机移动了3m,经验证两点直接距离就是40m,移动事件也没有问题

这个可以从A到B到c但是加减速是有问题的 传的参数不是速度是时间,就很怪

...