Google maps 基于地图上的坐标构建三角形

Google maps 基于地图上的坐标构建三角形,google-maps,math,geolocation,coordinates,Google Maps,Math,Geolocation,Coordinates,我正在构建一个基于地理位置的应用程序,我试图找出一种方法,当用户面对给定位置的方向(特定的长/宽坐标)时,让我的应用程序实现。我已经算出了数学,我只需要构造一个三角形 //更新 所以我想出了一个很好的办法 下面是一种方法,它接受long/lat值,并尝试计算一个三角形,找到700米以外的一个点,左+右各一个点。然后用这些来构造三角形。它计算出正确的经度,但纬度最终位于东非海岸的某个地方。(我在爱尔兰!) 我不知道为什么,也不知道如何修复它。我从这个网站上得到了这个公式 它看起来是正确的,我已经

我正在构建一个基于地理位置的应用程序,我试图找出一种方法,当用户面对给定位置的方向(特定的长/宽坐标)时,让我的应用程序实现。我已经算出了数学,我只需要构造一个三角形

//更新

所以我想出了一个很好的办法

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

我不知道为什么,也不知道如何修复它。我从这个网站上得到了这个公式

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

我试着转换成弧度,然后将计算结果返回到度数,等等

有没有人知道如何修正这个方法,这样它就可以在距离我当前位置700米的地方将三角形映射到我所面对的方向上

谢谢,

长途电话: 但对于短距离,您可以尝试使用以下简单的2d数学模拟“经典”指南针:。例如,您可以从点A和B获取像素坐标,并找到连接这些点的线和垂直线之间的角度

你也应该考虑磁偏角:

//编辑:


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

可能是因为我不懂javascript,但您不需要做类似的事情吗

currrat=Math.toRadians(currrat)


将currlat值实际更改为弧度。

问题是,无论我用java管道输出的是弧度,诀窍是将所有内容更改为弧度,然后输出弧度,转换为度。

我并不是真的想画一个罗盘,我更想做一个检查,看看我面对的方向是否与位置所在的方向相同。getbearing()不起作用,因为它在我不移动时不会更新。假设用户处于静止状态。在这种情况下,getbearing不起作用,请改用getOrientation()。z轴上的旋转是方位角。然而,读取设备方向可能是这个问题中最简单的部分。是的,Android知道我在哪里,其他位置,它知道我的方位,但我希望它能识别我的方位与位置在同一方向。我该怎么做呢?这只是数学问题,但是如果你需要一些代码,这个网站上有一些JS:或者你已经部分回答了我的问题,我已经更新了这个问题,以反映你提供的新信息它是java。不是JAvascript。我也说过我试过弧度+度转换。好的。在上面粘贴的代码中,Math.toRadians(currrat)实际上不会更改currrat的值。只是帮我清理一下,对不起。
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));