首页 / 浏览问题 / 组件GIS / 问题详情
iobject中将缓存放入工作空间后的定位问题
6EXP 2026年07月30日

在使用iobject java时我需要将缓存数据放入新建的工作空间中,我使用的场景定位方法是ensureVisible,但是有时候他的定位效果(保存的工作空间在桌面端打开后点击场景后定位的效果)和idesktopX桌面单独双击场景图层的定位效果不同,请帮忙查找一下原因

这是我的代码

scene.setWorkspace(workspace);
String sceneName = workspace.getScenes().get(0);
scene.open(sceneName);
Layer3Ds layer3Ds = scene.getLayers();
Rectangle2D maxbounds = null;
if (layer3Ds.getCount() == 1) {
    scene.ensureVisible(layer3Ds.get(0));
} else {
    for (int i = 0; i < layer3Ds.getCount(); i++) {
        Layer3D layer3D = layer3Ds.get(i);
        Rectangle2D rectangle2D = layer3D.getBounds();
        if (maxbounds == null) {
            maxbounds = rectangle2D;
        }
        maxbounds.union(rectangle2D);
    }
    if (maxbounds != null) {
        scene.ensureVisible(maxbounds, 1);
    }
}
workspace.getScenes().setSceneXML(sceneName, scene.toXML());//修改场景名为sceneName的场景内容
workspace.save();

1个回答

您好,ensureVisible(Rectangle2D bounds)仅根据经纬度矩形范围计算相机位置,没有考虑图层特性,而且某些缓存图层类型可能返回配置文件中的范围而非实际数据范围。所以与桌面定位效果不同。

在大多数情况下,这个代码仍然能满足定位想要,要是您有特殊业务需求,可以详细说下。
pys
440EXP 2026年07月31日
那如果我想实现出桌面双击定位的效果应该怎么做呢,没有前端页面的情况下
实现场景里双击图层定位,使用scene.ensureVisible(layer3D); 其中layer3D 是点击的图层。
老师,这个我测试的时候也用过的,效果最后和我获取范围是一样的
您可以截图给我对比下吗,这两个都能实现定位,为什么说两个的效果不一样呢

请看截图,前两张图是使用组件定位之后的效果,最后一张图是桌面端双击定位的效果

您的数据可以发我测试吗,百度网盘或者qq,我的qq是:3967984398
...