线段拼接算法

线段拼接算法

支持乱序,其他条件测试中。。。


var line1=[ [1578129.1099243, 5066588.4127197], [1578167.4275513, 5066174.4042969] ];
var line2=[ [1578167.4275513, 5066174.4042969], [1578190.6529541, 5065961.8389282] ];
var line3=[ [1578190.6529541, 5065961.8389282], [1578202.9593506, 5065854.7127075] ];
var line4=[ [1578202.9593506, 5065854.7127075], [1578209.6735229, 5065813.272522] ];
var line5=[ [1578336.1155396, 5065414.8660889], [1578216.2807007, 5065783.5911255], [1578209.6735229, 5065813.272522] ] ;

var linesArr = line1.concat(line2,line3,line4,line5);

var longLine = combineLines(linesArr);

  //线段拼接
  function combineLines(linesArr){
    var longLine=linesArr[0];
    let ptS = longLine[0];
    let ptE = longLine[longLine.length-1];
    let lineRet =[];
    let leftCount = 0;//剩下的点,如果匹配不上
    for (var i=1;i<linesArr.length;i++){
      let line = linesArr[i];
      let s = line[0];
      let e = line[line.length-1];

      if(ptS.toString()==s.toString()){//反序后拼接
        longLine.reverse();
        longLine = longLine.concat(line);
      }else if(ptS.toString()==e.toString()){
        longLine.reverse();
        line.reverse();
        longLine = longLine.concat(line);
      }else if(ptE.toString()==s.toString()){
        longLine = longLine.concat(line);
      }else if(ptE.toString()==e.toString()){
        line.reverse();
        longLine = longLine.concat(line);
      }else{
        lineRet.push(line);
      }

      ptS = longLine[0];
      ptE = longLine[longLine.length-1];

      //还有不匹配的重新循环
      if (i == linesArr.length-1 && lineRet.length>0){
        i=0;
        linesArr = lineRet;
        if (leftCount==lineRet.length) {
          return longLine;
        }
        leftCount = lineRet.length;
      }
    }
    return longLine;
  }

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值