首页 / 浏览问题 / 三维GIS / 问题详情
怎么获取屏幕图层的对象经纬度
82EXP 2018年06月29日
根据文档

    //创建图片对象
    var pic = new SuperMap.Web.Core.GeoPicture3D();
    //指定图片的网络地址
    var style = new SuperMap.Web.Core.Style3D();
    var pictureurl = "http://support.supermap.com.cn:8090/plugin/RealspaceSample/iClient.png";
    pic.fromImageFile(pictureurl);

    //设置图片的大小和位置,屏幕图层有两种单位:像素和比例。这里以像素为单位
    pic.set_height(100);
    pic.set_width(100);
    pic.set_position(new SuperMap.Web.Core.Point3D(100, 100, 0));

    //屏幕图层中只能加feature3D,所以这里得把geometry构造成feature3D对象
    var feature3d = new SuperMap.Web.Core.Feature3D();
    feature3d.set_geometry(pic);

    var screenLayer = csm.scene.get_screenLayer3D();
    //设置屏幕图层的单位为像素
    screenLayer.set_xUnit(SuperMap.Web.Realspace.ScreenCoordinateUnit.PIXEL);
    screenLayer.set_yUnit(SuperMap.Web.Realspace.ScreenCoordinateUnit.PIXEL);
    //设置屏幕图层可见
    screenLayer.set_isVisible(true);
    //将feature3D加入屏幕图层
    screenLayer.add(feature3d, "SuperMap");

创建了该对象, 怎么获取它的屏幕坐标?  它的屏幕坐标可以转换成当前三维场景的对应的经纬度xyz吗?

1个回答

可以的。通过SceneControl.PixelToGlobe(Point2D)可以实现屏幕坐标转地理坐标。
5,560EXP 2018年06月29日
但是我现在,怎么去获得当前feature3D对象的屏幕坐标呢?
pic.set_position(new SuperMap.Web.Core.Point3D(100, 100, 0));

这一句设置了他的位置
但是,我通过编辑功能,将图片移动到屏幕其他位置,查看这个值的时候,还是100 100 0。这是为什么?
看了一下确实获取不到改变后的位置,可能是没有开相关接口。

那么您可以通过监听鼠标事件的方式获取更新的位置,具体步骤是:

鼠标按下时记录当前鼠标位置;

鼠标松开时记录松开后的位置;

这俩位置的差值加上之前的position值即为新的位置。
...