我正在开发一个 AS3 AIR for Android 应用程序。“我的问题是:给定 GPS 位置,我想检索运动方向(北、西北、西、西南、南、东南、东、东北)”
我想要如何使用 2 个不同的 GPS 读数来推断行进方向的代码。然后,我想将该数据用于 360 度。
我想我了解如何获得大致的方向,例如北、南、东和西。我会得到 2 个单独的 GPS 读数并比较类似的东西......
查看在第 1 次或第 2 次 GPS 读数中 X 是否更大。查看在第 1 次或第 2 次 GPS 读数中 Y 是否更大。从这里我应该可以看到大方向。比较 X1 和 X2 的差异与 Y1 和 Y2 的差异。然后您可以看到用户最常朝哪个方向前进。然后显示方向。
我不确定如何获取数据并将其用于像指南针一样的 360 度解释……有人可以帮忙吗?
工作守则------------------------------------------------ -------------------------------------------
package
{
import flash.display.Sprite;
// Geolocation sensor stuff
import flash.sensors.Geolocation;
import flash.events.GeolocationEvent;
//Timer setup stuff for setting frequesncy of GPS Update
import flash.utils.Timer;
import flash.events.TimerEvent;
// Sprite and Textfield display
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class FlashTest extends Sprite
{
//Variable to check if current or prior Geolocation Event fired
private var gpsCheck:int = 1;
public var dLon:Number
//latitude and longitude in degrees (RAW info from Geolocation)
public var gpsLat1:Number
public var gpsLon1:Number
private var gpsLat2:Number
private var gpsLon2:Number
public var bearing:Number
// Latitude and longitude in radians converted from Degrees
public var gpsLat1R:Number
public var gpsLon1R:Number
private var gpsLat2R:Number
private var gpsLon2R:Number
private var yy:Number
private var xx:Number
public function FlashTest()
{
// Text box for displaying results
var my_txt:TextField = new TextField();
my_txt.wordWrap=true;
my_txt.width = 300;
my_txt.height = 300;
addChild(my_txt);
/*
//If GPS is on device create Geolocation object named "my_geo"
//Request updates from my_geo every 2000 milliseconds. Run onGeoUpdate function
//when Event is triggered. After that create the text box for displaying data.
if (Geolocation.isSupported)
{
var my_geo:Geolocation = new Geolocation();
my_geo.setRequestedUpdateInterval(2000);
my_geo.addEventListener(GeolocationEvent.UPDATE, onGeoUpdate);
var my_txt:TextField = new TextField();
my_txt.wordWrap=true;
my_txt.width = 300;
my_txt.height = 300;
addChild(my_txt);
}
// If GPS is not supported on device display "No GPS Signal"
else
{
addChild(my_txt);
my_txt.wordWrap=true;
my_txt.width = 300;
my_txt.height = 300;
addChild(my_txt);
my_txt.text = "No GPS Signal ";
}
*/
// False GPS reading being passed for testing
//COMMENT THESE LINES OUT STARTING HERE---
gpsLat1 = 42.1234584;
gpsLon1 = -83.1234577;
gpsLat2 = 42.1234583;
gpsLon2 = -83.1234577;
// END OF WHAT SHOULD BE COMMENTED OUT---
// Equations to convert all RAW Geolocation information over to radians
gpsLat1R = gpsLat1 * Math.PI / 180;
gpsLon1R = gpsLon1 * Math.PI / 180;
gpsLat2R = gpsLat2 * Math.PI / 180;
gpsLon2R = gpsLon2 * Math.PI / 180;
// The rest of the math
dLon = gpsLon1 - gpsLon2;
yy = Math.sin(dLon) * Math.cos(gpsLat2R);
xx = Math.cos(gpsLat1R) * Math.sin(gpsLat2R) - Math.sin(gpsLat1R) * Math.cos(gpsLat2R) * Math.cos(dLon);
bearing = Math.atan2(yy, xx) * 180 / Math.PI;
// Run The Geoupdate function
onGeoUpdate();
// onGeoUpdate basically displays the information that was collected and converted.
// This is where you will put what you want the code to do with the results
function onGeoUpdate():void
{
my_txt.text = "My Latitude is "+gpsLat1+ " and my Longitude is "+gpsLon1+
"My 2nd Latitude is "+gpsLat2+" and my 2nd Longitude is "+gpsLon2+
" Bearing is " +bearing;
}
}
}
}