关于cesium加载kml线贴地问题

关于cesium加载kml线贴地问题

关于cesium加载kml线贴地问题(cesium1.61)
在加载kml文件时,有的文件,线可以贴地,有的不能贴地,后来通过分析,主要原因是原始的kml文件中设置了贴地,在cesium中才贴地,否则在cesium中设置clampToGround: true也无法实现贴地;
1、原始数据格式
kml中贴地格式如下:tessellate 标签为1时贴地,没有设置贴地一般就没有tessellate这个标签;
在这里插入图片描述
2、cesium中加载kml(主要包含为线和点)

var options = {
	camera: viewer.scene.camera,
	canvas: viewer.scene.canvas,`在这里插入代码片`
	clampToGround: true, //开启贴地
};
var kmlx=viewer.dataSources.add(Cesium.KmlDataSource.load(url, options));
kmlx.then(function (dataSource) {
	viewer.flyTo(kmlx);
var entities = dataSource.entities.values;
	for (var i = 0; i < entities.length; i++) {
		var entity = entities[i];
	//只对_billboard进行设置。
		if (entity._billboard) {
			entity._billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY; //去掉地形遮挡
						entity.billboard.heightReference=Cesium.HeightReference.CLAMP_TO_GROUND;//设置贴地
			//设置文字标签,没有颜色(白色在cesium中非常不好看)替换成红色			
			entity._label.pixelOffset = new Cesium.Cartesian2(10, -20);
			if ("undefined" === typeof (entity._label.fillColor)) {
				entity._label.fillColor = Cesium.Color.RED;
			}//if
	   	}//if
	  }});

以上//只对_billboard进行设置。当为线时,设置entity.polyline.clampToGround=true可能出现错误,经过测试当发现当kml文件有标签时,是能这样设置贴地;当不存在,线就没这个属性,不能设置,就会导致出错。
3、 解决办法
第一种解决办法是:修改kml文件,在线的标签后添加
1
第二种解决办法是修改cesium.js,就是kml加载时,不管kml中有没有标签都设置成贴地;具体方法是:
(1)打开cesium.js查找 tessellate字符串。
(2)在该字符串后面找到如下代码:else if(t._clampToGround&&!f&&p),(3)去掉后面的&&p,
(4)保存即可,就是当cesium中设置了clampToGround,kml无论是否设置了贴地,在加载时都实现贴地。
(5)字符P是不同的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值