首页 / 浏览问题 / 移动GIS / 问题详情
android 三维地图 绘制 几何图形 被建筑物遮挡问题
22EXP 2021年07月07日
我的是在绘制 线 面的时候  z轴的高度 要是低于建筑物   线和面的 显示效果 就会被建筑物遮挡   遮挡部分 线和面就会显示不出来    很不美观   我想要的效果是  就算z轴 比建筑物底  画的线 也要能浮在建筑物上显示   类似sdk自带的测量长度 所画出的线怎么实现?

1个回答

您好,绘制几何对象到跟踪图层上显示已经是在最上层显示的,但是如果和建筑物重叠,在某些
视角是会被建筑物遮挡的,如果想一直显示几何对象,可以设置几何对象的高度模式为绝对高度,然后设置Z值。
9,237EXP 2021年07月08日
我现在用的就是你说的这种方案 设置z轴高度   但是当地图缩放时 到贴近地面时 就会发现 自己画的集合图形 跑天上去了,体验很差  可不可以 在不设置z轴高度的情况下  也能让所画的线 显示在 建筑物之上 我看平台上是有这个功能的  手机端不知道有没有 而且 要是 给集合图形添加填充色 建筑物 会透过 几何图形
这个是手机端渲染机制不同,我这边测试一下跟研发沟通一下,有结果了回复您
android 有测量高度的 方法吗? 没有的话 也是需要自己画线完成的 也存在这个问题

麻烦您 有结果后 及时帮我反馈  我这边项目赶进度 谢谢

您好,新版本的iMobile是有量算高度的方法的,sceneControl.addTrackingListener(Tracking3DListener listener),通过监听事件获取高度值

已换到最新版 sdk 为什么测量高度 不走addTrackingListener 回调 而测量面积 距离 都可以

可以走addTrackingListener 回调呢,在回调里面写获取高度的方法:
 

if(m_sceneControl.getAction() == Action3D.MEASUREALTITUDE3D){

    Point3D point3d = new Point3D(event.getX(), event.getY(), event.getZ());
    double length = event.getCurrentHeight();
    Point3D point3d1 = new Point3D(point3d.getX(), point3d.getY(),
            point3d.getZ() + event.getCurrentHeight());
    Point3D[] p = {point3d, point3d1};
    Point3Ds point3Ds = new Point3Ds(p);
    GeoLine3D geoLine3D = new GeoLine3D(point3Ds);
    GeoStyle3D geoStyle3D = new GeoStyle3D();
    geoStyle3D.setLineWidth(15);
    geoStyle3D.setFillForeColor(new Color(255, 125, 0));
    geoStyle3D.setLineColor(new Color(255, 125, 0));
    geoStyle3D.setAltitudeMode(AltitudeMode.ABSOLUTE);
    geoLine3D.setStyle3D(geoStyle3D);
    double totalaltitude = event.getCurrentHeight();
    m_sceneControl.getScene().getTrackingLayer().add(geoLine3D, "高度");
    Toast.makeText(MainActivity.this, "共计" + totalaltitude + "米",
            Toast.LENGTH_LONG).show();
}

我这真不走 回调 啊  断点都不进 版本是 com.supermap.realspace_v1012.jar  apk也卸载了 缓存也清了 什么原因 

// 开启距离测量分析
public void startMeasureAnalysis() {
    dataBinding.SceneControl.setAction(Action3D.MEASUREDISTANCE3D);
}

// 开启高度测量分析
public void startMeasureHeight() {
    dataBinding.SceneControl.setAction(Action3D.MEASUREALTITUDE3D);
}

// 开启测量面积分析
public void startSurearea() {
    dataBinding.SceneControl.setAction(Action3D.MEASUREAREA3D);
}
/**
     * 事件交互监听
     */
    public void initAnalySis(SceneControl sceneControl, Tracking3DEvent event) {
        mData.myMesurePoint.add(new Point3D(event.getX(), event.getY(), event.getZ()));
        if (sceneControl.getAction() == Action3D.MEASUREDISTANCE3D) {
             //测量距离
            measureDistance(event);
        } else if (sceneControl.getAction() == Action3D.MEASUREALTITUDE3D) {
            Point3D point3d = new Point3D(event.getX(), event.getY(), event.getZ());
            double length = event.getCurrentHeight();
            Point3D point3d1 = new Point3D(point3d.getX(), point3d.getY(),
                    point3d.getZ() + event.getCurrentHeight());
            Point3D[] p = {point3d, point3d1};
            Point3Ds point3Ds = new Point3Ds(p);
            GeoLine3D geoLine3D = new GeoLine3D(point3Ds);
            GeoStyle3D geoStyle3D = new GeoStyle3D();
            geoStyle3D.setLineWidth(15);
            geoStyle3D.setFillForeColor(new Color(255, 125, 0));
            geoStyle3D.setLineColor(new Color(255, 125, 0));
            geoStyle3D.setAltitudeMode(AltitudeMode.ABSOLUTE);
            geoLine3D.setStyle3D(geoStyle3D);
            double totalaltitude = event.getCurrentHeight();
            sceneControl.getScene().getTrackingLayer().add(geoLine3D, "高度");
            Toast.makeText(MainActivity.this, "共计" + totalaltitude + "米",
                    Toast.LENGTH_LONG).show();

//            measureHeight(event);
        } else if (sceneControl.getAction() == Action3D.MEASUREAREA3D) {
            //测量面积
            measureSurearea(event);
        }
    }

这个问题已经修改了,请使用这个包:链接:https://pan.baidu.com/s/1qkQRoanMqtljKtHCytno3A
提取码:i3t4
可以回调了 反馈个问题 就是测量高度时 点第二个点后 会回调 好多次
老哥   问下这个问题 有结果没?
老哥   问下这个问题 有结果没
...