我在研究mapbox的基础上,根据我现在的。latlong
,随机距离为 226mt
和随机程度 179 degrees
我又计算了另一条纬线,如下图。
function findpos(){
var ptt = new mapboxgl.LngLat(latitude,longitude);
var ptt2 = destinationPoint(179.85, 0.226, ptt);
return ptt2;
}
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
Number.prototype.toDeg = function() {
return this * 180 / Math.PI;
}
function destinationPoint(brng, dist, pointA) {
dist = dist / 6378.1;
brng = brng.toRad();
var lat1 = pointA.lat.toRad(), lon1 = pointA.lng.toRad();
var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
Math.cos(lat1),
Math.cos(dist) - Math.sin(lat1) *
Math.sin(lat2));
if (isNaN(lat2) || isNaN(lon2)) return null;
console.log("des ",lon2,lat2);
return new mapboxgl.LngLat(lat2.toDeg(), lon2.toDeg());
}
但现在我想求两条纬线之间的角度或方位,发现是这样的。
// Converts from degrees to radians.
function toRadians(degrees) {
return degrees * Math.PI / 180;
};
// Converts from radians to degrees.
function toDegrees(radians) {
return radians * 180 / Math.PI;
}
function bearing(startLat, startLng, destLat, destLng){
startLat = toRadians(startLat);
startLng = toRadians(startLng);
destLat = toRadians(destLat);
destLng = toRadians(destLng);
y = Math.sin(destLng - startLng) * Math.cos(destLat);
x = Math.cos(startLat) * Math.sin(destLat) -
Math.sin(startLat) * Math.cos(destLat) * Math.cos(destLng - startLng);
brng = Math.atan2(y, x);
brng = toDegrees(brng);
return (brng + 360) % 360;
// return brng;
}
它计算一个度数并给出一个结果。但是当我决定把已经计算好的纬度通过函数 findpos()
以上,我应该得到的答案是 179.85 degrees
但我得到的角度是 270 degree
.
哪个部分的代码是正确的?我已经创建了一个工作示例 此处,并在控制台中记录了数值。有谁能帮我解决一下吗?
你使用的是 mapboxgl.LngLat()
函数。函数名已经包含了它希望你传递经度和纬度的顺序--> 先经度后纬度。你是先传经纬度再传经度。这肯定会导致一个问题。
你的代码。
function findpos(){
var ptt = new mapboxgl.LngLat(latitude,longitude);
var ptt2 = destinationPoint(179.85, 0.226, ptt);
return ptt2;
}
试试这个
function findpos(){
var ptt = new mapboxgl.LngLat(longitude,latitude);
var ptt2 = destinationPoint(179.85, 0.226, ptt);
return ptt2;
}
你这部分的代码也是如此
return new mapboxgl.LngLat(lat2.toDeg(), lon2.toDeg());