2

私はhaversineを使おうとしましたが、成功しませんでした。基本的に私の問題は、Lat値とLong値を持つ3つのマップロケーションがあることです。私がやろうとしているのは、この三角形の中間点を取得することです。

これが写真です

ここに画像の説明を入力してください

私はH、F、Iポイントの場所を持っています。疑問符の場所を知る必要があります。41.040035,28.984026 41.040868,28.985807 41.039136,28.984981

PHP、MYSQL、またはObjective Cは、これらの言語のいずれも答えとして問題ありません。提案もありがたいです。ありがとう。

4

2 に答える 2

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

?>
于 2012-05-22T09:13:09.770 に答える
1

作業しているスケールでは、緯度/経度座標を平面座標として扱い、三角形の中点などの位置を計算するためにユークリッド幾何学の基本操作を使用しても害はありません。

重心座標にも興味があるかもしれません。

于 2012-05-22T08:33:02.037 に答える