×

Discussion Board

Results 1 to 6 of 6
  1. #1
    Registered User
    Join Date
    Dec 2008
    Posts
    13

    how to calculate distance (code please)

    Hello all,
    i have latitude and longitude values for two different points. i want to calculate the distance between them.

    Note: i have the formula and the sample program that works on python installed on my machine. But the code is not running on S60

    Can someone send me the entire code of how to calculate distance between two points that runs on S60?

  2. #2
    Super Contributor
    Join Date
    Feb 2008
    Location
    Belo Horizonte, Brazil
    Posts
    744

    Re: how to calculate distance (code please)

    Quote Originally Posted by trymukesh View Post
    Hello all,
    i have latitude and longitude values for two different points. i want to calculate the distance between them.

    Note: i have the formula and the sample program that works on python installed on my machine. But the code is not running on S60

    Can someone send me the entire code of how to calculate distance between two points that runs on S60?
    Well this depends on what unit you want this measuring. You want in meters, kilometers or what?


    BR,

    Rafael.

  3. #3
    Registered User
    Join Date
    Dec 2008
    Posts
    13

    Re: how to calculate distance (code please)

    Quote Originally Posted by Rafael T. View Post
    Well this depends on what unit you want this measuring. You want in meters, kilometers or what?


    BR,

    Rafael.
    Hi Rafael,

    Yes, need the distance in either Kilometers or miles
    Any help will be a life saver

    warm regards,
    Mukesh

  4. #4
    Super Contributor
    Join Date
    May 2004
    Location
    Tampere, Finland
    Posts
    524

    Re: how to calculate distance (code please)

    As always, Wikipedia has a good article on the subject: Great-circle distance

    From there you can see how to convert lat/long to radians:

    Code:
    import math
    
    def coordinate_to_radians(deg, min = 0.0, sec = 0.0):
        '''Convert a geographical coordinate into radians.'''
    
        if deg < 0.0:
            sign = -1.0
            deg = -deg
        else:
            sign = 1.0
    
        return (sign * (deg + (min + sec / 60.0) / 60.0)) * math.pi / 180.0
    ... and how to calculate the great-circle distance between two points on a sphere:

    Code:
    def angular_distance(standpoint_lat, standpoint_long, forepoint_lat, forepoint_long):
        '''Calculate the circular angular distance of two points on a sphere.'''
    
        phi_s = standpoint_lat
        phi_f = forepoint_lat
        lambda_diff = standpoint_long - forepoint_long
    
        cos = math.cos
        sin = math.sin
    
        num = (cos(phi_f) * sin(lambda_diff)) ** 2.0 + (cos(phi_s) * sin(phi_f) - sin(phi_s) * cos(phi_f) * cos(lambda_diff)) ** 2.0
        denom = sin(phi_s) * sin(phi_f) + cos(phi_s) * cos(phi_f) * cos(lambda_diff)
    
        return math.atan2(math.sqrt(num), denom)
    Then it's simply multiplication by Earths radius in whatever unit you wish:

    Code:
    def distance_between_coordinates_km(lat1, long1, lat2, long2):
        '''Calculate distance between two points on Earth in kilometers. lat and long are three-tuples (deg, min, sec).'''
    
        rad_lat1 = coordinate_to_radians(lat1[0], lat1[1], lat1[2])
        rad_long1 = coordinate_to_radians(long1[0], long1[1], long1[2])
        rad_lat2 = coordinate_to_radians(lat2[0], lat2[1], lat2[2])
        rad_long2 = coordinate_to_radians(long2[0], long2[1], long2[2])
    
        return angular_distance(rad_lat1, rad_long1, rad_lat2, rad_long2) * 6371.01  # km
    You may use 0 for min or sec, if you have the coordinates in decimal format. Here's an example using the example values from the Wikipedia article:


    • Nashville International Airport (BNA) in Nashville, TN, USA: N 36°7.2', W 86°40.2'
    • Los Angeles International Airport (LAX) in Los Angeles, CA, USA: N 33°56.4', W 118°24.0'


    Code:
    >>> distance_between_coordinates_km((36, 7.2, 0), (-86, 40.2, 0), (33, 56.4, 0), (-118, 24.0, 0))
    2886.4489734366994
    >>>

  5. #5
    Nokia Developer Champion
    Join Date
    Feb 2008
    Location
    Ahmedabad, Gujarat, India
    Posts
    3,852

    Re: how to calculate distance (code please)

    Quote Originally Posted by trymukesh View Post
    Hello all,
    i have latitude and longitude values for two different points. i want to calculate the distance between them.

    Note: i have the formula and the sample program that works on python installed on my machine. But the code is not running on S60

    Can someone send me the entire code of how to calculate distance between two points that runs on S60?
    Hello

    Please have a search in google with the title haversine formula and try to port that in python.

    Hope this helps you.
    Enjoy pythoning
    Gaba88

  6. #6
    Registered User
    Join Date
    Dec 2008
    Posts
    13

    Re: how to calculate distance (code please)

    Quote Originally Posted by jethro.fn View Post
    As always, Wikipedia has a good article on the subject: Great-circle distance

    From there you can see how to convert lat/long to radians:

    Code:
    import math
    
    def coordinate_to_radians(deg, min = 0.0, sec = 0.0):
        '''Convert a geographical coordinate into radians.'''
    
        if deg < 0.0:
            sign = -1.0
            deg = -deg
        else:
            sign = 1.0
    
        return (sign * (deg + (min + sec / 60.0) / 60.0)) * math.pi / 180.0
    ... and how to calculate the great-circle distance between two points on a sphere:

    Code:
    def angular_distance(standpoint_lat, standpoint_long, forepoint_lat, forepoint_long):
        '''Calculate the circular angular distance of two points on a sphere.'''
    
        phi_s = standpoint_lat
        phi_f = forepoint_lat
        lambda_diff = standpoint_long - forepoint_long
    
        cos = math.cos
        sin = math.sin
    
        num = (cos(phi_f) * sin(lambda_diff)) ** 2.0 + (cos(phi_s) * sin(phi_f) - sin(phi_s) * cos(phi_f) * cos(lambda_diff)) ** 2.0
        denom = sin(phi_s) * sin(phi_f) + cos(phi_s) * cos(phi_f) * cos(lambda_diff)
    
        return math.atan2(math.sqrt(num), denom)
    Then it's simply multiplication by Earths radius in whatever unit you wish:

    Code:
    def distance_between_coordinates_km(lat1, long1, lat2, long2):
        '''Calculate distance between two points on Earth in kilometers. lat and long are three-tuples (deg, min, sec).'''
    
        rad_lat1 = coordinate_to_radians(lat1[0], lat1[1], lat1[2])
        rad_long1 = coordinate_to_radians(long1[0], long1[1], long1[2])
        rad_lat2 = coordinate_to_radians(lat2[0], lat2[1], lat2[2])
        rad_long2 = coordinate_to_radians(long2[0], long2[1], long2[2])
    
        return angular_distance(rad_lat1, rad_long1, rad_lat2, rad_long2) * 6371.01  # km
    You may use 0 for min or sec, if you have the coordinates in decimal format. Here's an example using the example values from the Wikipedia article:


    • Nashville International Airport (BNA) in Nashville, TN, USA: N 36°7.2', W 86°40.2'
    • Los Angeles International Airport (LAX) in Los Angeles, CA, USA: N 33°56.4', W 118°24.0'


    Code:
    >>> distance_between_coordinates_km((36, 7.2, 0), (-86, 40.2, 0), (33, 56.4, 0), (-118, 24.0, 0))
    2886.4489734366994
    >>>
    Hi Jethro,
    You are a rare Gem.
    Thank you, saved my day (can sleep peacefully now)
    cheers,
    Your Fan (Mukesh)

Similar Threads

  1. Tell me, which is the better code option?
    By raj8nokiaforum in forum Symbian C++
    Replies: 3
    Last Post: 2008-10-21, 22:36
  2. Replies: 2
    Last Post: 2007-10-05, 20:40
  3. Replies: 9
    Last Post: 2006-03-30, 08:36
  4. Link errors when trying to Display bitmap
    By Bkc82 in forum Symbian Media (Closed)
    Replies: 1
    Last Post: 2006-01-16, 22:46
  5. Why is client code to CSocketEngine hanging at Access Point dialogue?
    By nawkboy in forum Symbian Networking & Messaging (Closed)
    Replies: 2
    Last Post: 2003-03-11, 11:16

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •