已知距离时求经度角
Finding Longitude Angle when distance is known
鉴于纬度也没有改变,我试图找到新点的经度(东西)角度。
给定:起始纬度、起始经度、行驶距离(英里)。
所需结果:距起点 "distance of travel" 的最大和最小经度和纬度度数。
代码如下:
尝试 1:使用 "close enough" 常量:
function(longitude, latitude, travelRadius, next){
var milesPerDegreeOfLongitude = 69.172;
var milesPerDegreeOfLatitude = 69.2;
var location = { longitude : longitude, latitude : latitude };
var longitudeDelta = (travelRadius / milesPerDegreeOfLongitude);
location.maxLongitude = longitude + longitudeDelta;
location.minLongitude = longitude - longitudeDelta;
var latitudeDelta = (travelRadius / milesPerDegreeOfLatitude);
location.maxLatitude = latitude + latitudeDelta;
location.minLatiude = latitude - latitudeDelta;
next(location);
}
^ 这会产生非常接近的纬度,距离为 5 英里。但是根据 google 地图测量的经度约为 3.93 英里,方差太大。
尝试 2:1 弧度是 3,958.761 英里长(地球半径)的直线的角度,因此 X 英里长的直线的角度是 X/3,958.761 弧度。
function(longitude, latitude, travelRadius, next){
var radiusOfEarth = 3959.761;
//... omitting latitude ...
var distanceInRadians = (travelRadius / radiusOfEarth);
var degrees = (180 / Math.PI) * distanceInRadians;
location.maxLongitude = longitude + degrees;
location.minLongitude = longitude - degrees;
next(location)
}
^ 我又一次得到了大约 3.93 英里的经度距离。我该怎么做才能正确或至少在 0.5 英里的误差范围内?
编辑:使用 Mbo 的建议尝试 3:
var latitude = 37.7118042;
var longitude = -122.4458397;
var travelradius = 5;
function(latitude, longitude, travelRadius){
var milesPerDegreeOfLatitude = 69.172;
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude)
var location = { longitude : longitude, latitude : latitude };
var latitudeDelta = (travelRadius / milesPerDegreeOfLatitude);
location.maxLatitude = latitude + latitudeDelta;
location.minLatiude = latitude - latitudeDelta;
var longitudeDelta = (travelRadius / milesPerDegreeOfLongitude);
location.maxLongitude = longitude + longitudeDelta;
location.minLongitude = longitude - longitudeDelta;
return location;
}
输出:
{
longitude: -122.4458397,
latitude: 37.7118042,
maxLongitude: -122.37355611704736,
minLongitude: -122.51812328295263,
maxLatitude: 37.784058535260115,
minLatiude: 37.63954986473989
}
其中最大经度距起始位置约 3.85 英里。仍然关闭,期待类似:-122.3515 ~5 英里
milesPerDegreeOfLongitude
不是常数值!
这取决于纬度。 69.172
是赤道值(零纬度)。
对于其他纬度:
trueMilesPerDegreeOfLongitude = 69.172 * Cos(latitude)
请注意,您的代码使用度数,但 Math.cos 使用弧度:
var latitude = 37.7118042;
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude)
试试
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude * Math.Pi / 180)
我的大约。计算得出 latitudeDelta 为 0.09 和 122.44+-0.09 = 122.35, 122.53
鉴于纬度也没有改变,我试图找到新点的经度(东西)角度。
给定:起始纬度、起始经度、行驶距离(英里)。
所需结果:距起点 "distance of travel" 的最大和最小经度和纬度度数。
代码如下:
尝试 1:使用 "close enough" 常量:
function(longitude, latitude, travelRadius, next){
var milesPerDegreeOfLongitude = 69.172;
var milesPerDegreeOfLatitude = 69.2;
var location = { longitude : longitude, latitude : latitude };
var longitudeDelta = (travelRadius / milesPerDegreeOfLongitude);
location.maxLongitude = longitude + longitudeDelta;
location.minLongitude = longitude - longitudeDelta;
var latitudeDelta = (travelRadius / milesPerDegreeOfLatitude);
location.maxLatitude = latitude + latitudeDelta;
location.minLatiude = latitude - latitudeDelta;
next(location);
}
^ 这会产生非常接近的纬度,距离为 5 英里。但是根据 google 地图测量的经度约为 3.93 英里,方差太大。
尝试 2:1 弧度是 3,958.761 英里长(地球半径)的直线的角度,因此 X 英里长的直线的角度是 X/3,958.761 弧度。
function(longitude, latitude, travelRadius, next){
var radiusOfEarth = 3959.761;
//... omitting latitude ...
var distanceInRadians = (travelRadius / radiusOfEarth);
var degrees = (180 / Math.PI) * distanceInRadians;
location.maxLongitude = longitude + degrees;
location.minLongitude = longitude - degrees;
next(location)
}
^ 我又一次得到了大约 3.93 英里的经度距离。我该怎么做才能正确或至少在 0.5 英里的误差范围内?
编辑:使用 Mbo 的建议尝试 3:
var latitude = 37.7118042;
var longitude = -122.4458397;
var travelradius = 5;
function(latitude, longitude, travelRadius){
var milesPerDegreeOfLatitude = 69.172;
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude)
var location = { longitude : longitude, latitude : latitude };
var latitudeDelta = (travelRadius / milesPerDegreeOfLatitude);
location.maxLatitude = latitude + latitudeDelta;
location.minLatiude = latitude - latitudeDelta;
var longitudeDelta = (travelRadius / milesPerDegreeOfLongitude);
location.maxLongitude = longitude + longitudeDelta;
location.minLongitude = longitude - longitudeDelta;
return location;
}
输出:
{
longitude: -122.4458397,
latitude: 37.7118042,
maxLongitude: -122.37355611704736,
minLongitude: -122.51812328295263,
maxLatitude: 37.784058535260115,
minLatiude: 37.63954986473989
}
其中最大经度距起始位置约 3.85 英里。仍然关闭,期待类似:-122.3515 ~5 英里
milesPerDegreeOfLongitude
不是常数值!
这取决于纬度。 69.172
是赤道值(零纬度)。
对于其他纬度:
trueMilesPerDegreeOfLongitude = 69.172 * Cos(latitude)
请注意,您的代码使用度数,但 Math.cos 使用弧度:
var latitude = 37.7118042;
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude)
试试
var milesPerDegreeOfLongitude = 69.172 * Math.cos(latitude * Math.Pi / 180)
我的大约。计算得出 latitudeDelta 为 0.09 和 122.44+-0.09 = 122.35, 122.53