从另一点以某个方位行驶一段距离后如何获得纬度和经度?
Posted
技术标签:
【中文标题】从另一点以某个方位行驶一段距离后如何获得纬度和经度?【英文标题】:How to get Latitude and Longitude after going a distance at certain bearing from another point? 【发布时间】:2021-10-27 20:56:56 【问题描述】:假设我有纬度和经度坐标 [30, -87]。从那时起,我希望能够在行驶 10 公里后找到我的位置,45 度方位。
我第一次尝试解决这个问题并不顺利,如下所示。这显然没有考虑到至少对我来说真正最难理解的部分。
var bearing = 45;
var distance = 10;
var position =
"latitude": 30,
"longitude": -87
;
var newLat = Math.cos(bearing) * distance + position.latitude;
var newLon = Math.sin(bearing) * distance + position.longitude;
我假设地球的半径会在某一时刻发挥作用,但我真的不知道从哪里开始,所以非常感谢任何帮助。
【问题讨论】:
这是一个集成问题。您可以将地球近似为球体并使用球坐标。 cos(bearing) 沿方位角变化。 sin(bearing) 沿极角变化。我觉得数学堆栈交换的人可以给出比你在 *** 上得到的更详细的解释 或地理信息系统。有很多链接指向各种复杂程度的解释,并且他们在讨论中使用不同的编程语言。 gis.stackexchange.com/questions/5821/… 【参考方案1】:我这里用过python代码:Get lat/long given current point, distance and bearing,并转换成JS代码得到答案。
代码如下:
const bearing = 45;
const bearing_rad = (bearing*Math.PI)/180;
const distance = 10;
const EARTH_RADIUS = 6378.1;
const initial_position =
"latitude": 30,
"longitude": -87
;
const init_lat = (initial_position.latitude*Math.PI)/180;
const init_lon = (initial_position.longitude*Math.PI)/180;
const final_lat = (180/Math.PI)*(Math.asin( Math.sin(init_lat)*Math.cos(distance/EARTH_RADIUS) + Math.cos(init_lat)*Math.sin(distance/EARTH_RADIUS)*Math.cos(bearing_rad)));
const final_lon = (180/Math.PI)*(init_lon + Math.atan2(Math.sin(bearing_rad)*Math.sin(distance/EARTH_RADIUS)*Math.cos(init_lat), Math.cos(distance/EARTH_RADIUS)-Math.sin(init_lat)*Math.sin(final_lat)));
console.log(final_lat, final_lon); // 30.06350049619102 -86.96303358059173
【讨论】:
以上是关于从另一点以某个方位行驶一段距离后如何获得纬度和经度?的主要内容,如果未能解决你的问题,请参考以下文章