web-dev-qa-db-ja.com

緯度/経度およびkm距離で作業するための簡単な計算?

Kmを値に変換し、latまたはlon floatに追加して検索用の境界ボックスを計算できる簡単な計算はありますか?完全に正確である必要はありません。

たとえば、イギリスのロンドンの緯度/経度(51.5001524、-0.1262362)を与えられた場合、その地点から東/西25kmの緯度と、その南/北25kmの経度を計算したい場合ポイント、25kmを10進数に変換して上記の値に追加するにはどうすればよいですか?

私は一般的な経験則、すなわち、1km == +/- 0.XXXを探しています

編集:

「lat lon」を最初に検索しても、この結果は返されませんでした。

特定の緯度/経度の場所の境界ボックスを計算する方法?

受け入れられた答えは私の要件に十分であるようです。

111

おおよその変換は次のとおりです。

  • 緯度:1度= 110.574 km
  • 経度:1度= 111.320 * cos(緯度)km

これは、地球の極の平坦化を完全に修正するものではありません。そのためには、おそらくWGS84基準楕円体(GPSに使用されるモデル)を使用したより複雑な数式が必要になります。しかし、このエラーはおそらくあなたの目的にとってはごくわずかです。

ソース: http://en.wikipedia.org/wiki/Latitude

注意:緯度経度座標は度で表されますが、ほとんどの(すべての?)言語のcos関数は通常ラジアンを受け入れるため、 度からラジアンへの変換 が必要です。

200
Jim Lewis

Java、Javascript、またはPHPを使用している場合は、これらの計算を正確に行うライブラリがあります。このライブラリには、非常に複雑な(ただし高速な)三角法が使用されています。

http://www.jstott.me.uk/jcoord/

5
skaffman

http://www.jstott.me.uk/jcoord/ -このライブラリを使用

            LatLng lld1 = new LatLng(40.718119, -73.995667);
            LatLng lld2 = new LatLng(51.499981, -0.125313);
            Double distance = lld1.distance(lld2);
            Log.d(TAG, "Distance in kilometers " + distance);
1
Nikhil Dinesh

おもしろいことに、UTM座標の言及がありませんでした。

https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

少なくとも同じゾーンにkmを追加する場合、それは簡単です(Pythonで: https://pypi.org/project/utm/

utm.from_latlonおよびutm.to_latlon。

1
Mircea

ジムルイス 彼の素晴らしい回答に感謝します。Swiftの機能でこのソリューションを説明したいと思います。

func getRandomLocation(forLocation location: CLLocation, withOffsetKM offset: Double) -> CLLocation {
        let latDistance = (Double(arc4random()) / Double(UInt32.max)) * offset * 2.0 - offset
        let longDistanceMax = sqrt(offset * offset - latDistance * latDistance)
        let longDistance = (Double(arc4random()) / Double(UInt32.max)) * longDistanceMax * 2.0 - longDistanceMax

        let lat: CLLocationDegrees = location.coordinate.latitude + latDistance / 110.574
        let lng: CLLocationDegrees = location.coordinate.longitude + longDistance / (111.320 * cos(lat / .pi / 180))
        return CLLocation(latitude: lat, longitude: lng)
    }

距離を変換するこの関数では、次の式を使用します。

latDistance / 110.574
longDistance / (111.320 * cos(lat / .pi / 180))
0
Serj Kultenko