node.js - Finding Longitude Angle when distance is known -


i'm attempting find longitude (east-west) angle of new point given latitude not change.

given: starting latitude, starting longitude, distance of travel in miles.

desired result: maximum , minimum longitude , latitude degrees "distance of travel" starting point.

code below:

attempt 1: use "close enough" constants:

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); } 

^ yields close latitude, distance of 5 miles. longitude same 3.93 miles measured google maps, high of variance.

attempt 2: 1 radian angle line 3,958.761 miles long (the earth's radius) therefore angle line x miles long x/3,958.761 radians.

 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)  } 

^ , again end 3.93 miles on longitude distance. right or @ least within .5 miles of error?

edit: attempt 3 using mbo's suggestion:

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;    } 

outputs:

{  longitude: -122.4458397,                                                                                                                           latitude: 37.7118042,                                                                                                                              maxlongitude: -122.37355611704736,                                                                                                                 minlongitude: -122.51812328295263,                                                                                                                 maxlatitude: 37.784058535260115,                                                                                                                   minlatiude: 37.63954986473989  }  

where max longitude ~3.85 miles starting position. still off, expecting like: -122.3515 ~5 miles

milesperdegreeoflongitude not constant value!

it depends on latitude. 69.172 value equator (zero latitude).
other latitudes:

truemilesperdegreeoflongitude = 69.172 * cos(latitude) 

note code uses degrees, math.cos works radians:

var latitude = 37.7118042; var milesperdegreeoflongitude = 69.172 * math.cos(latitude) 

try like

var milesperdegreeoflongitude = 69.172 * math.cos(latitude * math.pi / 180) 

my approx. calculation gives 0.09 latitudedelta , 122.44+-0.09 = 122.35, 122.53


Comments

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -