计算知道起点和距离的第二点
使用纬度和经度值(A点),我试图计算另一个B点,X点距离A点的0弧度。然后显示B点的纬度和经度值。
示例(伪码):
PointA_Lat = x.xxxx;
PointA_Lng = x.xxxx;
Distance = 3; //Meters
bearing = 0; //radians
new_PointB = PointA-Distance;
我能够计算两点之间的距离,但我想找到的是知道距离和方位的第二点。
最好在PHP或Javascript。
谢谢
看起来你正在测量以米为单位的距离(R),并且从正东向逆时针方向(θ)。 而为了你的目的(米的狩猎),平面几何图形应该足够精确。 在这种情况下,
dx = R*cos(theta) ; theta measured counterclockwise from due east
dy = R*sin(theta) ; dx, dy same units as R
如果theta从正北(例如,指南针轴承)顺时针测量,dx和dy的计算稍有不同:
dx = R*sin(theta) ; theta measured clockwise from due north
dy = R*cos(theta) ; dx, dy same units as R
无论哪种情况,经度和纬度的变化是:
delta_longitude = dx/(111320*cos(latitude)) ; dx, dy in meters
delta_latitude = dy/110540 ; result in degrees long/lat
常数110540和111320之间的差异是由于地球的扁率(极地和赤道周围不同)。
这是一个有效的例子,使用你以后问题中的参数:
给定起始位置在经度-87.62788度,纬度41.88592度处,从起始位置找到距离西北500米的点的坐标。
如果我们从正东逆时针测量角度,“西北”对应于θ= 135度。 R是500米。
dx = R*cos(theta)
= 500 * cos(135 deg)
= -353.55 meters
dy = R*sin(theta)
= 500 * sin(135 deg)
= +353.55 meters
delta_longitude = dx/(111320*cos(latitude))
= -353.55/(111320*cos(41.88592 deg))
= -.004266 deg (approx -15.36 arcsec)
delta_latitude = dy/110540
= 353.55/110540
= .003198 deg (approx 11.51 arcsec)
Final longitude = start_longitude + delta_longitude
= -87.62788 - .004266
= -87.632146
Final latitude = start_latitude + delta_latitude
= 41.88592 + .003198
= 41.889118
如果你知道3600秒的弧度是1度(经纬度或长度),海里有1852米,而海里是1秒弧,这可能会有所帮助。 当然,你要看的距离相对较短,否则你必须使用球面三角。
这里是使用Swift的更新版本:
let location = CLLocation(latitude: 41.88592 as CLLocationDegrees, longitude: -87.62788 as CLLocationDegrees)
let distanceInMeter : Int = 500
let directionInDegrees : Int = 135
let lat = location.coordinate.latitude
let long = location.coordinate.longitude
let radDirection : CGFloat = Double(directionInDegrees).degreesToRadians
let dx = Double(distanceInMeter) * cos(Double(radDirection))
let dy = Double(distanceInMeter) * sin(Double(radDirection))
let radLat : CGFloat = Double(lat).degreesToRadians
let deltaLongitude = dx/(111320 * Double(cos(radLat)))
let deltaLatitude = dy/110540
let endLat = lat + deltaLatitude
let endLong = long + deltaLongitude
使用此扩展名:
extension Double {
var degreesToRadians : CGFloat {
return CGFloat(self) * CGFloat(M_PI) / 180.0
}
}
链接地址: http://www.djcxy.com/p/70969.html
上一篇: Calculate second point knowing the starting point and distance
下一篇: Calculate distance in meters when you know longitude and latitude in java