Cómo obtener el punto medio de 2 o 3 ubicaciones radiales (Latitud, Longitud)

Traté de usar Haversine no pude tener éxito Básicamente, mi problema es que tengo 3 ubicaciones en el mapa con sus valores de latitud y longitud. Lo que trato de hacer es obtener el punto medio de este triángulo.

Aquí está la imagen

enter image description here

Tengo las ubicaciones de los puntos H, F e I. Necesito saber la ubicación del signo de interrogación. 41.040035,28.984026 41.040868,28.985807 41.039136,28.984981

PHP, MYSQL u Objective C cualquiera de estos lenguajes está bien como respuesta. Incluso se agradecen sugerencias. Gracias.

preguntado el 22 de mayo de 12 a las 09:05

2 Respuestas

Revisé este ejemplo: http://geomidpoint.com/example.html

Y escribió una función en PHP, espero que esto sea útil...

[editar] olvidé convertir a radianes para los cálculos, por lo que dio un resultado diferente, por lo que ahora debería funcionar bien ...

   <?php

function middlepoint($lat1,$lon1,$lat2,$lon2,$lat3,$lon3){
    $w1=1095.75;$w2=730.5;$w3=365.25;$tw=$w1+$w2+$w3;   //weighting factors

    $x1=cos(floatval(deg2rad($lat1)))*cos(floatval(deg2rad($lon1)));$y1=cos(floatval(deg2rad($lat1)))*sin(floatval(deg2rad($lon1)));$z1=sin(floatval(deg2rad($lat1)));$x2=cos(floatval(deg2rad($lat2)))*cos(floatval(deg2rad($lon2)));$y2=cos(floatval(deg2rad($lat2)))*sin(floatval(deg2rad($lon2)));$z2=sin(floatval(deg2rad($lat2)));$x3=cos(floatval(deg2rad($lat3)))*cos(floatval(deg2rad($lon3)));$y3=cos(floatval(deg2rad($lat3)))*sin(floatval(deg2rad($lon3)));$z3=sin(floatval(deg2rad($lat3)));  //convert lat/long to cartesian (x,y,z) coordinates

    $x = ($x1*$w1+$x2*$w2+$x3*$w3)/$tw;$y=($y1*$w1+$y2*$w2+$y3*$w3)/$tw;$z=($z1*$w1+$z2*$w2+$z3*$w3)/$tw;   //Compute combined weighted cartesian coordinates

    $lon=atan2($y,$x);$hyp=sqrt(pow($x,2)+pow($y,2));$lat=atan2($z,$hyp);   //Convert cartesian coordinate to latitude and longitude for the midpoint

    $midpoint[0] = $lon * (180/pi());$midpoint[1] = $lat * (180/pi());  //Convert from radians to degrees

    return $midpoint;   //return an array(lat,lon);

}

$test = middlepoint(41.040035,28.984026,41.040868,28.985807,41.039136,28.984981);
print_r($test);

?>

contestado el 22 de mayo de 12 a las 14:05

En la escala en la que está trabajando, no sufrirá ningún daño si trata las coordenadas de latitud/longitud como coordenadas planas y usa las operaciones elementales de la geometría euclidiana para calcular posiciones como el punto medio de un triángulo.

Usted también puede estar interesado en coordenadas barcéntricas.

contestado el 22 de mayo de 12 a las 09:05

pero me temo que un par de trabajos podrían cansar al sistema, aunque gracias. lo intentare de todas formas - siniradam

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.