2

アプリケーションを開発していますが、すべてのGPS座標をデータベースに保存する必要があります。保存できましたが、最後の座標しか保存できませんでした。

私の質問は、ユーザーのアクティビティのすべての座標をどのように保存できるかということです。WAMPサーバーを使用しています。これは私のコードで、最後の座標のみを格納します。このコードではLongとLatのみを保存していることに注意してください

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();
4

1 に答える 1

0

最初に自問する必要があるのは、この座標をローカルに保存するのか、WAMPサーバーに保存するのかということだと思います。

ローカルでのみ必要な場合は、ローカルのSharedObjectを使用するのが簡単なオプションです(たとえば、イベントを受け取った日付をキーとして新しい位置を保存できます)。本当にローカルデータベースを使用したい場合は、次のようなサービスを使用できます。

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イベントを受信するたびにこのサービスに電話をかけることができます。

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

gpsTableServiceのインスタンスはどこにありますかDatabaseService

サーバーでこの情報を送信する必要がある場合は、リクエストを処理するためのPHPスクリプトを作成する必要があります。このスクリプトは、データベース管理、つまりデータをデータベースに保存する役割を果たします。URLVariableFlashアプリケーションからこのスクリプトを呼び出すには、ユーザーを、、、URLRequestおよびにする必要がありますURLLoader

于 2013-03-14T23:31:15.690 に答える