sum*_*mit 14 php google-maps message-queue laravel-5 laravel-queue
我有大约100个GPS设备每10秒定期发送坐标.我的客户想要实时反向地理编码,以便在表格视图中查看他的车辆以及位置.我已经设置了一个队列来保存db中的所有数据包,然后我添加了如下所示的地理编码脚本
使用websocket接收TCP IP消息
public function onMessage(ConnectionInterface $conn, $msg) {
//get the message
// send the dispatch job to save it in db
$this->dispatch(new SavePacketsToDb($key_1, json_encode(
array(
'company_id' => $key_1,
'vehicle_id' => $company->vehicle_id,
'tracker_id' => $company->tracker_id,
'lat' => $lat,
'lng' => $lng,
'imei' => $imei,
'datetime' => $datetime,
)
)));
Run Code Online (Sandbox Code Playgroud)
}
运行队列
public function handle(){
$lat=$obj->lat;
$lng=$obj->lng;
$url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" . $lat . "," . $lng . "&key=mykey";
$json = file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
$address = '';
if ($status == "OK") {
// echo "from geocode address";
echo $address = $data->results[0]->formatted_address;
}
else{
$address=NULL;
}
//save to db
}
Run Code Online (Sandbox Code Playgroud)如果我在队列中包含这种地理编码,我只是担心它是否适用于1000个并发设备,有没有更好的方法呢?
小智 1
我们开发了类似的东西,最初使用谷歌地图 API,但我离开了,因为它在我的位置(巴西)不太准确。
对于谷歌地图,如果您没有注意到任何准确性问题,您可以运行队列并处理数据,但每天的数量有限(请注意我相信 2500 次查找限制)以获得免费服务或购买所需的查找。
如果您需要所有设备的实时性,您将需要为谷歌地图中的更大容量付费,我将使用排队服务。我们使用 RabbitMQ 队列来接收坐标,然后我们有小型客户端/工作人员从队列中获取项目并处理它们(还涉及其他 API)。
我不相信您的客户会整天在屏幕前,所以也许您可以:
顺便说一句,我们正在使用 HereMaps,它是付费的,但您可以创建一个为期 3 个月的演示/测试帐户。