Kmを値に変換し、latまたはlon floatに追加して検索用の境界ボックスを計算できる簡単な計算はありますか?完全に正確である必要はありません。
たとえば、イギリスのロンドンの緯度/経度(51.5001524、-0.1262362)を与えられた場合、その地点から東/西25kmの緯度と、その南/北25kmの経度を計算したい場合ポイント、25kmを10進数に変換して上記の値に追加するにはどうすればよいですか?
私は一般的な経験則、すなわち、1km == +/- 0.XXXを探しています
編集:
「lat lon」を最初に検索しても、この結果は返されませんでした。
受け入れられた答えは私の要件に十分であるようです。
おおよその変換は次のとおりです。
これは、地球の極の平坦化を完全に修正するものではありません。そのためには、おそらくWGS84基準楕円体(GPSに使用されるモデル)を使用したより複雑な数式が必要になります。しかし、このエラーはおそらくあなたの目的にとってはごくわずかです。
ソース: http://en.wikipedia.org/wiki/Latitude
注意:緯度経度座標は度で表されますが、ほとんどの(すべての?)言語のcos
関数は通常ラジアンを受け入れるため、 度からラジアンへの変換 が必要です。
Java、Javascript、またはPHPを使用している場合は、これらの計算を正確に行うライブラリがあります。このライブラリには、非常に複雑な(ただし高速な)三角法が使用されています。
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);
おもしろいことに、UTM座標の言及がありませんでした。
https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system 。
少なくとも同じゾーンにkmを追加する場合、それは簡単です(Pythonで: https://pypi.org/project/utm/ )
utm.from_latlonおよびutm.to_latlon。
ジムルイス 彼の素晴らしい回答に感謝します。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))