2009-03-04 51 views
7

私は輸送視覚化アプリケーションをリバースエンジニアリングしています。私は彼らのデータフィードの起源の緯度を知る必要があります。具体的にはXY 0,0です。私が見つけた唯一の公式は、2点間の距離、または方位/距離の位置を計算します。座標を緯度と経度に変換するにはどうすればよいですか?

非常に古いアプリケーションでマップを表示するためにXYを使用します。 XYはFEETに入っています。

Iは、これらの座標を有する:

47.70446615506108, -122.34469839507263: x=1268314, y=260622 
47.774182540800616,-122.3412994737105: x=1269649, y=286031 
47.60024792289405, -122.32767331735774: x=1271767, y=222532 
47.57012494413499, -122.29129609983679: x=1280532, y=211374 

Iは、x=0, y=0の緯度と経度が何であるかと式がこれを見つけることであろうかを調べる必要があります。

これらは2つのデータフィードを持ち、1つはもう一方のデータフィードよりも現在のものです。最新のデータを含むフィードには緯度、経度は含まれませんが、XYのみが含まれます。私はそれらの(現在の)最新のデータフィードのXY座標を緯度と経度に簡単に変換できるので、0,0が何であるかを、より現実的で、より有益な(緯度、経度を含む)データフィードに基づいて外挿することを試みています。

+0

あなたが負の経度を持っているときにxの値が負ではありませんなぜですか? –

+0

これは非常に混乱しやすい質問です。与えられた緯度/経度からXとYの距離が北と南であるか? – slacy

+0

...または緯度/経度のマップ座標、x/yはいくつかの巨大なビットマップの座標ですか? – Jaanus

答えて

5

何それらを確認する:だから、あなたはまだ、より高度な数学やそのオープンソースのライブラリが必要な場合があります:)

この質問にも役立つかもしれない、それは大圏距離を計算するためのコードが含まれています正確には彼らが使っている座標系! (または、あるデータベースからデータセットを取得した場合は、そのデータセットのメタデータを見てください。そうでなければ、その値に懐疑的です)

おそらくこれはstate plane coordinate systemsのいずれかです。それらは地球の局地化された地域(種類はUTMのようなもの)で、測量によく使用されます。

あなたはCORPSCON(または他のGISプログラムを、あなたはGISのオプションパックを持っていますが、それは無料ではない場合ExpertGPSはこれを行います私は変換がないGPSBabelかどうかを忘れている。)を使用することができ緯度/長いと状態面の任意の座標間の変換にシステム。また座標が入っているdatumを知る必要があります.WGS84とNAD83は非常に近いがNAD27は異なる。

+0

+1は米国特有であるため、OPはシアトルでlat-longを与えて以来です。最も投票されたより一般的な答えは、私たちの何人かが他の所に住んでいるので、まだ良いです;) – MarkJ

6

多くの異なる座標系があります。緯度/経度(例えばWGS84など)とx/yの最初のもの(おそらく何らかの種類の投影システムなど)の座標系が何であるかを調べる必要があります。

この情報を取得したら、変換や操作を行うために使用できるツールがいくつかあります。無料のオープンソースコーディングライブラリの1つの例はproj4です。

+2

+1。 proj4は無料のオープンソースです。 – MarkJ

+0

良い点 - 完了。 – luapyad

+0

Proj.4をこのようなものに使用しました。強くお勧めします。 –

9

あなたがデータの最初の2行を見て、緯度

47.7044 - 47.7741 = -0.06972 degrees 

を引く場合は緯度度あたり60海里、および海里あたり6076フィートがあります。

2 'Y' の値を減算
-.06972 * 60 * 6076 = 25,415 ft 

260662 - 286031 = 25,409 ft 

だから、実際にXとYの値がフィートであることを証明しているようです。

あなたがそう(47.70と47.77)の緯度からそれらの値を減算

260622 ft/(6076 ft/nm)/(60 nm/degree) = .71 
286031 ft/6076/60 = .78 

をYの値のいずれかを取り、そして度に戻って変換し、例えば

場合は、あなたは正確に47度に非常に近くなります、それはあなたのy = 0点でなければなりません。

経度の場合、度は赤道で60海里、極で0マイルです。したがって、1度あたりのマイル数には緯度の余弦を乗算する必要があります。したがって、約cos(47度)または.68です。したがって、1度あたり6076nmの代わりに、約4145nmです。 X値についてだから

1268314 ft/(4145 ft/nm)/(60 nm/degree) = 5.10 degrees 
1269649 ft/4145/60 = 5.10 degrees 

緯度増加(より負)としてこれらのXの数が増加するので、私はあなたがX基点が約

ある意味し、5.1度を追加する必要が信じます
-122.3 + 5.1 = 117.2 West longitude for your x=0 point. 

これはSpokane WAのおおよその位置です。X、Yシステム - だから47.57及び-122.29

分散が異なる投影に起因する可能性が与えられたデータとほぼ同等であり、X = 1280532、Y = 211374

Lat = 47 + (211374/6096/60) = 47.58 
Lon = -117.2 - (1280532/(6096 * cos(47.58))/60) = -122.35 

所与

球面投影に適用される緯度/経度とは対照的に「平坦化された」投影であってもよいか?

Calculate distance between two latitude-longitude points? (Haversine formula)

+0

ドメインがあまり大きくなく、あまり高い精度を必要としない場合は、このバックエンベロープの内容はOKです – MarkJ

+0

はい、今のところデータを理解しようとしています。大きな円の距離を計算するのはかなり基本的な数学です。 – MikeW

+2

私は本当にこのアプローチをお勧めしません、適切な計算が使用されていない場合、エラーが地面にどのくらい大きいかは本当に驚くべきことです。 – Cruachan

0

Over here, I said this:

Javaでは、私は、緯度と経度は(最も一般的にGPSで使用されるWGS-84楕円体を仮定して)を使用して一つにUTMにおけるポイントの式からOpenMap converterを使用します。

OpenMapはオープンソースで、ダウンロードページへのリンクを投稿しますが、途中で短いライセンススクリプトがあります。だから、失礼を避けるために、私は深くリンクしません。代わりにtheir homepageclick Downloadsに向かいます。

これはあなたの問題を直接解決するか、少なくとも有用なアルゴリズムを指摘する必要があります。

0

私はBrenor BropheyのgPoint PHP classを数回使用しました。堅実な結果、GPLコード、そして容易に展開できます。推奨します。

1

すでに座標系についてのアドバイスがありますので、過去に大きな成功を収めてきた図書館を紹介します。

Geotransは、米国国防総省による使用が承認されているため、十分にテストされていることを確認できます。

http://earth-info.nga.mil/GandG/geotrans/index.html 

これは、そのページがライブラリではなくアプリケーションについて語るため、適切なリンクではない可能性があります。私はライブラリがDevelopersパッケージに入っていると思っています。ライセンス条項は記憶から非常にリベラルでしたが、それを商業的に使用する前に条件を確認してください。

編集:

Geotransライセンスに関する興味深い議論がここで見つけることができます:

http://www.mail-archive.com/[email protected]/msg39263.html 
関連する問題