![](/img/trans.png)
[英]Cesium how to scale a polygon to match Lat-Lon positions while zoom-in/zoom-out
[英]Cesium - using camera to scale a polygon to match Lat-Lon positions while zoom-in/zoom-out
我正在努力使用相機功能,(我認為)會提供一種方法來強制我的多邊形在縮小、放大和旋轉(或相機移動)時粘在我房子的頂部。
此問題遵循已解決的先前問題。 現在我需要一點幫助來解決我的下一個問題。
我試圖遵循的示例代碼位於黃金標准中,該標准似乎已融入到此處的現有相機控制器中。
pickGlobe使用查看器的參數、世界坐標中的正確 mousePosition 和結果參數執行,我現在不關心這些。 Scene.pickPosition采用 c2position ( Cartesian2 ) 並應返回 scratchDepthIntersection ( Cartesian3 )。 相反,返回的值是undefined 。
這是我的代碼:
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
是Cartesian2
包含窗口坐標,而不是一個Cartesian3
。 這樣的鼠標坐標通常來自Cesium.ScreenSpaceEventHandler
的回調,但也可以從原生 JavaScript 鼠標/觸摸事件構造。
如果您檢查mousePosition
的內容,您應該在窗口像素坐標中找到x
和y
值。
我看到您編輯了問題以包含mousePosition
的內容,並且看起來鼠標坐標已經轉換為橢圓體Cartesian3
坐標,這將阻止此代碼工作。 您希望原始鼠標坐標直接進入scene.pickPosition
以使其正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.