2012-05-22 41 views
2

我試圖用haversine我能不能成功 基本上我的問題是,我有自己的緯度和長值3個的地圖位置。 我想要做的是得到這個三角形的中間點。如何獲得2或3徑向位置的中間點(緯度,經度)

這裏是圖片

enter image description here

我有H,F和我點的位置。我需要知道問號的位置。 41.040035,28.984026 41.040868,28.985807 41.039136,28.984981

PHP,MYSQL或Objective C的任何一種語言都ok作爲一個答案。 甚至建議表示讚賞。 謝謝。

回答

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

?> 
+0

完美,謝謝! – siniradam

1

在你正在工作的規模上,不會將經緯度座標視爲平面座標,並使用歐幾里德幾何的基本操作來計算位置,如三角形的中點。

您可能也有興趣barycentric coordinates

+0

但我怕一些工作可能會累人的系統,謝謝你。我會試穿 – siniradam

相關問題