2016-03-19 6 views
0

これは私がこれらの3点の座標が...私は手動でそれを行うだろうかあるポイントから別のポイントへベアリングを計算する方法はありますか?

です:

var map = new mapboxgl.Map({ 
    container: 'map', 
    style: 'mapbox://styles/mapbox/streets-v8', 
    center: coordinateOne, 
    zoom: 19 
}); 
:私は最初の座標を中心に、このマップを、持っている

var coordinateOne = [-72.642883, 42.201343]; 
var coordinateTwo = [-72.639532, 42.200784]; 
var coordinateThree = [-72.637823, 42.199687]; 

次の座標が真っ直ぐである(正確ではないが、この例では十分近い)ように手動でベアリングを設定できます。

map.easeTo({ bearing:109, pitch:60, zoom:19 }); 
そして

私は直進と飛ぶことができる第2の座標:

map.easeTo({ bearing:130, pitch:60, zoom:19 }); 

そしてIはまっすぐ飛ぶことができる:私は手動で直進第3座標を入れ、再びベアリングを設定することができそして

map.flyTo({ center:coordinateTwo, zoom: 19 }); 

その第3座標へ:

map.flyTo({ center:coordinateThree, zoom: 19 }); 

自動的にそのベアリング値を計算する方法はありますか? ach flyToは常にまっすぐ進んでいますか?


私はthis questionを見つけました。これはJavaでこのアイディアをカバーしています。そこにあるコードに基づいて、というコードが出てきましたが、次のポイントをまっすぐに並べるのではなく、それに垂直な角度があります。

function bearing(lat1, lon1, lat2, lon2) { 
    var longDiff = lon2 - lon1; 
    var y  = Math.sin(longDiff) * Math.cos(lat2); 
    var x  = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(longDiff); 

    return (toDegrees(Math.atan2(y, x)) + 360) % 360; 
} 

function toDegrees (angle) { 
    return angle * (180/Math.PI); 
} 

答えて

0

私はTurfJSbearing測定が含まれていることを見つけたので、私はそれを使用しています。

私は2つの点の間のベアリングを返すために一緒にこの機能を置く:

function bearingBetween(coordinate1, coordinate2) { 
    var point1 = { 
    "type": "Feature", 
    "geometry": { 
     "type": "Point", 
     "coordinates": [coordinate1[0], coordinate1[1]] 
    } 
    }; 
    var point2 = { 
    "type": "Feature", 
    "geometry": { 
     "type": "Point", 
     "coordinates": [coordinate2[0], coordinate2[1]] 
    } 
    }; 
    return turf.bearing(point1, point2); 
} 

私は私のeaseToラインにすることを使用します。

map.easeTo({ bearing: bearingBetween(coordinateOne, coordinateTwo), pitch: 60, zoom: 19 }); 

TurfJSがこれを計算するために使用するコードは、その中にありますpackages/turf-bearing/index.jsファイル。

関連する問題