ThinkGeo.com    |     Documentation    |     Premium Support

Get Bearing (or Heading) from One PointShape to Another?

I'm looking for a simple utility or method to get the bearing (preferably in degrees) from one pointShape or vertex to another.  I've been searching for about a half hour, but can't find it.  I'm sure this exists somewhere in the API.


I could write my own, but then I would have to test it myself. :D



Nate,


 I recommend that you check out the Code Community project Displaying One-Way Streets, it has a custom Style, OneWayLineStyle that display an arrow on a street depending on the direction of the street. code.thinkgeo.com/projects/onewaystreets


And the logic used for that is based on a function to get the angle between two points. In the project, the function is called GetAngleFromTwoVertices and I think this is what you need.


 



private double GetAngleFromTwoVertices(Vertex b, Vertex c)
{
    double alpha = 0;
    double tangentAlpha = (c.Y - b.Y) / (c.X - b.X);
    double Peta = Math.Atan(tangentAlpha);

    if (c.X > b.X)
    {
        alpha = 90 + (Peta * (180 / Math.PI));
    }
    else if (c.X < b.X)
    {
        alpha = 270 + (Peta * (180 / Math.PI));
    }
    else
    {
        if (c.Y > b.Y) alpha = 0;
        if (c.Y < b.Y) alpha = 180;
    }
    return alpha;
}


 Perfect!  Thanks.



You are welcome.