Cäsium - Skalieren eines Polygons mithilfe der Kamera, damit es beim Vergrößern / Verkleinern den Lat-Lon-Positionen entspricht

Ich habe Probleme mit der Kamerafunktionalität, die (meiner Meinung nach) eine Möglichkeit bietet,zwinge mein Polygon, um oben in meinem Haus zu bleiben beim Verkleinern, Vergrößern und Drehen (oder Bewegen der Kamera).

Diese Frage folgt einem früherenFrag das wurde behoben. Jetzt brauche ich ein bisschen Hilfe bei der Lösung meines nächsten Problems.

Der Beispielcode, dem ich folgen möchte, befindet sich indie goldene Norm, die hier in den vorhandenen Kameracontroller eingebrannt zu sein scheint.

pickGlobe wird mit den Parametern des Viewers, der korrekten Mausposition in Weltkoordinaten und einem Ergebnisparameter ausgeführt, was mir im Moment egal ist. scene.pickPosition nimmt die c2position Cartesian2) und sollte den scratchDepthIntersection Cartesian3). Stattdessen lautet der zurückgegebene Wertnicht definier.

Hier ist mein Code:

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!
    }

}

Hier sind meine Variablen:

Hier ist das Ergebnis:

Hier sind meine Fragen, um diesen Code zum Laufen zu bringen:

1. Warum wird scratchDepthIntersection nicht gesetzt? c2position ist ein Cartesian2 und c2MousePosition ist direkt von der mouse.click.position und scratchDepthIntersection ist ein neues Cartesian3.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage