铯 – 使用相机缩放多边形以在放大/缩小时匹配Lat-Lon位置

我正在努力的相机function(我认为)将提供一种方法来强制我的多边形坚持我的房子的顶部放大,放大和旋转(或相机移动)。

这个问题跟在先前已经解决的问题之后。 现在我需要一点帮助解决我的下一个问题。

我试图遵循的示例代码位于现有的摄像机控制器中的黄金标准 。

pickGlobe是用查看器的参数,世界坐标中正确的mousePosition和一个结果参数来执行的,我现在不太在意。 scene.pickPosition采用c2position( Cartesian2 ),并返回scratchDepthIntersection( Cartesian3 )。 相反,返回的值是未定义的

这是我的代码:

function clickAction(click) { var cartesian = scene.camera.pickEllipsoid(click.position, ellipsoid); if (cartesian) { var setCartographic = ellipsoid.cartesianToCartographic(cartesian); collection.latlonalt.push( Cesium.Math.toDegrees(setCartographic.latitude).toFixed(15), Cesium.Math.toDegrees(setCartographic.longitude).toFixed(15), Cesium.Math.toDegrees(setCartographic.height).toFixed(15) ); lla.push(Cesium.Math.toDegrees(setCartographic.longitude), Cesium.Math.toDegrees(setCartographic.latitude)); if (lla.length >= 4) { console.log((lla.length / 2) + ' Points Added'); } enableDoubleClick(); enableDraw(); testMe(click.position); <--------------------- straight from the mouse click } } var pickedPosition; var scratchZoomPickRay = new Cesium.Ray(); var scratchPickCartesian = new Cesium.Cartesian3(); function testMe(c2MousePosition) { <--------------------- straight from the mouse click if (Cesium.defined(scene.globe)) { if(scene.mode !== Cesium.SceneMode.SCENE2D) { pickedPosition = pickGlobe(viewer, c2MousePosition, scratchPickCartesian); } else { pickedPosition = camera.getPickRay(c2MousePosition, scratchZoomPickRay).origin; } } } var pickGlobeScratchRay = new Cesium.Ray(); var scratchRayIntersection = new Cesium.Cartesian3(); var c2position = new Cesium.Cartesian2(); function pickGlobe(viewer, c2MousePosition, result) { <--------------------- straight from the mouse click c2position = c2MousePosition; <--------------------- setting to Cartesian2 var scratchDepthIntersection = new Cesium.Cartesian3(); if (scene.pickPositionSupported) { scratchDepthIntersection = scene.pickPosition(c2MousePosition); <--------------------- neither works! } } 

这是我的变数:

在这里输入图像说明

结果如下:

在这里输入图像说明

这是我的问题,以获得此代码的工作:

1.为什么scratchDepthIntersection没有设置? c2position是一个Cartesian2,c2MousePosition是直接从mouse.click.position和scratchDepthIntersection是一个新的Cartesian3。

mousePosition的正确值是包含窗口坐标的Cartesian3 ,而不是Cartesian3 。 这样的鼠标坐标通常来自Cesium.ScreenSpaceEventHandler的callback,但也可以从本地JavaScript鼠标/触摸事件构build。

如果您检查mousePosition的内容,您应该在窗口像素坐标中findxy值。

我看到你编辑的问题,包括mousePosition的内容,它看起来像鼠标坐标已被转换成椭球Cartesian3坐标,这将阻止此代码的工作。 你想要原始的鼠标坐标直接进入scene.pickPosition这个工作。