Matching closest longitude/latitude

后端 未结 1 1776
别那么骄傲
别那么骄傲 2021-02-06 19:34

Using Maxmind\'s GeoIP software, we can narrow down the LONG/LAT of an IP address to relative accuracy within 25 miles around 80% of the time.

Now, we don\'t want to use

相关标签:
1条回答
  • 2021-02-06 20:27

    The elegant (more accurate) way of doing this (but not blazing fast)

    // Closest within radius of 25 Miles
    // 37, -122 are your current coordinates
    // To search by kilometers instead of miles, replace 3959 with 6371
    SELECT feature_name, 
     ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
      * cos( radians( long ) - radians(-122) ) + sin( radians(37) ) 
      * sin( radians( lat ) ) ) ) AS distance 
    FROM geo_features HAVING distance < 25 
    ORDER BY distance LIMIT 1;
    

    Edit

    This is Haversine formula for calculating circular distance from geo-coordinates. Here are some implementation of this formula in different platforms

    R = earth’s radius (mean radius = 6,371km)
    Δlat = lat2− lat1
    Δlong = long2− long1
    a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
    c = 2.atan2(√a, √(1−a))
    d = R.c
    // Note that angles need to be in radians to pass to Trigonometric functions
    
    0 讨论(0)
提交回复
热议问题