SuperMap iClient3D for WebGL缓存图层批量偏移模型对象


前言

  在三维空间分析中,对模型的精确控制是必不可少的。SuperMap iClient 3D for WebGL 支持批量偏移模型,这意味着用户可以一次性对多个对象进行位置调整,这在城市规划、建筑设计和环境管理等领域中尤为重要。在本文中我们将探讨如何通过批量偏移模型来实现对三维空间数据的精确控制。我们将通过实例分析和操作步骤详解,向读者展示此功能的实现方法和应用场景


一、选定两点

//选一个模型基准点
var first = SuperMap3D.Cartesian3.fromDegrees(116.4526387723931, 39.91069801473176, 0)
var firstPoint = [116.4526387723931, 39.91069801473176, 0]
//基准点需要偏移到的点位
var second = SuperMap3D.Cartesian3.fromDegrees(116.45158484666833, 39.910758167457644, 0)
				

二、根据上述两点进行插值

// 计算两点之间的距离
var distance = SuperMap3D.Cartesian3.distance(first, second);
// 确定插入点的数量和间隔
var numberOfPoints = 1000; // 例如,插入10个点
var interval = distance / (numberOfPoints + 1); // 间隔
// 循环创建插入点
for (var i = 1; i <= numberOfPoints; i++) {
	var fraction = i * interval / distance; // 计算比例因子
	var interpolatedPoint = SuperMap3D.Cartesian3.lerp(first, second, fraction, new SuperMap3D.Cartesian3());
	//将笛卡尔坐标转换为经纬度坐标
	cartesianToLonLat(interpolatedPoint)
}

function cartesianToLonLat(position) {
	//通过笛卡尔坐标计算经纬度坐标
	var cartographic = SuperMap3D.Cartographic.fromCartesian(position);
	var longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
	var latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
	//这里height直接赋值为0
	var height = 0;
	//将点位都绘制出来看是否正确
	viewer.entities.add({
		position: position,
		point: {
			color: SuperMap3D.Color.SKYBLUE,
			pixelSize: 1,
			outlineColor: SuperMap3D.Color.YELLOW,
			outlineWidth: 3,
			disableDepthTestDistance: Number.POSITIVE_INFINITY
		}
	});
	points.push({
		"x": longitude,
		"y": latitude,
		"z": height
			})
		}

三、偏移方法

	function setOffset() {
			//根据之前两个点位得出来的新点
			var p = SuperMap3D.Cartesian3.fromDegrees(firstPoint[0], points[i].y, 0)
			//x偏移距离
			console.log(p, points[i])
			var xd = SuperMap3D.Cartesian3.distance(p, SuperMap3D.Cartesian3.fromDegrees(points[i].x, points[i].y, 0))
			//y偏移距离
			var yd = SuperMap3D.Cartesian3.distance(first, p)

			var options = {}
			//这里挑选id从1-399的对象进行移动
			for (var j = 1; j < 400; j++) {
				options[j] = new SuperMap3D.Cartesian3(-xd, yd, 0)
			}
			buildingLayer.setBatchObjsTranslate(options)
			if (i == points.length - 1) {
				clearInterval(interval)
			} else {
				i++
			}
		}

四、平移效果

模型对象批量偏移


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值