マップジオ座標(lat、lng)にマップ(x、y)
-
04-10-2019 - |
質問
一部の都市の地理座標(ラティドゥートと経度)があり、X、Y座標を取得したいので、それらをマップにプロットできます。
マップは、同じようにスタンドアートのものです http://www.wordtravels.com/images/map/spain/fuerteventura_map.jpg 例えば。
見つけた数式を試しましたが、実際には機能しないようです。
解決
上記の回答に加えて、さまざまなマップ投影間で変換を実行するオープンソースproj4jsライブラリがあります。これは、この種のもののためにOpenLayersによって内部的に使用されており、多くの一般的な投影と座標系をサポートしています。
他のヒント
この問題にさまざまな精度でアプローチする方法はたくさんあります。しかし、それらはすべて、あなたのマップに対応する投影を実行することに要約されます。
あなたのマップがメルカトル投影の品種であることがわかっている場合、Lat/Long座標は単にX/Yとして扱われ、適切にスケーリングされ、翻訳されます。つまり、仕事をする単純なax+bとcy+Dが見つかります。
あなたのマップがメルカトルの投影ではない場合(おそらく、これがそうであるように見えるように、スケールを一貫性にしようとする場合ではないので)、あなたの最善の策は、それが「地球に触れる」投影であると仮定することです。 (これは、小さな陸地では問題なく動作します。)その場合、最初にLAT/LONGを3次元座標系に投影する必要があります。
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)
正のZが北極を指します。正のyは0、0、ポジティブxはlat 0 long 90(East)を指し、正のLAT/LONGは北と東です。もちろん、最初にラジアンに変換する必要があります。
これはすべて球状の地球を想定していますが、これは正確には真実ではありませんが、長距離のモルタルラウンドを発射しない限り十分に近いです。
とにかく、XYZを手に入れたら、マップを回転させて拡張する必要があります。 Z軸の周りを回転させるには、3次元に投影する前にベースの経度を差し引くだけです。これを行い、最も簡単な数学のためにゼロの膨大な点でマップを中央に配置します。
これを完了したら、元のマップが顔面になるまでグローブを前方に回転させるだけです。 YZ軸で2D回転してこれを行います。使用する http://en.wikipedia.org/wiki/coordinate_rotations_and_reflections その部分を理解するために。
最後に、X、Z座標は、前述のように適切なスケール/翻訳のために、マップのX、Y座標と非常によく並んでいます。
おそらくこれが役立つでしょう、私はJavaScriptだけを使用して米国の実装をしました。
Google Maps APIを使用して、JPGをマップ上でオーバーレイして正しく配置できます。
これが例ですhttp://code.google.com/apis/maps/documentation/javascript/examples/overlay-hideshow.html
オーバーレイに関するAPIページは次のとおりですhttp://code.google.com/apis/maps/documentation/javascript/overlays.html