cesium 开启地形后画贴地线

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

cesium在没有开启地形时,加载geojson线数据没有问题,不会出现拖动地图,线数据也发生变化的现象,但在开启地形以后再加载地形数据,由于地形不平整,所以部分线数据就可能会被地形覆盖遮挡,看起来就会断断续续;还有可能拖动地图,线数据也会跟着移动,所以本文就记录一下,让线数据贴地的两种方法


一、Entity方式贴地

代码如下:

    viewer.entities.add({
        polyline: {
            positions: Cesium.Cartesian3.fromDegreesArray(line),//line要加载的线数据
            width: 10,//线宽
            clampToGround: true,//开启贴地
            material: Cesium.Color.RED//颜色
        }
    });
    //或者直接加载线数据地址,然后设置贴地即可
    var promise = Cesium.GeoJsonDataSource.load(urlLine, {
            clampToGround: true,//开启贴地
     });

二、primitive方式贴地

Primitive方式贴地, 需要使用GroundPolylinePrimitive和GroundPolylineGeometry来创建Primitive与Geometry对象,而不是使用Primitive和PolylineGeometry创建Primitive与Geometry对象,代码如下:

    viewer.scene.primitives.add(new Cesium.GroundPolylinePrimitive({
        geometryInstances: new Cesium.GeometryInstance({
            geometry: new Cesium.GroundPolylineGeometry({
                positions: Cesium.Cartesian3.fromDegreesArray(positions[i]),
                width: 15.0,//线宽
                vertexFormat: Cesium.PolylineColorAppearance.VERTEX_FORMAT
            }),
            attributes: {
                color: Cesium.ColorGeometryInstanceAttribute.fromColor(
                    new Cesium.Color.fromCssColorString("#0096ff")),
            }
        }),
        appearance: new Cesium.PolylineColorAppearance({
            translucent: false
        })
    }));

总结

Entity方式贴地更方便,但是效率不如primitive


版权声明:本文为zxl9669原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。