【发布时间】:2021-04-06 20:55:34
【问题描述】:
我正在尝试生成机场跑道图表,如下所示:
每个机场都有如下所示的跑道列表:
const runways = [
{
identifier1: "110L",
identifier2: "28R",
length: 3107,
width: 75,
latitude1: 37.66247544,
longitude1: -122.12726156,
latitude2: 37.65822686,
longitude2: -122.11795339,
},
{
identifier1: "10R",
identifier2: "28L",
length: 5694,
width: 150,
latitude1: 37.66204453,
longitude1: -122.12979078,
latitude2: 37.65426,
longitude2: -122.11273375,
},
];
如您所见,每条跑道都有起点和终点地理点。 对于我使用svg-airports 的视觉效果,上面的跑道示例如下所示:
<airport-diagram width="200" height="200">
<airport-runway
length-ft="3107"
true-heading="119"
offset-angle="29"
offset-x="300"
offset-y="1000"
>
<runway-id name="10L" pattern="left"></runway-id>
<runway-id name="28R" pattern="right"></runway-id>
</airport-runway>
<airport-runway
length-ft="5694"
true-heading="119"
offset-angle="29"
offset-x="300"
offset-y="-1000"
>
<runway-id name="10R" pattern="right"></runway-id>
<runway-id name="28L" pattern="left"></runway-id>
</airport-runway>
</airport-diagram>
如您所见,每条跑道都有以下值
- 长度
- 真标题
- 偏移角度
- 偏移量-x
- 偏移-y
我可以提供长度,因为我已经从我的airport 获得了该信息,并且我正在计算真实航向(方位),如下所示:
function radians(n) {
return n * (Math.PI / 180);
}
function degrees(n) {
return n * (180 / Math.PI);
}
function getBearing(startLat, startLong, endLat, endLong) {
startLat = radians(startLat);
startLong = radians(startLong);
endLat = radians(endLat);
endLong = radians(endLong);
var dLong = endLong - startLong;
var dPhi = Math.log(
Math.tan(endLat / 2.0 + Math.PI / 4.0) /
Math.tan(startLat / 2.0 + Math.PI / 4.0)
);
if (Math.abs(dLong) > Math.PI) {
if (dLong > 0.0) dLong = -(2.0 * Math.PI - dLong);
else dLong = 2.0 * Math.PI + dLong;
}
return (degrees(Math.atan2(dLong, dPhi)) + 180.0) % 180.0;
}
问题是,我可以根据跑道之间的地理坐标计算offset-angle、offset-x和offset-y吗?
P.S:偏移值以英尺为单位。
【问题讨论】:
-
将经度/纬度转换为笛卡尔坐标。那么它应该很容易..
标签: javascript math svg coordinates geo