【问题标题】:Constructing a triangle based on Coordinates on a map根据地图上的坐标构造三角形
【发布时间】:2010-06-06 19:25:18
【问题描述】:

我正在构建一个基于地理定位的应用程序,并且我正在尝试找出一种方法来让我的应用程序意识到当用户面向给定位置的方向(特定的经/纬度坐标)时。我已经算好了数学,我只需要构建三角形。

//更新

所以我已经想出了一个很好的一点......

下面是一种方法,它采用 long / lat 值并尝试计算一个三角形,找到一个 700 米外的点,并在其左侧 + 右侧找到一个点。然后它会使用这些来构建三角形。它计算出正确的经度,但纬度最终在东非海岸附近的某个地方。 (我在爱尔兰!)。

public void drawtri(double currlng,double currlat, double bearing){

    bearing = (bearing < 0 ? -bearing : bearing);

    System.out.println("RUNNING THE DRAW TRIANGLE METHOD!!!!!");
    System.out.println("CURRENT LNG" + currlng);
    System.out.println("CURRENT LAT" + currlat);
    System.out.println("CURRENT BEARING" + bearing);

    //Find point X(x,y)
    double distance = 0.7; //700 meters.
    double R = 6371.0; //The radius of the earth.
    //Finding X's y value.

    Math.toRadians(currlng);
    Math.toRadians(currlat);
    Math.toRadians(bearing);

    distance = distance/R;
    Global.Alat = Math.asin(Math.sin(currlat)*Math.cos(distance)+ 
            Math.cos(currlat)*Math.sin(distance)*Math.cos(bearing));
    System.out.println("CURRENT ALAT!!: " + Global.Alat);
    //Finding X's x value.
    Global.Alng = currlng + Math.atan2(Math.sin(bearing)*Math.sin(distance)
            *Math.cos(currlat), Math.cos(distance)-Math.sin(currlat)*Math.sin(Global.Alat));
    Math.toDegrees(Global.Alat);
    Math.toDegrees(Global.Alng);


    //Co-ord of Point B(x,y)
    // Note: Lng = X axis, Lat = Y axis.
    Global.Blat = Global.Alat+ 00.007931;
    Global.Blng = Global.Alng;

    //Co-ord of Point C(x,y)
    Global.Clat = Global.Alat  - 00.007931;
    Global.Clng = Global.Alng;

    }

通过调试,我确定问题出在此处完成的纬度计算..

 Global.Alat = Math.asin(Math.sin(currlat)*Math.cos(distance)+ 
        Math.cos(currlat)*Math.sin(distance)*Math.cos(bearing));

我不知道为什么,也不知道如何解决它。我从这个网站得到了公式..

http://www.movable-type.co.uk/scripts/latlong.html

它看起来是正确的,我已经测试了很多东西......

我已尝试转换为弧度,然后将计算返回到度数等。

任何人有任何想法如何解决此方法,以便它将三角形映射到距我当前位置仅 700 米的方向上我所面对的方向?

谢谢,

【问题讨论】:

    标签: google-maps math geolocation coordinates


    【解决方案1】:

    长途:http://www.dtcenter.org/met/users/docs/write_ups/gc_simple.pdf 但对于短距离您可以尝试使用简单的二维数学来模拟“经典”指南针:http://en.wikipedia.org/wiki/Compass#Using_a_compass。例如,您可以从点 A 和 B 获取像素坐标,并找到连接这些点的线与垂直线之间的角度。

    你也应该考虑磁偏角:http://www.ngdc.noaa.gov/geomagmodels/Declination.jsp

    //编辑:

    我试图给出直观的解决方案。但是从 long/lat 计算屏幕坐标并不容易,因此您可能应该使用链接中提供的公式。

    【讨论】:

    • 我并不是真的想像这样画一个指南针,我更想检查一下我所面对的方向是否与该位置所在的方向相同。getbearing() 不会工作,因为当我不移动时它不会更新。假设用户是静止的。
    • 在这种情况下,getbearing 完全没有用,请改用 getOrientation()。 z轴上的旋转是方位角。然而,读取设备方向可能是这个问题中最简单的部分。
    • 是的,Android 知道我在哪里,另一个位置,它知道我的方位,但我希望它能够识别我的方位何时与该位置的方向相同。我该怎么做呢?
    • 这只是数学,但如果您需要一些代码,此站点上有一些 JS:movable-type.co.uk/scripts/latlong.htmlig.utexas.edu/outreach/googleearth/latlong.html
    • 你已经部分回答了我的问题,我已经更新了问题以反映你提供的新信息
    【解决方案2】:

    也许是因为我不懂javascript,但你不必做类似的事情

    currlat = Math.toRadians(currlat);

    实际将 currlat 值更改为弧度。

    【讨论】:

    • 这是java。不是 JAvascript。另外我已经说过我已经尝试过弧度 + 度数转换。
    • 好的。在上面粘贴的代码中 Math.toRadians(currlat) 实际上不会改变 currlat 的值。只是帮我清理一下,对不起。
    【解决方案3】:

    问题是无论我在 java 中管道输出的内容是否以弧度输出,技巧是将所有内容更改为弧度,然后输出以弧度,转换为度数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多