2010-06-06 88 views
3

我正在构建基于地理位置的应用程序,我试图找出一种方法来让我的应用程序在用户面对指定位置的方向时实现(特定长/ lat co-ord)。我有数学计算,我只有三角构造。在地图上构建基于坐标的三角形

// UPDATE

所以我想通了一个很好的有点...

下面是发生在一个经度/纬度值,并试图计算三角形找到一个点的方法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米的三角形?

感谢,

回答

0

问题是,无论我在java中输入什么,都会在Radians中输出,Trick将所有内容都改为Radians,然后输出以弧度表示,转换为度数。

1

长途: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

//编辑:

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

+0

我并不是真的想绘制一个指南针,所以我更想做一个检查,看看我面对的方向是否与该位置的方向相同。getbearing()不会工作,因为它赢得了'当我不移动时更新。假定用户是静止的。 – Skizit 2010-06-06 20:07:43

+0

刚好在这种情况下没有用处,请改用getOrientation()。 z轴上的旋转是方位角。但是读取设备方向可能是这个问题最容易的部分。 – 2010-06-06 21:36:49

+0

是的,Android知道我在哪里,另一个位置,它知道我的方位,但我希望它能够识别我的方位与位置相同的方向。我会怎么做呢? – Skizit 2010-06-06 21:58:18

0

也许它,因为我不知道的JavaScript,但不要你必须做一些像

currlat = Math.toRadians(currlat);

真正改变currlat值为弧度。

+0

这是java。不是JAvascript。另外我已经说过我已经尝试过Radians + Degree转换。 – Skizit 2010-06-10 15:20:30

+0

好的。在Math.toRadians上面粘贴的代码(currlat)实际上并不会改变currlat的价值。只是为我清理它,对不起。 – 2010-06-10 16:06:39