calculating a gps coordinate given a point, bearing and distance

前端 未结 4 389
粉色の甜心
粉色の甜心 2021-02-04 21:30

I have a problem which draws my back in some project for some time now.

I\'m basically looking to trap a polygon using x,y points drawn by some script I\'ve written. lat1

相关标签:
4条回答
  • 2021-02-04 21:51

    The sin and cos functions expect their arguments in radians, not in degrees. The asin and atan2 functions produce a result in radians, not in degrees. In general, one needs to convert input angles (lat1, lon1 and bearing) from degrees to radians using math.radians() and convert output angles (lat2 and lon2) from radians to degrees using math.degrees().

    Note that your code has two other problems:

    (1) It doesn't allow for travel across the 180-degrees meridian of longitude; you need to constrain your answer such that -180 <= longitude_degrees <= +180.

    (2) If you are going to use this function extensively, you might like to remove the redundant calculations: sin(lat1), cos(dr), cos(lat1), and sin(dr) are each calculated twice.

    0 讨论(0)
  • 2021-02-04 21:53

    With geopy v2.0.0 (+ kilometers instead miles)

    from geopy import Point                                                                                                                                                                       
    from geopy.distance import geodesic                                                                                                                                                           
                                                                                                                                                                                                  
    distKm = 1                                                                                                                                                                                    
    lat1 = 35.68096477080332                                                                                                                                                                      
    lon1 = 139.76720809936523                                                                                                                                                                     
                                                                                                                                                                                                  
    print('center', lat1, lon1)                                                                                                                                                                   
    print('north', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 0).format_decimal())                                                                                                
    print('east', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 90).format_decimal())                                                                                                
    print('south', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 180).format_decimal())                                                                                              
    print('west', geodesic(kilometers=distKm).destination(Point(lat1, lon1), 270).format_decimal()) 
    

    result is

    center 35.6809647708 139.767208099
    north 35.6899775841, 139.767208099
    east 35.680964264, 139.778254714
    south 35.6719519439, 139.767208099
    west 35.680964264, 139.756161485
    
    0 讨论(0)
  • 2021-02-04 22:04

    eumiro your code
    result is Too many values to unpack
    how fix this

    from geopy import Point
    from geopy.distance import distance, VincentyDistance
    
    # given: lat1, lon1, bearing, distMiles
    lat2, lon2 = VincentyDistance(miles=9.32057).destination(Point(52.20444, 0.3605$
    print lat2, lon2
    
    0 讨论(0)
  • 2021-02-04 22:12

    Why don't you use nice libraries?

    from geopy import Point
    from geopy.distance import distance, VincentyDistance
    
    # given: lat1, lon1, bearing, distMiles
    lat2, lon2 = VincentyDistance(miles=distMiles).destination(Point(lat1, lon1), bearing)
    

    For lat1, lon1, distMiles, bearing = 42.189275,-76.85823, 0.5, 30 it returns 42.1955489, -76.853359.

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