【问题标题】:find latitude and longitude using distance使用距离查找纬度和经度
【发布时间】:2012-02-10 17:34:53
【问题描述】:

我想找纬度,例如

Point A = (18.5204303,73.8567437)
Point B = (x,73.8567437)
Distance =20KM(Kilometers)

我需要找到B点的纬度(x),即距离A点20公里。经度应该相同。帮我 提前致谢

【问题讨论】:

  • 你也不需要角度吗?否则,有无限数量的 B = (x, y) 点符合您的条件 - 在半径为 20 公里的圆上,中心在 A...
  • 是的,我需要角半径,但我不知道如何找到它。
  • 所以你有一个带有两个未知数的方程 - 数学对你不利;-)。您需要同时知道:半径和角度才能准确找到一个B
  • 我检查了这个链接janmatuschek.de/LatitudeLongitudeBoundingCoordinates(第3.1节)用一些公式整理,但它与20公里处绘制的圆圈不匹配
  • 抱歉,这里的经度将固定在 A 点 = (18.5204303,73.8567437) B 点 = (x,73.8567437) 距离 =20KM(公里)

标签: javascript map geolocation geospatial


【解决方案1】:

我找到了问题的答案

var lat1 = 18.5204303;
    var lon1 = 73.8567437;
    var d = 20;   //Distance travelled
    var R = 6371;
    var brng = 0;
    var LatMax;
    brng = toRad(brng); 
    var lat1 = toRad(lat1), lon1 = toRad(lon1);
    var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R) + 
                      Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) );

    var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
                             Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));
        lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI;  
    lat2= toDeg(lat2);
    lon2= toDeg(lon2);
    alert(lat2);
    alert(lon2);

function toRad(Value) {
    /** Converts numeric degrees to radians */
    return Value * Math.PI / 180;
}
 function toDeg(Value) {
   return Value * 180 / Math.PI;
}

谢谢大家

【讨论】:

    【解决方案2】:

    我不是这方面的专家。但我曾经使用movable-type 的公式计算两点之间的距离。

    请检查网站。它会给你一些提示。我认为这 destinationrhumblines 公式与您的要求相似。看看

    【讨论】:

    • 这些不是算法,只是公式。
    • 如果有帮助,您可以将其标记为答案.. 这样有人会发现它有用
    • 谢谢拉梅什,我通过您的链接找出了我的问题的逻辑并发布了我的答案。
    • @Nishu,太好了。你不必接受我的回答。只需对其进行投票并将您自己的答案标记为已接受。因为那是完整的......
    【解决方案3】:

    我不确定这应该是答案还是评论。但是由于我还不能写 cmets,所以我会写一个答案。

    This 页面是进行距离计算的重要来源。在这种情况下,您可能正在寻找代码来计算从给定位置沿恒向线行进时的新位置。引用链接页面:

    要找到真实路线 tc 上一个点的纬度/经度,沿着一条垂直线到 (lat1,lon1) 的距离 d(初始点不能是极点!):

    lat= lat1+d*cos(tc)
    IF (abs(lat) > pi/2) "d too large. You can't go this far along this rhumb line!"
    IF (abs(lat-lat1) < sqrt(TOL))
    {
        q=cos(lat1)
    }
    ELSE 
    {
        dphi=log(tan(lat/2+pi/4)/tan(lat1/2+pi/4))
        q= (lat-lat1)/dphi
    }
    dlon=-d*sin(tc)/q
    lon=mod(lon1+dlon+pi,2*pi)-pi
    

    该链接仍然有用,但您必须使用一些代数来求解已知经度和未知路线。因为你在很远的北方,所以大圆圈距离可能比恒向线更有用。但我想这取决于问题。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多