15

通常のメルカトル図法で OpenLayers を使用しており、緯度経度で点のグリッドを見つけて境界ボックスをサンプリングしようとしています。bbox は latlon で表されます。

48.1388,-15.3616,55.2057,-3.9359

距離を度数(例: x: 2.5、y: 2.4) で定義し、そこから点を計算できます。しかし、この距離をユーザーの考え方に関連付けるために、この距離をメートル(たとえば 50000) で表現したいと思います (人々は度ではなくメートルを理解します)。この距離を換算するにはどうすればよいですか?ポイントを再投影する方法は知っていますが、距離は知りません。

ヒントをありがとう!ムロン

4

3 に答える 3

20

hasersine 式を使用して、緯度/経度の 2 点間の距離を取得します。これは、地球が球体であることを前提としています (ほとんどの場合、これで十分です)。

それの Javascript 実装 (恥知らずにここから盗んだ) は次のようになります。

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;
于 2010-11-05T00:24:53.270 に答える
8

少し非球形の地球を許容することなく、

1 分の緯度 北から南へ = 1 海里 = 6075 フィート したがって、1 度 = 60 分 = 60 * 6075 フィート 1 メートルは 3.28 フィートなので、1 度 = 60 * 6075 / 3.28 メートル = 111,128 メートル

または、緯度 1 分 = 1,852 メートル したがって、1 度 = 60 * 1852 メートル = 111,120 メートル

どちらがより正確かはわかりません...

経度の 1 度についても同じことを行いますが、北に移動するにつれて経線が近づくため、コサイン (緯度) を掛けます。

于 2010-11-05T00:11:35.653 に答える
1

度とメートルの間の変換は、地球の表面全体で異なります。

地球が球形であると仮定すると、緯度 = 距離 * 360 / (2*PI * 6400000)

経度は緯度によって異なることに注意してください。

度経度 = 距離 *360 * / (2*PI* cos(緯度) )

上記は地表のもので、メルカトル図法は使用していません。投影された直線距離で作業したい場合は、メルカトル図法を使用する必要があります。

于 2010-11-05T00:15:23.930 に答える