Calcular la distancia entre dos puntos usando latitud y longitud
La tengo tanto para SQL Server como PHP
/**
* Calcular la distancia entre latitudes y longitudes
* @param decimal $latitude1 [description]
* @param decimal $longitude1 [description]
* @param decimal $latitude2 [description]
* @param decimal $longitude2 [description]
* @param string $unit [description]
* @param integer $decimals [description]
* @return decimal [description]
*/
function getDistance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Km', $decimals = 2) {
$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.2015;
switch ($unit) {
case 'Mi':
break;
case 'Km':
$distance = $distance * 1.609344;
break;
case 'm':
$distance = $distance * 1.609344 * 1000;
break;
}
return round($distance, $decimals);
}
Lenguaje del código: PHP (php)ALTER FUNCTION [dbo].[fn_DistanciaGPS]
( @lat1 AS decimal(18,8) ,
@lon1 AS decimal(18,8) ,
@lat2 AS decimal(18,8) ,
@lon2 AS decimal(18,8)
)
RETURNS decimal(18,3)
AS
BEGIN
-- routine body goes here, e.g.
DECLARE @P1 AS GEOGRAPHY
SET @P1 = GEOGRAPHY::Point(@lat1 , @lon1 , 4326)
-- en metros
RETURN @P1.STDistance(GEOGRAPHY::Point(@lat2, @lon2 , 4326))
END
Lenguaje del código: SQL (Structured Query Language) (sql)