Цезий, как масштабировать многоугольник, чтобы соответствовать позициям широты и долготы при увеличении / уменьшении

Я ищу Цезиевого Гуру за небольшую помощь в поиске того, что мне нужно. Я новичок в Cesium, но я работал с учебными пособиями и некоторым существующим кодом, который я унаследовал.

В моем приложении «Цезий» я ввожу свой адрес, и вид увеличится до моей улицы. Ура! Затем я приближаюсь, чтобы нарисовать многоугольник вокруг моего дома. Существующий код делает это очень хорошо. тем не мениекогда я уменьшаю, а затем снова увеличиваю, мой многоугольник не остается верным положению широты моего дома.

Содержит ли Цезий утилиту для масштабирования пикселей до широтных координат? или мне нужно использовать что-то вроде distanceToBoundingSphere (boundingSphere) и рассчитать это самостоятельно? Я хочу только координаты x, y; Меня не волнует высота.

Я искал в демоверсиях и обучающих программах и до сих пор не нашел то, что я думаю, что я ищу. Может быть, я нашел что-то близкое, но пока не знаю достаточно, чтобы узнать, нашел я это или нет. Помогите!

============================ КОД ===================== =============

Сбор позиций для многоугольника:

SingleClick захватывает только координаты для этой точки и рисует ломаную линию, когда пользователь перетаскивает мышь в новую точку. Отсюда набор полилиний и набор координат для каждой точки.

    positionHandler.setInputAction(function (click) {
        cartesian = scene.camera.pickEllipsoid(click.position, ellipsoid);
        if (cartesian) {
            var setCartographic = ellipsoid.cartesianToCartographic(cartesian);
            asset.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) {
                self.loggingMessage((lla.length / 2) + ' Points Added');
            }
            Cesium.sampleTerrain(terrainProvider, 11, [cartographic])
                .then(function (updatedPositions) {
                    asset.latlonalt[2] = updatedPositions[0].height;
                    stage = 1;
                });
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

Затем DoubleClick берет координаты, записанные в функции singleClick, и вызывает self.createAsset ('add', asset) для создания многоугольника.

    positionHandler.setInputAction(function (doubleClick){
        if (asset.shape == 'Polygon') {
            var len = asset.latlonalt.length;
            if(len > 9) {
                asset.rad = (len / 3);
                console.log("Creating Asset");
                self.loggingMessage("Creating Asset");
                socket.emit('newElement', asset.cType, asset);
                self.createAsset('add', asset);
                viewer.entities.remove(entity);
                viewer.entities.remove(newCircle);
                viewer.entities.remove(newPolygon);
                viewer.entities.remove(newOutline);
                positionHandler = positionHandler && positionHandler.destroy();
            }else{
                console.log('3+ Positions Required');
                loggingMessage('3+ Positions Required.');
            }
        }
    }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)

Создание многоугольника:

            var newPolygon = viewer.entities.add({
                name : asset.id,
                polygon : {
                    hierarchy : Cesium.Cartesian3.fromDegreesArray(vertices),
                    material : rgba[0],
                    outline : true,
                    outlineColor : rgba[1]
                }
            });
            var newLabel = viewer.entities.add({
                position: Cesium.Cartesian3.fromDegrees(asset.latlonalt[1], asset.latlonalt[0], 1000),
                name: asset.id,
                label: {
                    text: asset.name,
                    font : '16px Helvetica'
                }
            });
            var newPoint = viewer.entities.add({
                position: Cesium.Cartesian3.fromDegrees(asset.latlonalt[1], asset.latlonalt[0], 0),
                name: asset.id,
                point : {
                pixelSize : 5,
                    color : Cesium.Color.RED,
                    outlineColor : Cesium.Color.RED,
                    outlineWidth : 2
                }
            });
            self.currentGeometry[asset.id] = {shape: newPolygon, label: newLabel, point: newPoint};

Похоже, мы используем Terrain (я думаю).

Какие цифры мне могут быть интересны:

Когда координаты собраны, только первые z не равны нулю:

Я беру это значение и заполняю другие значения z:

Теперь, когда я добавил значения z, в методе createAsset происходит ошибка. Мне нужно отследить эту проблему, чтобы увидеть результаты. Прямо сейчас это выглядит так:

ДЕЙСТВИТЕЛЬНО БОЛЬШОЙ, и контуры не удаляются.

Ответы на вопрос(1)

Ваш ответ на вопрос