我正在构建一个基于地理位置的应用程序,我正在尝试找到一种方法使我的应用程序能够意识到用户是否朝向给定位置(特定的经纬度)。我已经解决了数学问题,现在只需构建三角形。
//更新
所以我已经解决了很大一部分...
以下是一个采用long/lat值并尝试计算一个三角形的方法,找到一个距离该点700米远且左右各一个点。然后使用它们来构建三角形。 它计算出正确的经度,但纬度则出现在东非海岸附近。(我在爱尔兰!)
我不知道为什么,也不知道如何解决它。我从这个网站上得到了这个公式:http://www.movable-type.co.uk/scripts/latlong.html。它看起来正确,我已经尝试了多种方法... 我尝试将其转换为弧度,然后再将计算结果转回角度等等。有人有什么想法可以修复这个方法,使其仅在我当前位置的方向上映射距离700米的三角形吗?谢谢。
//更新
所以我已经解决了很大一部分...
以下是一个采用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米的三角形吗?谢谢。