在距离已知时查找经度角度

时间:2016-01-21 03:31:26

标签: node.js math latitude-longitude

我试图找到一个新点的经度(东西)角度,因为纬度也不会改变。

鉴于:开始纬度,开始经度,以英里为单位的旅行距离。

期望的结果:最大和最小经度和纬度度是"行程距离"从起点开始。

以下代码:

尝试1:使用"足够接近"常量:

function(longitude, latitude, travelRadius, next){
var milesPerDegreeOfLongitude = 69.172;
var milesPerDegreeOfLatitude = 69.2;
var location = { longitude : longitude, latitude : latitude };

var longitudeDelta = (travelRadius / milesPerDegreeOfLongitude); 
location.maxLongitude = longitude + longitudeDelta;
location.minLongitude = longitude - longitudeDelta;

var latitudeDelta = (travelRadius / milesPerDegreeOfLatitude);
location.maxLatitude = latitude + latitudeDelta;
location.minLatiude = latitude - latitudeDelta;

next(location);
}

^这产生非常接近的纬度,距离为5英里。但经度相同的经度约为3.93英里,以谷歌地图衡量,差异太大。

尝试2:一个弧度是3,958.761英里长的线(地球的半径)的角度,因此X英里长的线的角度是X / 3,958.761弧度。

 function(longitude, latitude, travelRadius, next){
 var radiusOfEarth = 3959.761;
 //... omitting latitude ...
 var distanceInRadians = (travelRadius / radiusOfEarth);
 var degrees = (180 / Math.PI) * distanceInRadians;
 location.maxLongitude = longitude + degrees;
 location.minLongitude = longitude - degrees;
 next(location)
 }

^我再次以经度距离约3.93英里。我能做些什么才能做到这一点,或者至少在0.5英里的误差范围内?

编辑:尝试3使用Mbo的建议:

var latitude = 37.7118042;
var longitude = -122.4458397;
var travelradius = 5;

function(latitude, longitude, travelRadius){

var milesPerDegreeOfLatitude = 69.172;
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude)
var location = { longitude : longitude, latitude : latitude };

var latitudeDelta = (travelRadius / milesPerDegreeOfLatitude);
location.maxLatitude = latitude + latitudeDelta;
location.minLatiude = latitude - latitudeDelta;

var longitudeDelta = (travelRadius / milesPerDegreeOfLongitude); 
location.maxLongitude = longitude + longitudeDelta;
location.minLongitude = longitude - longitudeDelta;

return location;   
}

输出:

{ 
longitude: -122.4458397,                                                                                                                          
latitude: 37.7118042,                                                                                                                             
maxLongitude: -122.37355611704736,                                                                                                                
minLongitude: -122.51812328295263,                                                                                                                
maxLatitude: 37.784058535260115,                                                                                                                  
minLatiude: 37.63954986473989 
} 

最大经度距离起始位置约3.85英里。仍然关闭,期待类似于:-122.3515,这是~5英里

1 个答案:

答案 0 :(得分:1)

milesPerDegreeOfLongitude不是常数值!

这取决于纬度。 69.172是赤道(零纬度)的值 对于其他纬度:

trueMilesPerDegreeOfLongitude = 69.172 * Cos(latitude)

请注意,您的代码使用度数,但Math.cos使用弧度:

var latitude = 37.7118042;
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude)

尝试类似

的内容
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude * Math.Pi / 180)

我的约。计算得出0.09为latitudeDelta和122.44 + -0.09 = 122.35,122.53