web-dev-qa-db-ja.com

距離を度からメートルに変換する方法は?

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

48.1388,-15.3616,55.2057,-3.9359

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

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

14
Mulone

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

Javascriptの実装(恥ずかしくないことに here から盗まれた)は次のようになります。

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;
15
blindauer

地球のわずかに非球形の形状を考慮せずに、

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

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

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

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

7
Charles Bretana

度とメートルの間の変換は、地球の表面によって異なります。

球形の地球を想定して、緯度=距離* 360 /(2 * PI * 6400000)

経度は緯度によって異なります。

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

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

0
winwaed