我在想要绘制矩形的地方有以下代码:
基本上使用这个:
var area = {
ll: {longitude: 139.33435143, latitude: 35.5385006, altitude: 0},
dir: {longitude: 139.33547146, latitude: 35.54034106, altitude: 0},
lllr: 300,
llul: 470,
};
ll
是矩形的LowerLeft点的坐标dir
是从LowerLeft点到矩形左上角的方向llul
和lllr
是距离我面临的问题如下:
var origin = new Cesium.Cartesian2(area.ll.longitude, area.ll.latitude);
var xAxis = new Cesium.Cartesian2(area.dir.longitude - area.ll.longitude, area.dir.latitude - area.ll.latitude);
var yAxis = new Cesium.Cartesian2(
Math.cos(Math.PI /2) * xAxis.x - Math.sin(Math.PI /2) * xAxis.y,
Math.sin(Math.PI /2) * xAxis.x + Math.cos(Math.PI /2) * xAxis.y
);
这应该给我一个originPoint,即xAxis和yAxis的方向。很好,如果我画线,我有正确的90angle。
但是当我尝试传递Cartesian3
var originPoint = new Cesium.Cartesian3.fromDegrees(origin.x, origin.y, 0);
var xVector = new Cesium.Cartesian3.fromDegrees(origin.x + xAxis.x, origin.y + xAxis.y, 0);
var yVector = new Cesium.Cartesian3.fromDegrees(origin.x + yAxis.x, origin.y + yAxis.y, 0);
var lrDir = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(xVector, originPoint, new Cesium.Cartesian3()), new Cesium.Cartesian3());
var lrSum = Cesium.Cartesian3.multiplyByScalar(lrDir, area.lllr, new Cesium.Cartesian3());
var lowerRight = Cesium.Cartesian3.add(originPoint, lrSum, new Cesium.Cartesian3());
var ulDir = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(yVector, originPoint, new Cesium.Cartesian3()), new Cesium.Cartesian3());
var ulSum = Cesium.Cartesian3.multiplyByScalar(ulDir, area.llul, new Cesium.Cartesian3());
var upperLeft = Cesium.Cartesian3.add(originPoint, ulSum, new Cesium.Cartesian3());
正如您在沙堡中看到的那样,它不会绘制矩形,而是会绘制90°角的东西。
我不太清楚这个问题。