web-dev-qa-db-ja.com

地図画像の正確な座標を決定しますか?

兄は、生徒が空白の地図を作成して印刷できるWebアプリを作成するよう提案しました。白地図とは、国境や海域などを含み、テキストラベルを含まない地図です。最初の使用例は次のとおりです。

  1. ユーザーはリストから「ハンガリー」を選択します。ハンガリーの白地図が画面に表示されます。
  2. ユーザーは、ハンガリーの町または場所の名前をテキストボックスに入力します。地図上の指定した場所に小さなマーカーが表示されますが、テキストラベルはありません。
  3. ユーザーは、さまざまな町で、必要な回数だけ手順2を繰り返します。
  4. ユーザーは結果の画像を印刷し、それを使用して今後の歴史や地理の試験の練習をします。試験のタスクは同じです。テキストのないマーカーが付いた白地図を受け取り、メモリから町の名前を入力する必要があります。

それで私はアプリを書き始めました、そしてステップ1で、私は最初の問題に遭遇しました。空白の地図のデータベースがありません。ユーザーがリストから白地図を選択できるようにするには、誰かが白地図のデータベースを作成して入力する必要があります。ここでmaps tableには、次の(疑似)定義があります。

 CREATE TABLE maps (
     name TEXT PRIMARY KEY,
     image BLOB,
     minlat FLOAT,
     minlon FLOAT,
     maxlat FLOAT,
     maxlon FLOAT
 );

テストのために、このテーブルの1行または2行に自分で記入することにしました。このハンガリーの白地図をグーグル検索でダウンロードしました。

blank map

では、一体どうやって座標を決定するのですか? GoogleEarthでオーバーレイを作成してみましょう。

google earth screenshot

ご覧のとおり、正確に配置できなかったため、東の国境は少しずれています。だから私の質問は:

地図を示す画像ファイルがある場合、その角の正確な緯度/経度座標を決定するにはどうすればよいですか?

2
marczellm

地図によって異なります。地図作成マップは、(ほぼ)球面から平らな2次元表面への投影です。あれは:

(X, Y) = Fproj(Lat, Long)

ここで、Fproj()は射影関数です。

たとえば、赤道上にX軸があり、子午線が0のY軸を持つ標準のメルカトル図法の場合:

X = Longitude
Y = ln(tan(Latitude) + sec(Latitude))

地図投影 のタイプと、地図の角の緯度/経度がわかっている場合は、逆投影を行うことで、X、Y座標に基づいて緯度/経度を決定できる場合があります。 。

Wolfram MathWorldには地図投影法の優れたカタログがあります およびその逆。

既存の緯度と経度のデータに基づいて地図を表示することに興味があり、独自の地図投影関数を作成したい場合(ほとんどは実装が非常に簡単です)、データベースとフラットファイルのいくつかのソースのいずれかを使用できます。国境、湖、川など。私のお気に入りの検索エンジンで簡単に検索すると、次の2つが見つかります。

自然地球データThematicMapping.org

地図の投影法がわからないが、地図上のいくつかのポイントの緯度、経度がわかっている場合は、補間を使用して、近くに登録されているポイントの緯度、経度に基づいて、マップ上のポイントの緯度、経度を推定できます。

3
Jay Elston