ウィキペディアでは、代数についてかなり徹底的に説明しています:
http://en.wikipedia.org/wiki/Trilateration
ウィキペディアのエントリでは実際にはカバーされていませんが、最初のステップは、緯度/経度座標をデカルト座標に変換することです。
x0 = cos( lon0 ) * cos( lat0 ) , y0 = sin( lon0 ) * cos( lat0 ) , z0 = sin( lat0 )
x1 = cos( lon1 ) * cos( lat0 ) , y1 = sin( lon1 ) * cos( lat1 ) , z1 = sin( lat1 )
x2 = cos( lon2 ) * cos( lat0 ) , y2 = sin( lon2 ) * cos( lat2 ) , z2 = sin( lat2 )
(計算を簡単にするために、私は物事をごまかしたので、キロメートルではなく「地球半径」の単位で作業しています)
あなたのデータのために、私は得る
p0 p1 p2
X -0.420442596 -0.420430618 -0.42040255
Y -0.67380418 -0.673826567 -0.673825967
Z 0.607631426 0.607614889 0.607634975
ウィキペディアの記事で説明されている次のステップは、p0 が原点にあるようにポイントを変換し、p1 が X 軸上にあり、p2 が XY 平面にあるように回転することにより、座標を単純化することです。
変換するには、p1 と p2 から p0 を引くだけです。
p0a p1a p2a
X 0 1.19779E-05 4.00462E-05
Y 0 -2.23864E-05 -2.17865E-05
Z 0 -1.65372E-05 3.5486E-06
回転はそれほど難しくありません。p1b は (x,y) = (d,0) を取得します。ここで、d は原点から p1a までの距離です (ピタゴラスの定理)
p2b の場合、p2a を 2 つのコンポーネントに分解する必要があります。1 つは p1a に平行 (x 軸上)、もう 1 つは p1a に垂直 (「b」座標系の y 軸上) です。
これを行うには、p1a * ( 1/d ) である p1a の方向の単位ベクトルが必要です。この単位ベクトル (お好みで p1a_hat と呼びます) と p2a の内積をとると、p2b の X 座標になります。ウィキペディアの記事では、この値を「I」と呼んでいます
これで Y 座標は簡単になりました。原点から p2 までの長さは、座標変換の下で変更できません。したがって、ピタゴラスの定理を使用して p2a の長さを計算し、次にピタゴラスの定理を「逆方向に」使用して、長さを同じに保つために p2b の Y 座標がどうあるべきかを取得します。それがウィキペディアが「J」と呼んでいる変数です。(注: J が正か負かを判断するために、あいまいな部分を残しておきます)。
これで、ウィキペディアの記事で計算に使用される 3 つの変数 d、I、および J が得られました。地球の半径を掛けることで、それらをキロメートルに戻すことができます。ここから残りの計算を行うことができるはずです
(ちなみに、ウィキペディアでは座標変換の計算方法が異なります。私は可能な限り三角関数を避けたいと思っています)。