GPS/GIS Calculations: Algorithm to predict future position based on movement/mph?

后端 未结 2 1699
一个人的身影
一个人的身影 2021-02-06 06:21

Looking for resources or algorithm to calculate the following in a navigation app:

If my current GPS position is (0,0) and I\'m heading 32 degrees at 15 miles per hour,

相关标签:
2条回答
  • 2021-02-06 06:58

    Here are the formulas that you need.

    http://www.movable-type.co.uk/scripts/latlong.html

    Hope that helps.

    Bob

    [update] Here are the formulas in JavaScript (copied from source)

    var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R) +                       Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) ); var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1),                              Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));

    d=distance traveled=velocity x time R=radius of the earth

    0 讨论(0)
  • 2021-02-06 07:14

    Here is the complete parametric answer :

    variables :

    • heading : heading (i.e. backwards angle from azimuth 0°, in degrees)
    • speed : velocity (i.e. norm of the speed vector, in miles/hour)
    • lat0, lon0 : initial coordinates in degrees
    • dtime : time interval from the start position, in seconds
    • lat, lon : predicted coordinates in degrees
    • pi : the pi constant (3.14159...)
    • Rt : Earth radius in miles (6378137.0 meters which makes 3964.037911746 miles)

    In an (East, North) local frame, the position after the time interval is :

    x = speed * sin(heading*pi/180) * dtime / 3600;
    y = speed * cos(heading*pi/180) * dtime / 3600;
    

    (with coordinates in miles)

    From there you can compute the new position in the WGS84 frame (i.e. latitude and longitude) :

    lat = lat0 + 180 / pi * y / Rt;
    lon = lon0 + 180 / pi / sin(lat0*pi/180) * x / Rt;
    

    Edit : corrected the last line : *sin(phi) to /sin(phi)

    0 讨论(0)
提交回复
热议问题