Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始位置、方位和距离的结果位置_Java_Geolocation_Coordinates - Fatal编程技术网

Java 初始位置、方位和距离的结果位置

Java 初始位置、方位和距离的结果位置,java,geolocation,coordinates,Java,Geolocation,Coordinates,我已经试着从这个角度来实现这个功能 φ2=asin(sin(φ1)*cos(d/R)+cos(φ1)*sin(d/R)*cos(θ)) λ2=λ1+atan2(sin(θ)*sin(d/R)*cos(φ1),cos(d/R)−sin(φ1)*sin(φ2)) 我的函数的结果是:0.0905,1.710,当调用时它应该是53.188 0.133 fromBearingDistance(53.32055555555556f, 1.7297222222222224f, 96.02166

我已经试着从这个角度来实现这个功能

φ2=asin(sin(φ1)*cos(d/R)+cos(φ1)*sin(d/R)*cos(θ))

λ2=λ1+atan2(sin(θ)*sin(d/R)*cos(φ1),cos(d/R)−sin(φ1)*sin(φ2))

我的函数的结果是:
0.0905,1.710
,当调用时它应该是
53.188 0.133

fromBearingDistance(53.32055555555556f, 1.7297222222222224f,
        96.02166666666666f, 124.8f);
这与样本站点的坐标相同

这到底是怎么回事代码是字面上的like for like。我唯一改变的就是把VAR改成双打


我使用site将度数转换为十进制。

我认为部分问题可能是纬度、经度和方位值似乎以度为单位,而链接页面上的公式要求它们以弧度为单位。如果向下滚动页面底部,页面作者实际上提供了计算的javascript实现,作为表示位置的
LatLon
对象的方法。这里的方法似乎与您正在尝试的方法相匹配。请注意,他在计算之前做的第一件事是将所有内容转换为弧度,最后一件事是将其转换回度数

/**
 * Returns the destination point from this point having travelled the given distance
 * (in km) on the given initial bearing (bearing may vary before destination is reached)
 *
 *   see http://williams.best.vwh.net/avform.htm#LL
 *
 * @param   {Number} brng: Initial bearing in degrees
 * @param   {Number} dist: Distance in km
 * @returns {LatLon} Destination point
 */
LatLon.prototype.destinationPoint = function(brng, dist) 
{
  dist = typeof(dist)=='number' ? dist : typeof(dist)=='string' && dist.trim()!='' ? +dist : NaN;
  dist = dist/this._radius;  // convert dist to angular distance in radians
  brng = brng.toRad();  // 
  var lat1 = this._lat.toRad(), lon1 = this._lon.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));
  lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI;  // normalise to -180..+180º

  return new LatLon(lat2.toDeg(), lon2.toDeg());
}

java.lang.Math
类具有从度数到弧度来回转换的方法,因此用它们改进代码应该很容易

太好了,现在很好用。而且我认为我计算的实际数据不正确!
/**
 * Returns the destination point from this point having travelled the given distance
 * (in km) on the given initial bearing (bearing may vary before destination is reached)
 *
 *   see http://williams.best.vwh.net/avform.htm#LL
 *
 * @param   {Number} brng: Initial bearing in degrees
 * @param   {Number} dist: Distance in km
 * @returns {LatLon} Destination point
 */
LatLon.prototype.destinationPoint = function(brng, dist) 
{
  dist = typeof(dist)=='number' ? dist : typeof(dist)=='string' && dist.trim()!='' ? +dist : NaN;
  dist = dist/this._radius;  // convert dist to angular distance in radians
  brng = brng.toRad();  // 
  var lat1 = this._lat.toRad(), lon1 = this._lon.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));
  lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI;  // normalise to -180..+180º

  return new LatLon(lat2.toDeg(), lon2.toDeg());
}