google-maps - 根据 map 上的坐标构造三角形

标签 google-maps math geolocation coordinates

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

//更新

所以我已经弄清楚了很多...

下面是一种采用长/纬度值并尝试计算一个三角形的方法,该三角形找到一个在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米?

谢谢,

最佳答案

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

您可能还应该考虑磁偏角:http://www.ngdc.noaa.gov/geomagmodels/Declination.jsp

//编辑:

我试图提供直观的解决方案。但是,根据长/纬度计算屏幕坐标并非易事,因此您可能应该使用链接中提供的公式。

关于google-maps - 根据 map 上的坐标构造三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2985580/

相关文章:

google-maps - Flutter Google Map 在 IOS 中首次打开时崩溃

javascript - 谷歌地图 fitBounds 回调

javascript - 在 Canvas 上绘制 X 的正弦 Y

javascript - BackgroundGeoLocation cordova 插件不起作用

android - 如何在android maps v2中获取蓝点的坐标

ios - 使用集群自定义谷歌地图上的标记

html - 谷歌地图停留在左上角

language-agnostic - 无需迭代即可为一组数字数据维护哪些统计信息?

c++ - 在 C++ 中计算具有不同列数的数字的不同组合?

android - TelephonyManager.getNetworkCountryIso() 究竟返回什么?