首页 / 浏览问题 / 三维GIS / 问题详情
DrawHandler的drawEvt回调结果如何使用
95EXP 2020年09月23日

http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/webgl/Build/Documentation/DrawHandler.html

描述的drawEvt 回调结果为包含属性名为object的point、polygon、polygon、marker对象,实测为包含属性名为object的f、H、L、y对象,从这些对象的属性上看,也未从文档中查到相应的point、polygon、polygon、marker对象

1个回答

您好,这些对象您是从哪里查看的,我打印了回调结果没有看到上述情况。
1,545EXP 2020年09月23日
handler.drawEvt.addEventListener(function(result){
    console.log(result);
});

Cesium.DrawMode.Point时打印的result

您好,我这边打印出来是Qd,每台电脑打印出来名称都不一样,具体用法就是比如说获取一个点的位置,var position = result.object.position;

result.object.position打印出来是

不像常用坐标系

这个坐标系是笛卡尔的,要是您要得到经纬度还要进行转换

var ellipsoid=viewer.scene.globe.ellipsoid;

var cartesian=new cesium.Cartesian(x,y,z);

var cartographic=ellipsoid.Cartesiantocartographic(Cartesian);

var lat=cesium.math.todegrees(cartographic.latitude);

lng=cesium.math.todegrees(cartographic.longitude);

var alt=cartographic.height;
有没有方便的方法转换成其它格式,比如KML、featurecollection等

另:ellipsoid中也没有Cartesiantocartographic方法

坐标转换您可以参考http://support.supermap.com.cn:8090/webgl/examples/editor.html#individualInformation,

// 获取点击位置笛卡尔坐标
var position = scene.pickPosition(e.position);
if (!position) {
position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
}
scenePosition = position; // 气泡相关 2/4
// 从笛卡尔坐标获取经纬度
var cartographic = Cesium.Cartographic.fromCartesian(position);
var longitude = Cesium.Math.toDegrees(cartographic.longitude);
var latitude = Cesium.Math.toDegrees(cartographic.latitude);
var height = cartographic.height;

还没有接口支持转换成其他格式。
cartographic.height都是负值?
height就是真实场景里的高度值,您那里获取到的都是负值吗。
对,都是drawEvt 回调结果得到的position
您用scene.getHeight(lon,lat)获取到的值也是负的吗。
VM216:1 Uncaught TypeError: Cannot read property 'depthStencilTexture' of undefined
    at pt (eval at <anonymous> (Cesium.js:25), <anonymous>:1:3038931)
    at wt (eval at <anonymous> (Cesium.js:25), <anonymous>:1:3043660)
    at bt (eval at <anonymous> (Cesium.js:25), <anonymous>:1:3041219)
    at Qe.getHeight (eval at <anonymous> (Cesium.js:25), <anonymous>:1:3087540)

调用scene.getHeight(lon,lat)异常如上

能发下您的代码吗,我这边测一下。
var cartographic = Cesium.Cartographic.fromCartesian(result.object.position);
var latitude = Cesium.Math.toDegrees(cartographic.latitude);
var longitude = Cesium.Math.toDegrees(cartographic.longitude);
var altitude = viewer.scene.getHeight(longitude, latitude);

我测试了您的代码没有问题,可能与场景有关,您换个场景试试,http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#pickPosition。另外height的话您查看一下相机高度值,var height=viewer.camera.positionCartographic.height;
相机高度值是有,但不是DrawHandler所点击的高度
...