【问题标题】:Compare last GPS and current GPS data比较上次 GPS 和当前 GPS 数据
【发布时间】:2016-04-10 09:37:45
【问题描述】:

我有一个项目需要通过它发送 GPS 坐标。每 6 秒插入一次。坐标存储在 MYsql 数据库中。我每 6 秒运行一次查询,如果最后一个位置与当前位置不同,应用程序会将数据发送到远程服务器。在浏览器中它就像一个魅力,但在终端我不能使用会话。

我试过 apc_add 但根据 PHP 手册,它很久以前就被删除了。

进行此类比较的最常见方法是什么?将最后的坐标存储到数据库或文本文件中?或者有没有办法在运行时将它存储起来?

**这是我的主要代码:**

<?php 
require 'bootstrap.php';

use App\Libs\appServiceProvider;
use App\Libs\socketServiceProvider;
use Socket\Raw\Factory;
use App\Models\Koordinata;

$app = new appServiceProvider;


if (empty($_SESSION['lat']) || empty($_SESSION['lon'])) {
    $_SESSION['lat'] = 0;
    $_SESSION['lon'] = 0;
}

$lastLat = $_SESSION['lat'];
$lastLon = $_SESSION['lon'];

$currentLat = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lat;
$currentLon = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lon;

if ($lastLat != $currentLat && $lastLon != $currentLon) {
    $factory = new Factory();
    $socket = $factory->createClient('REMOTEADDRESSE');
    echo "Kapcsolat létrehozva\n";
    $socket->write("MESSAGE");
    echo "Üzenet elküldve\n";
    var_dump("Válasz: " . $socket->read(8192));
    $socket->close();
} else {
    echo "Idle";
    $log->addDebug("GPS data NOT CHANGED! STATUS IDLE!");
}

$_SESSION['lat'] = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lat;
$_SESSION['lon'] = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lon;

 ?>

【问题讨论】:

  • 在终端中运行时,您可以简单地在无限循环中运行脚本,也许使用 sleep() 来避免主动等待。 `while(true) { 睡眠(1); ... }

标签: php mysql sockets session caching


【解决方案1】:

好的,我用数据库完成了它并且工作正常。这是代码:

<?php 
require 'bootstrap.php';

use App\Libs\appServiceProvider;
use App\Libs\socketServiceProvider;
use Socket\Raw\Factory;
use App\Models\Koordinata;
use App\Models\TempKoordinata;

$app = new appServiceProvider;

$last = TempKoordinata::find(1);
if(!empty($last)) { 
    $lastLat = $last->lat;
    $lastLon = $last->lon;
} else {
    $temp = new TempKoordinata();
        $temp->id = 1;
        $temp->lat = 0;
        $temp->lon = 0;
    $temp->save();
    $log->addDebug('No data to compare! Empty tempCoordinate table! Set values to ZERO!');
}

$currentLat = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lat;
$currentLon = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lon;

if ($lastLat != $currentLat && $lastLon != $currentLon) {
    /*$factory = new Factory();
    $socket = $factory->createClient('REMOTE');
    echo "Kapcsolat létrehozva\n";
    $socket->write("MESSAGE");
    echo "Üzenet elküldve\n";
    var_dump("Válasz: " . $socket->read(8192));
    $socket->close();*/
    echo "Sending\n";
} else {
    echo "Idle\n";
    $log->addDebug("GPS data NOT CHANGED! STATUS IDLE!");
}

TempKoordinata::destroy(1);

//Elmentjük a mostani GPS koordinátát
$count = TempKoordinata::all();
//Ha üres az adatbázis akkor elmentjük a koordinátákat
if ($count->count() == 0) {
    $temp = new TempKoordinata();
        $temp->id = 1;
        $temp->lat = $currentLat;
        $temp->lon = $currentLon;
    $temp->save();
} else {
    $log->addDebug("More than one item in the temp table!");
}

 ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2011-02-11
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多