Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculate distance given 2 points, latitude and longitude [duplicate]

Possible Duplicate:
MySQL latitude and Longitude table setup

I know this question has probably been asked many times, I've researched a lot and I need help with specific thing.

Lets say I have a form and user enters longitude and latitude, and I have a database which has table containing longitudes and latitudes, how would I search for a point or points in that table that are within 15 miles of radius?

like image 749
Grigor Avatar asked Dec 22 '11 03:12

Grigor


People also ask

How do you find the distance between two points using latitude and longitude?

For this divide the values of longitude and latitude of both the points by 180/pi. The value of pi is 22/7. The value of 180/pi is approximately 57.29577951. If we want to calculate the distance between two places in miles, use the value 3, 963, which is the radius of Earth.

How do you find the distance between two waypoints?

Distance between two points is the length of the line segment that connects the two points in a plane. The formula to find the distance between the two points is usually given by d=√((x2 – x1)² + (y2 – y1)²). This formula is used to find the distance between any two points on a coordinate plane or x-y plane.

What is the distance between 2 longitudes and 2 latitudes?

At the equator, the distance is 68.703 miles (110.567 kilometers). At the Tropic of Cancer and Tropic of Capricorn (23.5 degrees north and south), the distance is 68.94 miles (110.948 kilometers). At each of the poles, the distance is 69.407 miles (111.699 kilometers).

How do you convert latitude to distance?

One degree of latitude equals approximately 364,000 feet (69 miles), one minute equals 6,068 feet (1.15 miles), and one-second equals 101 feet. One-degree of longitude equals 288,200 feet (54.6 miles), one minute equals 4,800 feet (0.91 mile), and one second equals 80 feet.


2 Answers

You can use the formula that calculates distances between two points. For example:

function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { 
    $theta = $longitude1 - $longitude2; 
    $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + 
                (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * 
                cos(deg2rad($theta))); 
    $distance = acos($distance); 
    $distance = rad2deg($distance); 
    $distance = $distance * 60 * 1.1515; 
    switch($unit) { 
        case 'Mi': 
            break; 
        case 'Km' : 
            $distance = $distance * 1.609344; 
    } 
    return (round($distance,2)); 
}

You can also do something like:

$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) * 
            sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * 
            cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)* 
            pi()/180))))*180/pi())*60*1.1515
        ) as distance 
        FROM `MyTable` 
        HAVING distance >= ".$distance.";
like image 108
claire Avatar answered Oct 15 '22 14:10

claire


If you have the Lat/Lon of two points, you can get delta Lat and delta Lon and convert this to a distance along latitude and a distance along longitude, and use Pythagorean theorem.

Have you looked at pages like http://www.movable-type.co.uk/scripts/latlong.html? This has several ways of computing distance. So as you go through your list of points, you use the formula to calculate the distance from each point to the point of interest and keep only those that satisfy R<15 miles.

like image 28
Oliver Avatar answered Oct 15 '22 13:10

Oliver