问题描述:
当轨迹线有穿越国际日期变更线的情况时,变更线两边的线上的点,不会直接相连,而是横饶地图一圈。例如:轨迹线上有两点,经度分别是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]]