5

いくつかの都市の地理座標(緯度と経度)があり、それらを地図にプロットできるようにx、y座標を取得したいと思います。

この地図は、たとえばhttp://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpgのように、標準的なものです。

私は見つけたいくつかのフォーミュラを試しましたが、どれも実際には機能しないようです:(。単純なjavascriptコードまたはrubyが最適です:)

4

5 に答える 5

3

さまざまな精度でこの問題に取り組む方法はたくさんあります。ただし、これらはすべて、マップの投影に対応する投影を実行することになります。

マップがメルカトル図法の種類であることがわかっている場合は、緯度/経度座標を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(東)を指し、正のlat/longは北と東です。もちろん、最初にラジアンに変換する必要があります。

これはすべて球体地球を想定しています。これは正確には真実ではありませんが、長距離迫撃砲弾を発射しない限り、十分に接近しています。

とにかく、XYZを取得したら、マップを回転および拡大縮小する必要があります。Z軸を中心に回転するには、3次元に投影する前に、ベース経度を減算するだけです。これを行うと、計算が最も簡単になるように、地図が経度ゼロに集中します。

これを行ったら、元の地図が正面になるまで地球儀を前方に回転させるだけで済みます。これは、yz軸を2次元で回転させて行います。http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflectionsを使用して、その部分を把握します。

最後に、x、z座標は、前述のように適切な縮尺/移動のために、マップのx、y座標と非常によく一致します。

于 2010-09-19T02:18:24.707 に答える
2

上記の回答に加えて、さまざまな地図投影間の変換を実行するオープンソースのproj4jsライブラリがあります。これは、OpenLayersによってこの種の目的で内部的に使用され、多くの一般的な投影法と座標系をサポートします。

于 2010-12-06T03:41:37.273 に答える
2

おそらくこれは役立つでしょう、私はjavascriptだけを使用して米国の実装を行いました。

デモ/コード:http ://the55.net/_11/sketch/us_map

于 2011-01-21T03:41:03.563 に答える
1

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

于 2010-09-19T02:08:38.013 に答える
0

非常に小規模な(そして赤道に近い)作業をしない限り、簡単なことではありません。ウィキペディアの地理座標系は良いスタートです...

より簡単な方法は、 Webマッピングのようなものを利用して、緯度と経度に固執することです。

于 2010-09-19T01:47:13.930 に答える