如何获得2或3个径向位置中点(纬度,经度)

时间:2012-05-22 08:27:52

标签: php mysql objective-c

我试图使用haversine我无法成功 基本上我的问题是我有3个地图位置及其Lat和Long值。 我想做的是获得这个三角形的中间点。

这是图片

enter image description here

我有H,F和I点的位置。我需要知道问号的位置。 41.040035,28.984026 41.040868,28.985807 41.039136,28.984981

PHP,MYSQL或Objective C这些语言中的任何一种都可以作为答案。 甚至建议也受到赞赏。 感谢。

2 个答案:

答案 0 :(得分:3)

我查看了这个例子:http://geomidpoint.com/example.html

并在PHP中编写了一个函数,希望这有用......

[编辑]我忘了转换为弧度进行计算,所以它给出了不同的输出,所以现在它应该工作正常...

   <?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);

?>

答案 1 :(得分:1)

在你工作的尺度上,你不会将纬度/经度坐标视为平面坐标,并使用欧氏几何的基本运算来计算三角形的中点等位置。 / p>

您可能也对barycentric coordinates感兴趣。