Césio - usando a câmera para dimensionar um polígono para corresponder às posições Lat-Lon enquanto aumenta ou diminui o zoom
Estou lutando com a funcionalidade da câmera que (acho) forneceria uma maneira deforçar meu polígono a ficar no topo da minha casa com menos zoom, mais zoom e rotação (ou movimento da câmera).
Esta pergunta segue um exemplo anteriorPergunta, questão isso foi resolvido. Agora preciso de uma ajudinha para resolver meu próximo problema.
O código de exemplo que estou tentando seguir está localizado emo padrão ouro que parece estar inserido no controlador de câmera existente aqui.
pickGlobe é executado com os parâmetros do visualizador, a posição correta do mouse nas coordenadas do mundo e um parâmetro de resultado, do qual não me importo no momento.scene.pickPosition assume a posição c2 (Cartesian2) e deve retornar o scratchDepthIntersection (Cartesian3) Em vez disso, o valor retornado éIndefinido.
Aqui está o meu código:
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!
}
}
Aqui estão minhas variáveis:
Aqui está o resultado:
Aqui estão minhas perguntas para obter esse código funcionando:
1. Por que scratchDepthIntersection não está sendo definido? c2position é um Cartesian2 e c2MousePosition é direto do mouse.click.position e scratchDepthIntersection é um novo Cartesian3.