Find the closest latitude and longitude

前端 未结 3 1654
情深已故
情深已故 2020-12-08 03:05

I\'m writing a small program and to improve efficiency, I need to be able to find the closest latitude and longitude in my array.

Assume you have the following code:

3条回答
  •  死守一世寂寞
    2020-12-08 03:53

    For a correct calculation of the distance between points on the globe, you need something like the Haversine formula. Using the Python implementation offered in this answer, you could code it like this:

    from math import cos, asin, sqrt
    
    def distance(lat1, lon1, lat2, lon2):
        p = 0.017453292519943295
        a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
        return 12742 * asin(sqrt(a))
    
    def closest(data, v):
        return min(data, key=lambda p: distance(v['lat'],v['lon'],p['lat'],p['lon']))
    
    tempDataList = [{'lat': 39.7612992, 'lon': -86.1519681}, 
                    {'lat': 39.762241,  'lon': -86.158436 }, 
                    {'lat': 39.7622292, 'lon': -86.1578917}]
    
    v = {'lat': 39.7622290, 'lon': -86.1519750}
    print(closest(tempDataList, v))
    

提交回复
热议问题