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
Post a Comment