for ( var i = 0 ; i < position. length; i++ ) {
for ( var q = i + 1 ; q < position. length; q++ ) {
for ( var j = 0 ; j < position[ i] . length - 1 ; j++ ) {
for ( var k = 0 ; k < position[ q] . length - 1 ; k++ ) {
var data = segmentsIntr ( position[ i] [ j] , position[ i] [ j + 1 ] , position[ q] [ k] , position[ q] [ k + 1 ] )
console. log ( "交叉点坐标" + data)
if ( data != false ) {
var item0 = [ ] ;
var item1 = [ ] ;
var alt0 = [ ] ;
var alt1 = [ ] ;
for ( var p = 0 ; p < j + 1 ; p++ ) {
item0. push ( position[ i] [ p] ) ;
alt0. push ( altarr[ i] [ p] ) ;
}
item0. push ( [ keepSixDecimal ( data[ 0 ] ) . toString ( ) , keepSixDecimal ( data[ 1 ] ) . toString ( ) ] ) ;
var distance = getDistance ( position[ i] [ j] [ 1 ] , position[ i] [ j] [ 0 ] , position[ i] [ j + 1 ] [ 1 ] , position[ i] [ j + 1 ] [ 0 ] ) ;
var distance0 = getDistance ( position[ i] [ j] [ 1 ] , position[ i] [ j] [ 0 ] , data[ 1 ] , data[ 0 ] ) ;
var ratio = ( distance0/ distance) . toFixed ( 2 ) ;
var height1 = ( Math. abs ( altarr[ i] [ j] - altarr[ i] [ j + 1 ] ) * ratio) . toFixed ( 2 ) ;
var distance00 = Math. sqrt ( Math. pow ( distance0, 2 ) + Math. pow ( height1, 2 ) ) . toFixed ( 2 ) ;
var time1 = 0 ;
var distance1 = 0 ;
for ( var z = 0 ; z < item0. length - 1 ; z++ ) {
if ( z == item0. length - 2 ) {
distance1 = distance00;
} else {
distance1 = getDistance ( item0[ z] [ 1 ] , item0[ z] [ 0 ] , item0[ z + 1 ] [ 1 ] , item0[ z + 1 ] [ 0 ] ) ;
}
var time = distance1 / speedarr[ i] [ z] ;
time1 = time1 + time;
}
for ( var y = 0 ; y < k + 1 ; y++ ) {
item1. push ( position[ q] [ y] )
alt1. push ( altarr[ q] [ y] )
}
item1. push ( [ keepSixDecimal ( data[ 0 ] ) . toString ( ) , keepSixDecimal ( data[ 1 ] ) . toString ( ) ] ) ;
var distance = getDistance ( position[ q] [ k] [ 1 ] , position[ q] [ k] [ 0 ] , position[ q] [ k + 1 ] [ 1 ] , position[ q] [ k + 1 ] [ 0 ] ) ;
var distance0 = getDistance ( position[ q] [ k] [ 1 ] , position[ q] [ k] [ 0 ] , data[ 1 ] , data[ 0 ] ) ;
var ratio = ( distance0/ distance) . toFixed ( 2 ) ;
var height2 = ( Math. abs ( altarr[ q] [ k] - altarr[ q] [ k + 1 ] ) * ratio) . toFixed ( 2 ) ;
var distance01 = Math. sqrt ( Math. pow ( distance0, 2 ) + Math. pow ( height2, 2 ) ) . toFixed ( 2 ) ;
var time2 = 0 ;
var distance2 = 0 ;
for ( var x = 0 ; x < item1. length - 1 ; x++ ) {
if ( x == item1. length - 2 ) {
distance2 = distance01;
} else {
distance2 = distance2 + getDistance ( item1[ x] [ 1 ] , item1[ x] [ 0 ] , item1[ x + 1 ] [ 1 ] , item1[ x + 1 ] [ 0 ] ) ;
}
var time = distance2 / speedarr[ q] [ x] ;
time2 = time2 + time;
}
if ( Math. abs ( time1 - time2) < 10 ) {
log. error ( namearr[ i] + "和" + namearr[ q] + "有撞机风险,请检查航线!!!" )
} else {
var height01 = Number ( height1) + altarr[ i] [ j] ;
var height02 = Number ( height2) + altarr[ q] [ k] ;
if ( Math. abs ( height01 - height02) <= 5 ) {
log. error ( namearr[ i] + "和" + namearr[ q] + "有撞机风险,请检查航线!!!" )
}
}
}
}
}
}
}
function getDistance ( lat1, lng1, lat2, lng2 ) {
var radLat1 = lat1* Math. PI / 180.0 ;
var radLat2 = lat2* Math. PI / 180.0 ;
var a = radLat1 - radLat2;
var b = lng1* Math. PI / 180.0 - lng2* Math. PI / 180.0 ;
var s = 2 * Math. asin ( Math. sqrt ( Math. pow ( Math. sin ( a/ 2 ) , 2 ) +
Math. cos ( radLat1) * Math. cos ( radLat2) * Math. pow ( Math. sin ( b/ 2 ) , 2 ) ) ) ;
s = s * 6378.137 ;
s = Math. round ( s * 10000 ) / 10000 * 1000 ;
return s;
}
function keepSixDecimal ( num ) {
var result = Math. round ( num * 1000000 ) / 1000000 ;
return result;
} ;