2013-03-14 83 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