2013-03-14 84 views
2

我正在开发一个应用程序,我需要将所有的GPS坐标存储在数据库中。我可以存储它,但只有最后一个坐标。如何在FlashBuilder中存储GPS坐标?

我的问题是,我如何存储用户活动的所有坐标?我正在使用WAMP服务器。这是我的代码,它只存储最后一个坐标。请注意,我只存储长期和纬度与此代码

protected function onUpdate(event:GeolocationEvent):void { 
    trace("Update event called"); 
    log.text = "latitude = " + event.latitude + 
    "\nlongitude = " + event.longitude + 
    "\naltitude = " + event.altitude + 
    "\nverticalAccuracy = " + event.verticalAccuracy + 
    "\nhorizontalAccuracy = " + event.horizontalAccuracy + 
    "\nspeed = " + event.speed + 
    "\nheading = " + event.heading + 
    "\ntimestamp = " + event.timestamp; 
    lat.text="" + event.latitude; 
    long.text="" + event.longitude; 
    langTextInput.text = long.text 
    latTextInput.text=lat.text 
    gpstableService.commit(); 
+0

你真的需要将它存储在数据库中吗?怎么样一个共享对象? – Pier 2013-03-14 20:44:44

回答

0

我认为你需要问自己的第一个问题是你是否想保存这些坐标本地或WAMP的服务器上。

如果你只在本地需要它们,那么一个简单的选择就是使用本地的SharedObject(例如,你可以用接收事件的日期作为关键字来存储任何新的位置)。 如果你真的想使用本地数据库,那么你可以使用像这样的一个服务:

protected function onUpdate(event:GeolocationEvent):void 
    { 
     trace("Update event called"); 
     gpsTableService.addCoordinates(event.latitude, event.longitude); 
    } 

其中:

package 
{ 
    import flash.data.SQLConnection; 
    import flash.data.SQLStatement; 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 
    import flash.events.SQLEvent; 

    public class DatabaseService extends EventDispatcher 
    { 
     public var conn:SQLConnection; 

     public function DatabaseService() 
     { 
      conn = new SQLConnection(); 
      conn.addEventListener(SQLEvent.OPEN, handleConnectionSuccess); 
      conn.openAsync(null); 
     } 

     public function addCoordinates(lat:String, long:String):void 
     { 
      var insertStmt:SQLStatement = new SQLStatement(); 
      insertStmt.sqlConnection = conn; 
      var sql:String = "INSERT INTO coordinates (latitude, longitude)" + 
       " VALUES (" + lat + ", " + long + ")"; 
      insertStmt.text = sql; 
      insertStmt.addEventListener(SQLEvent.RESULT, handleInsertionResult); 
      insertStmt.execute(); 
     } 

     private function createTable():void 
     { 
      var createStmt:SQLStatement = new SQLStatement(); 
      createStmt.sqlConnection = conn; 
      var sql:String = "CREATE TABLE IF NOT EXISTS coordinates " + 
       "(coordId INTEGER PRIMARY KEY AUTOINCREMENT, latitude TEXT, longitude TEXT)"; 
      createStmt.text = sql; 
      createStmt.addEventListener(SQLEvent.RESULT, handleTableCreationResult); 
      createStmt.execute(); 
     } 

     private function handleConnectionSuccess(event:SQLEvent):void 
     { 
      createTable(); 
     } 

     private function handleTableCreationResult(event:SQLEvent):void 
     { 
      dispatchEvent(new Event(Event.COMPLETE)); 
     } 

     private function handleInsertionResult(event:SQLEvent):void 
     { 
      var stmt:SQLStatement = event.target as SQLStatement; 
      stmt.removeEventListener(SQLEvent.RESULT, handleInsertionResult); 
      trace ("Coordinates are saved in DB"); 
     } 
    } 
} 

您可以在每次接收GPS事件的时间,然后调用这个服务gpsTableServiceDatabaseService的一个实例。

如果您需要在您的服务器上发送此信息,那么您应该编写一个PHP脚本来处理您的请求。该脚本将负责数据库管理,即将数据存储到数据库中。要从Flash应用程序调用此脚本,您需要使用户URLVariableURLRequestURLLoader

+0

我添加了一个示例来演示如何使用本地数据库 – duTr 2013-03-16 00:35:05