是否有一个简单的计算可以将公里转换为一个值,我可以将其添加到纬度或经度浮点数以计算搜索的边界框?它不需要完全准确。
例如:如果给我一个英国伦敦的纬度/经度(51.5001524,-0.1262362),我想计算从该点向东/向西 25 公里的经度是多少,以及从该点向北/向南 25 公里的经度是多少那么,我需要做什么才能将 25 公里转换成小数以添加到上面的值中?
我正在寻找一般的经验法则,即:1km == +/- 0.XXX
编辑:
我最初搜索“lat lon”没有返回此结果:
接受的答案似乎足以满足我的要求。
大致换算为:
这并不能完全纠正地球极地扁平化的情况 - 为此,您可能需要使用 WGS84 参考椭球体(用于 GPS 的模型)的更复杂的公式。但对于您的目的而言,该错误可能可以忽略不计。
来源:http://en.wikipedia.org/wiki/Latitude
警告:请注意,经纬度坐标以度数表示,而大多数(所有?)语言中的
cos
函数通常接受弧度,因此需要度到弧度的转换。
如果您使用 Java、Javascript 或 PHP,那么有一个库可以使用一些有趣且复杂(但仍然很快)的三角函数来精确地执行这些计算:
感谢 Jim Lewis 的精彩回答,我想通过我在 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))
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。
至少如果你想将公里添加到同一区域,它应该很简单(在Python中:https://pypi.org/project/utm/)
utm.from_latlon 和 utm.to_latlon。
为什么不使用正确制定的地理空间查询???
这里是 STContains 地理空间函数的 SQL Server 参考页面:
或者如果您不想使用盒子和弧度转换,您可以始终使用距离函数来查找您需要的点:
DECLARE @CurrentLocation geography;
SET @CurrentLocation = geography::Point(12.822222, 80.222222, 4326)
SELECT * , Round (GeoLocation.STDistance(@CurrentLocation ),0) AS Distance FROM [Landmark]
WHERE GeoLocation.STDistance(@CurrentLocation )<= 2000 -- 2 Km
几乎所有数据库都应该有类似的功能。
如果您正确实施了地理空间索引,您的搜索将比您正在使用的方法快得多
在 R 中呢?我试图找出两个样本收集区域的距离。我有经度和纬度(度)格式的两个样本收集地点的坐标。我需要找到两者之间的距离(以公里为单位),这意味着我需要将坐标转换为公里。我在这种情况下使用 R。你认为我可以做同样的事情吗?