Я борюсь с функциональностью камеры, которая (я думаю) обеспечит способ заставляет мой полигон придерживаться вершины моего дома по уменьшению, масштабированию и вращению (или перемещению камеры).Цезий - использование камеры для масштабирования многоугольника для соответствия положениям Lat-Lon при увеличении/уменьшении изображения
Этот вопрос следует ранее question, который был разрешен. Теперь мне нужна небольшая помощь в решении моей следующей проблемы.
Образец кода, который я пытаюсь выполнить, находится в the gold standard that appears to be baked into the existing camera controller here.
pickGlobe выполнен с параметрами зрителя, правильной координатой mousePosition в мировых координатах и параметром результата, который мне сейчас неинтересен. scene.pickPosition занимает c2-позицию (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.
YESSSSSS !!!!!!! – Patricia
Ну, CRAP! Он работал один раз. Могу я просто взять click.position? Или я должен объявить его как Cartesian2()? Они выглядят одинаково. Я пробовал это в обоих направлениях. Перезагрузили мою машину ..... Я готов кричать. Я отправлю код еще раз. – Patricia
Похоже, вы рядом. Да, если Цезий дает вам 'click.position', это уже правильная структура данных, чтобы пройти здесь. – emackey