Skip to main content
Tweeted twitter.com/StackGIS/status/914039758489350145
deleted 24 characters in body; deleted 9 characters in body
Source Link
PolyGeo
  • 65.4k
  • 29
  • 114
  • 345

Should'nt thereShouldn't the bearing should be close enough? any help is appreciated

Should'nt there bearing should be close enough? any help is appreciated

Shouldn't the bearing be close enough?

edited title
Link
mimetype
  • 225
  • 2
  • 9

Azimuth Bearing of Two close lines in python

Source Link
mimetype
  • 225
  • 2
  • 9

Azimuth of Two close lines in python

In the picture below I am finding the bearing of two close lines. This is the picture of two complete lines. The brown line might be a bit large from the blue line.

Should not be the bearing of these two lines should be close to each other with a difference of may be few degrees?

I am checking whether they are equal or not by getting the difference of both lines bearing. I am using python to calculate the bearing and get the difference between there bearing. The code I am using to get out the bearing is:

def calculate_initial_compass_bearing(pointA, pointB):
    """
    Calculates the bearing between two points.
    The formulae used is the following:
        θ = atan2(sin(Δlong).cos(lat2),
                  cos(lat1).sin(lat2) − sin(lat1).cos(lat2).cos(Δlong))
    :Parameters:
      - `pointA: The tuple representing the latitude/longitude for the
        first point. Latitude and longitude must be in decimal degrees
      - `pointB: The tuple representing the latitude/longitude for the
        second point. Latitude and longitude must be in decimal degrees
    :Returns:
      The bearing in degrees
    :Returns Type:
      float
    """
    if (type(pointA) != tuple) or (type(pointB) != tuple):
        raise TypeError("Only tuples are supported as arguments")

    lat1 = math.radians(pointA[0])
    lat2 = math.radians(pointB[0])

    diffLong = math.radians(pointB[1] - pointA[1])

    x = math.sin(diffLong) * math.cos(lat2)
    y = math.cos(lat1) * math.sin(lat2) - (math.sin(lat1)
            * math.cos(lat2) * math.cos(diffLong))

    initial_bearing = math.atan2(x, y)

    # Now we have the initial bearing but math.atan2 return values
    # from -180° to + 180° which is not what we want for a compass bearing
    # The solution is to normalize the initial bearing as shown below
    initial_bearing = math.degrees(initial_bearing)
    compass_bearing = (initial_bearing + 360) % 360

return compass_bearing
     

In the end what I am doing is calculate there difference like that:

DifferenceInBearing = abs(BlueLineBearing - BrownLineBearing)

My problem is that the difference between them is huge just around 179.71922333147256 degrees.

The WKT values of blue line is:

LINESTRING (327854.7919419953 6809188.658530097, 327854.2288694207 6809187.856443238)

The Wkt value for brown line:

LINESTRING (327854.139971 6809187.723519, 327854.714599625 6809188.541579125)

Should'nt there bearing should be close enough? any help is appreciated

enter image description here