Haversine php script

ago 15, 2011   //   by Angel   //   PHP, Programacion  //  No Comments

Hello everyone

Hola a todos.

This is a script for calculating distances between coordinates by the formula haversine

Os dejo un script para el cálculo de distancias entre coordenadas mediante la fórmula de haversine


Info Wikipedia:

The haversine formula is an equation important in navigation, giving great-circle distances between two points on a sphere from their longitudes and latitudes. It is a special case of a more general formula in spherical trigonometry, the law of haversines, relating the sides and angles of spherical “triangles”.

La fórmula de haversine es una ecuación importante en la navegación, dando un gran círculo de distancias entre dos puntos en una esfera de sus longitudes y latitudes. Es un caso especial de una fórmula más general en la trigonometría esférica, la ley de haversines, sobre los lados y ángulos de estferas “triángulos”.

Given a unit sphere, a “triangle” on the surface of the sphere is defined by the great circles connecting three points u, v, and w on the sphere. If the lengths of these three sides are a (from u to v), b (from u to w), and c (from v to w), and the angle of the corner opposite c is C, then the law of haversines states:

Dada una esfera unitaria, un “triángulo” en la superficie de la esfera se define por gran círculo s de conectar tres puntos o , v y w en la esfera. Si las longitudes de estas tres partes están al (de uv por v ), b (desde o a w ), yc (a partir de W a ), y el ángulo de la esquina opuesta c es C , entonces la ley del haversine dice:

Since this is a unit sphere, the lengths a, b, and c are simply equal to the angles (in radians) subtended by those sides from the center of the sphere (for a non-unit sphere, each of these arc lengths is equal to its central angle multiplied by the radius of the sphere).

In order to obtain the haversine formula of the previous section from this law, one simply considers the special case where u is the north pole, while v and w are the two points whose separation d is to be determined. In that case, a and b are π/2 − φ1,2 (i.e., 90° − latitude), C is the longitude separation Δλ, and c is the desired d/R. Noting that sin(π/2 − φ) = cos(φ), the haversine formula immediately follows.

To derive the law of haversines, one starts with the spherical law of cosines:

Como se trata de una esfera unidad, las longitudes a , b y c son simplemente iguales a inglés (en radianes s) sostenidas por los lados del centro de la esfera (para un no esfera-unidad, cada una de estas longitudes de arco es igual a su [] ángulo [central] multiplicado por el radio de la esfera).

Para obtener la fórmula del haversine de la sección anterior de esta ley, simplemente se considera el caso especial donde o es el polo norte, mientras que w v y son los dos puntos la separación de se va a determinar. En este caso, un y b son π/2 – φ 1,2 (es decir, 90 ° – latitud), C es el Δλ longitud de separación, yc es la deseada de / R . Tomando nota que el sin ( π /2 – φ ) = cos ( φ ), la fórmula haversine sigue inmediatamente.

Para deducir la ley del haversine, se parte de la ley esférica de coseno:

As mentioned above, this formula is an ill-conditioned way of solving for c when c is small. Instead, we substitute the identity that cos(θ) = 1 − 2 haversin(θ), and also employ the addition identity cos(a − b) = cos(a) cos(b) + sin(a) sin(b), to obtain the law of haversines, above.

Como se ha mencionado anteriormente, esta fórmula no es demasiado buena para la resolución de c cuando c es pequeño. En su lugar, sustituimos la identidad que: cos ( θ ) = 1-2 haversin ( θ ), y también utilizamos la identidad de suma cos ( a – b ) = cos ( a ) cos ( b )+sin ( a ) sin ( b ), para obtener la ley del haversine, de más arriba.

The code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

//point 1
$lat1 = 40.4458;
$long1 = -3.7095;

//point 2
$lat2 = 38.91777;
$long2 = -6.9954;

//Earth radius
$Radtierra=6371;

//Convert to radians
$Rlat1 = deg2rad($lat1);
$Rlat2 = deg2rad($lat2);
$Rlong1 = deg2rad($long1);
$Rlong2 = deg2rad($long2);
echo "latitude point 1 radians: ".$Rlat1."<br>";
echo "latitude point 2 radians: ".$Rlat2."<br>";
echo "longitude point 1 radians: ".$Rlong1."<br>";
echo "longitude point 2 radians: ".$Rlong2."<br>";

//Haversine formula

$d=acos(sin($Rlat1)*sin($Rlat2)+cos($Rlat1)*cos($Rlat2)*cos($Rlong2-$Rlong1))*$Radtierra;//km

echo "Kilometers: ".$d."<br>";

//Meters
$dm=$d*1000; //m
echo "Meters: ".$dm."<br>";

?>

Regards

Saludos

Information: Wikipedia

Leave a comment

You must be logged in to post a comment.

Programacion Categories

Noticias Populares

Escribe tu direccion de correo electrónico para suscribirte a Script Libre y recibiras notificaciones en tu correo electronico de las nuevas publicaciones.

Únete a 1 suscriptor

UA-20928923-1
%d personas les gusta esto: