Nay*_*pte 41
使用此 referance计算角度:
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
brng = (brng + 360) % 360;
brng = 360 - brng; // count degrees counter-clockwise - remove to make clockwise
return brng;
}
Run Code Online (Sandbox Code Playgroud)
Дар*_*йко 21
你可以使用谷歌地图computeHeading:
var point1 = new google.maps.LatLng(lat1, lng1);
var point2 = new google.maps.LatLng(lat2, lng2);
var heading = google.maps.geometry.spherical.computeHeading(point1,point2);
Run Code Online (Sandbox Code Playgroud)
Dot*_*tPi 10
计算两点之间角度(方位)的通用公式如下:
? = atan2(sin(?long)*cos(lat2), cos(lat1)*sin(lat2) ? sin(lat1)*cos(lat2)*cos(?long))
Run Code Online (Sandbox Code Playgroud)
请注意,在使用此公式之前,角度(θ)应转换为弧度,Δlong= long2 - long1.
atan2是几乎所有编程语言中常见的函数(主要在Math包/库中).通常还有用于度和弧度之间转换的函数(也在Math包/库中).
请记住,atan2返回-π... +π范围内的值,要将结果转换为罗盘方位,需要将θ乘以180 /π然后使用(θ+ 360)%360,其中%是模数除法操作返回除法的其余部分.
以下链接是涉及纬度和经度的公式的良好资源.他们还提供其公式的Javascript实现.实际上,这个答案是基于这个页面的信息:
http://www.yourhomenow.com/house/haversine.html
在 Javascript 中,我创建了一个函数名称angleFromCoordinate
,其中我传递了两个 lat/lng。此函数将返回两个纬度/经度之间的天使
function angleFromCoordinate(lat1,lon1,lat2,lon2) {
var p1 = {
x: lat1,
y: lon1
};
var p2 = {
x: lat2,
y: lon2
};
// angle in radians
var angleRadians = Math.atan2(p2.y - p1.y, p2.x - p1.x);
// angle in degrees
var angleDeg = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
console.log(angleDeg);
return angleDeg;
}
Run Code Online (Sandbox Code Playgroud)
工作代码片段
function angleFromCoordinate(lat1,lon1,lat2,lon2) {
var p1 = {
x: lat1,
y: lon1
};
var p2 = {
x: lat2,
y: lon2
};
// angle in radians
var angleRadians = Math.atan2(p2.y - p1.y, p2.x - p1.x);
// angle in degrees
var angleDeg = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
console.log(angleDeg);
return angleDeg;
}
Run Code Online (Sandbox Code Playgroud)
function angleFromCoordinate(lat1,lon1,lat2,lon2) {
var p1 = {
x: lat1,
y: lon1
};
var p2 = {
x: lat2,
y: lon2
};
// angle in radians
var angleRadians = Math.atan2(p2.y - p1.y, p2.x - p1.x);
// angle in degrees
var angleDeg = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
document.getElementById('rotation').innerHTML ="Rotation : "+ angleDeg;
return angleDeg;
}
angleFromCoordinate(37.330604,-122.028947,37.3322109,-122.0329665);
Run Code Online (Sandbox Code Playgroud)
基于Nayanesh Gupte的答案,这是一个Python实现,用于在需要时如何计算由其经度和纬度定义的两个点之间的角度:
def angleFromCoordinate(lat1, long1, lat2, long2):
dLon = (long2 - long1)
y = math.sin(dLon) * math.cos(lat2)
x = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dLon)
brng = math.atan2(y, x)
brng = math.degrees(brng)
brng = (brng + 360) % 360
brng = 360 - brng # count degrees clockwise - remove to make counter-clockwise
return brng
Run Code Online (Sandbox Code Playgroud)
0度角表示朝北。