Calcular distancias entre dos puntos

  • 0 Respuestas
  • 28 Vistas
*

noshy

  • *****
  • 23
    • Delphi desde cero
Calcular distancias entre dos puntos
« : enero 16, 2021, 04:56:22 pm »
Quería compartir una función para calcular la distancia entre dos puntos dados a través de Latitud y Longitud, teniendo en cuenta la curvatura de la tierra cuando la distancias son muy largas.

En el siguiente enlace, puede ver el artículo completo.

Calcular distancias entre dos puntos

Y la función para Delphi, es la siguiente:

Código: [Seleccionar]
Uses   System.Math;
 
...
 
Type
  TPoint = record
    Lat: Double;
    Lng: Double;
  end;
  TPointRad = record
    Lat: Extended;
    Lng: Extended;
  end;
 
...
 
function Distancia(Origin, Detiny: TPoint; Curvature: Boolean = False): Double;
var
  d, s, c: Double;
  OriginRad: TPointRad;
  DestinyRad: TPointRad;
  CurvatureAux: Double;
Const
  R = 6378137; // Medium earth radius in meter
begin
 
  OriginRad.Lat := DegToRad(Origin.Lat);
  OriginRad.Lng := DegToRad(Origin.Lng);
  DestinyRad.Lat := DegToRad(Detiny.Lat);
  DestinyRad.Lng := DegToRad(Detiny.Lng);
  if (OriginRad.Lng = DestinyRad.Lng) AND (OriginRad.Lat = DestinyRad.Lat) then
    d := 0
  else
  begin
    s := sin(OriginRad.Lat) * sin(DestinyRad.Lat);
    c := cos(OriginRad.Lat) * cos(DestinyRad.Lat) * cos(DestinyRad.Lng - OriginRad.Lng);
 
    if Curvature then
      CurvatureAux := Round((s + c) * 100000000) / 100000000
    else
      CurvatureAux := (s + c);
 
    if CurvatureAux <> 1 then
      d := R * arccos(s + c)
    else
      d := 0;
  end;
  Result := d;
end;

Está probada en Delphi 10.3 y subsiguientes, no la he probado en versiones anteriores, pero teniendo en cuenta que utiliza cálculos matemáticos únicamente, debe funcionar en cualquier versión.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20