Calcular la distancia entre 2 puntos (latitud y longitud)

Utilizo esta función para calcular la distancia entre 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);
}
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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Captcha cargando...