我对Android编程很新,但我对此非常擅长(我认为:)) 我正在做的是建立一个位于故事的应用程序。它是一个应用程序,可将音频文件放置在某些GPS标记处,并使用户能够在特定位置收听它们。
下一步是移动音频文件。我想要做的是在城市的特定位置设置标记。 (完成)。接下来,我想检查围绕它移动的第二个标记的位置。
到目前为止我所拥有的是:
public void checkCircularPosition(){
/*
* could be a solution?
*
radius = 250; //offset in meters
gpsLatCenter = 5.1164; //?how can i make this accurate in meters?
gpsLonCenter = 52.0963; //??how can i make this accurate in meters?
degree = 0; //should be variable over time (full circle in 1Hr, 3600sec --> 360/3600 = 0,1 deg/s)
radian;
radian = (degree/180)*Math.PI;
gpsCircleLat = gpsLatCenter+Math.cos(radian)*radius;
gpsCircleLon = gpsLonCenter-Math.sin(radian)*radius;
*/
}
现在,我已经在adobe flash中检查了这段代码,这使得一个影片剪辑在一个圆圈中移动。所以我知道计算有点正确。但是,我无法计算结果坐标的纬度和经度。
EDIT !!
我在下面发布的帮助中找到了解决方案。还有很多工作要弄清楚如何使用结果。无论如何,我在下面发布了结果函数。
要做到这一点,你需要_radius,它是6371(地球的半径),一个方位,一个距离和一个起始位置。
非常感谢!
public static void destinationPoint(double brng, double dist) {
dist = dist/_radius; // convert dist to angular distance in radians
brng = Math.toRadians(brng); //
double lat1 = Math.toRadians(_lat);
double lon1 = Math.toRadians(_lon);
double lat2 = Math.asin( Math.sin(lat1)*Math.cos(dist) + Math.cos(lat1)*Math.sin(dist)*Math.cos(brng) );
double lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(dist)*Math.cos(lat1), Math.cos(dist)-Math.sin(lat1)*Math.sin(lat2));
lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI; // normalise to -180..+180º
Log.i(APPTAG, ""+Math.toDegrees(lat2));
Log.i(APPTAG, ""+Math.toDegrees(lon2));
Location movLoc = new Location("");
movLoc.setLatitude(Math.toDegrees(lat2));
movLoc.setLongitude(Math.toDegrees(lon2));
Log.i(APPTAG, ""+movLoc);
}
答案 0 :(得分:1)
您应该在此网站上查看目的地点给定距离并从起点承担:http://www.movable-type.co.uk/scripts/latlong.html
该网站具有使用起点(gpsLatCenter / gpsLonCenter)和承载(代码中度)来计算最终纬度/经度(gpsCircleLat / gpsCircleLon)的正确公式。
答案 1 :(得分:0)