歪んだ地図に緯度/経度をマッピングするにはどうすればよいですか?
-
08-06-2019 - |
質問
(地理的に歪んだ) 地図上の既知の X/Y 座標にマッピングする緯度と経度のペアが多数あります。
次に、緯度と経度のペアがもう 1 つあります。可能な限り地図上にプロットしたいと思います。これを行うにはどうすればよいですか?
最初に、最も近い 3 つの緯度経度点の連立一次方程式を作成し、そこから変換を計算することにしましたが、これはまったくうまく機能しません。これはリニア システムなので、これ以上近くのポイントを使用することもできません。
北が上昇していると仮定することはできません。必要なのは、既存の緯度/経度->x/y マッピングだけです。
編集:メルカトル図法などではありません。読みやすくするために任意に歪められています (地下鉄の路線図を想像してください)。マップの他の部分の歪みが計算しようとしているマッピングに影響しないように、最も近い 5 ~ 10 のマッピングのみを使用したいと考えています。
さらに、マップ全体は非常に狭い地理的領域内にあるため、地球儀について心配する必要はありません。地球が平らであるという仮定で十分です。
解決
歪みの種類についてさらに具体的な情報はありますか?たとえば、メルカトル図法を使用して 2D 地図上で緯度と経度が「歪んでいる」場合、変換計算は次のようになります。 すぐに利用できる.
マップが本当に恣意的に歪められている場合、試せることはたくさんありますが、最も単純なのはおそらく、 加重平均 既存のポイント マッピングから。重みは、新しいポイントから既存の各ポイントまでの X/Y 距離の逆数の二乗にすることができます。
いくつかの疑似コード:
estimate-latitude-longitude (x, y)
numerator-latitude := 0
numerator-longitude := 0
denominator := 0
for each point,
deltaX := x - point.x
deltaY := y - point.y
distSq := deltaX * deltaX + deltaY * deltaY
weight := 1 / distSq
numerator-latitude += weight * point.latitude
numerator-longitude += weight * point.longitude
denominator += weight
return (numerator-latitude / denominator, numerator-longitude / denominator)
このコードは比較的単純な近似値を示します。投影法によって地理座標がどのように歪むかをより正確に把握できれば、おそらくもっと良い結果が得られるでしょう。
他のヒント
大丈夫。理論的な観点から見ると、歪みが「任意」であり、どのような解決策もこの任意の歪みをモデル化する必要があるとすると、明らかに「答え」を得ることができません。ただし、どのような解決策にも、状況の現実を反映している場合とそうでない場合がある、何らかの歪みモデルを (通常は暗黙的に) 課すことが必要になります。
あなたは歪みマッピングのある種の局所的な連続性を仮定するモデルに最も興味があるようですので、最も明白な選択はあなたがすでに試したものです。最も近い点間の線形補間。それを超えるには、より高度な数学的および数値解析の知識が必要になります。
しかし、これをさらに多くのポイントに拡張することはできないと考えるのは間違いです。これは、最小二乗誤差アプローチを使用することで実現できます。他の点の誤差を最小限に抑える線形の答えを見つけます。これはおそらく最も単純な拡張です。言い換えれば、最も近い 5 つの点を取得し、それらの点の誤差を最小限に抑える線形近似を考え出すようにしてください。そしてそれを使ってください。次はこれを試してみます。
それが機能しない場合は、N 点の領域にわたる線形性の仮定が崩れています。その時点で、2 次モデルまたは 3 次モデルにアップグレードする必要があります。その時点で数学は忙しくなるでしょう。
問題は、球体がさまざまな方法で歪む可能性があり、たとえば赤道上のすべての点がわかっていても、さらに離れた点をマッピングするのに役に立たないことです。
より適切な「近い」点が必要な場合は、経度の距離が定数ではなく関数であることがわかっているので、これら 3 つの点が 4 番目の点と平面上にあると仮定して補間を行うことができます。
うーん。ここでの質問について何かが抜けているかもしれませんが、経度/緯度の情報があれば、北の方角もわかりますか?
測地線座標を投影座標系にマッピングする必要があるようです。たとえば、osgb から wgs84 へ。
関係する計算は簡単ではありませんが、コードはわずか数行で完成します。もっと時間があればもっと投稿したいのですが、シャワーが必要なので退屈なのでリンクします。 ウィキペディア かなり良いエントリーです。
注記:シャワー後の編集。