我试图在谷歌地图上画一条恒向线不断指向东北(45度)。这意味着如果我沿着这条线航行,每当我看我的指南针时,我将始终向西北方向行驶。 这是我用 Google 地图 API 创建的 JS 代码。 (如果您尝试测试,请更换 API 密钥)
我假设无论我画一条线或多条不同间隔的线,它们总是会相互重叠。但结果却并非如此。单独在线绘制的点越多,线与屏幕的角度越接近 45 度。 是由于精度原因还是存在错误? google.maps.geometry.computeOffset 做得正确吗?我应该相信这个功能吗?
function initMap() {
var mapOptions = {
zoom: 1,
center: {
lat: 30.363,
lng: 250.044
}
};
var map = new google.maps.Map(document.getElementById('map'), mapOptions);
var origin = new google.maps.LatLng(-25.363, 214.044);
var fineLoxo = drawRhumbLine(origin.lat(), origin.lng(), 45, 1000);
var fineDrawingPath = new google.maps.Polyline({
path: fineLoxo,
geodesic: false, // Set to false because loxodrome is not eodesic
strokeColor: '#000',
strokeOpacity: 1.0,
strokeWeight: 5
});
fineDrawingPath.setMap(map);
var brokenLoxoPath = drawRhumbLine(origin.lat(), origin.lng(), 45, 4000000);
var mediumDrawingPath = new google.maps.Polyline({
path: brokenLoxoPath,
geodesic: false, // Set to false because loxodrome is not geodesic
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});
mediumDrawingPath.setMap(map);
var oneLoxoPath = drawRhumbLine(origin.lat(), origin.lng(), 45, 16000000);
var straightDrawingPath = new google.maps.Polyline({
path: oneLoxoPath,
geodesic: false, // Set to false because loxodrome is not geodesic
strokeColor: '#00F',
strokeOpacity: 1.0,
strokeWeight: 2
});
straightDrawingPath.setMap(map);
}
function drawRhumbLine(startLat, startLng, bearingDegrees, interval) {
var dots = []
dots.push({
lat: startLat,
lng: startLng
});
for (let i = 0; i < 16000000 / interval; i++) {
var tempOrigin = new google.maps.LatLng(startLat, startLng)
var dest = google.maps.geometry.spherical.computeOffset(tempOrigin, interval, bearingDegrees);
startLat = dest.lat();
startLng = dest.lng();
dots.push({
lat: startLat,
lng: startLng
});
}
return dots;
}
<div id="map" style="height: 180px; width: 100%;"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=geometry&callback=initMap"
async defer></script>
来自维基百科恒向线, 恒向线是以相同角度穿过所有经度子午线的弧线。
强调以相同角度穿过所有经络,以备后用。
在墨卡托投影地图(因为它保留所有位置周围的角度),任何恒向线都是直线。
所以这已经暗示了,事实上使用更多更小的片段是正确的方法,但为什么有必要呢?
精准实现同角度穿越所有经脉。否则,如果您仅采用一个初始点并根据穿过第一条子午线的角度继续保持恒定的航向,则您将不会以相同的角度穿过下一个子午线。
再次引用维基百科恒向线:
在大圆上,到目的地点的方位不会保持恒定。如果要沿着大圆圈驾驶汽车,则需要固定方向盘,但要沿着恒向线行驶,则必须转动方向盘,当接近两极时,转动得更猛烈。
因此,如果您使用单个线段,您会得到一个大圆,但如果您想要一条恒向线,那么您需要许多线段;理论上是无限的,实际上最多与地图上的像素一样多。