openlayers渲染轨迹线,跨越国际日期变更线(180°经线)时出现轨迹线横穿地图现象解决方案

问题描述:

当轨迹线有穿越国际日期变更线的情况时,变更线两边的线上的点,不会直接相连,而是横饶地图一圈。例如:轨迹线上有两点,经度分别是170,-170,这两个点不会以最近线段相连。

问题原因:

地图上的经度并不是处于-180至180范围,而是-720,-360,-180 ,0 ,180 ,360 ,720这种累加累减的地图,导致170,-170两个点,在实际地图上展示是170,190(-170+360所得)

解决方案:

判断相邻两点的经度差值,取差值的绝对值,如果大于180,代表穿越了变更线。此时将当前点的下一个点的经度进行±180的处理

function hasMissingLocationsCoordinate(v){
	let i = 0;
	while (i < v.length - 1) {
		const curr = v[i];
		const next = v[i + 1];

		const currLon = curr[0];
		const nextLon = next[0];
		//判断是否存在跨越子午线的点
		if (Math.abs(currLon - nextLon) > 180) {
			if (currLon < 0) {
				v[i+1]=[v[i+1][0]-360, v[i+1][1]];
			} else {
				v[i+1]=[v[i+1][0]+360, v[i+1][1]];
			}
			// 重新从头开始检查剩余的数据
		}
		i++;
	}
	return v;
}
let coordsArr = [[136.5982,-52.0719],[-139.4272,-53.7209]]
console.log(hasMissingLocationsCoordinate(coordsArr)) //输出[[136.5982,-52.0719],[220.5728,-53.7209]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值