我每隔10秒就有大约100个GPS设备定期发送坐标。我的客户想要实时反向地理编码,以便在表格视图中查看他的车辆以及位置。我已经设置了一个队列来保存db中的所有数据包,然后我添加了地理编码脚本,如下所示
使用websocket接收TCP IP消息
DATE_FORMAT(NOW(),'%d %M %Y %h:%i %p)
}
运行队列
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,
)
)));
如果我在队列中包含这种地理编码,我只是担心它是否适用于1000个并发设备,是否有更好的方法呢?
答案 0 :(得分:1)
我们开发了类似的东西,最初使用谷歌地图api,但我搬走了,因为它在我的位置(巴西)不太准确。
对于谷歌地图,如果您没有注意到任何准确性问题,您可以运行队列并处理数据,但每天数量有限(请注意我认为的2500次查找限制)免费服务或购买所需的查询。
如果您需要所有设备的实时,您需要在Google地图中支付更大的费用,我会使用排队服务。我们使用RabbitMQ Queue接收坐标,然后我们有小客户端/工作人员从队列中获取项目并处理它们(还涉及其他API)。
我不相信你的客户会在屏幕前一整天都在那里,所以也许你可以:
顺便说一下,我们正在使用HereMaps付款,但您可以创建3个月的演示/测试帐户。
答案 1 :(得分:0)
我认为反向地理编码每个坐标都是非常低效的。我宁愿尝试在某些软件包中对某些坐标进行分组,并使用类似thephpleague/geotools
批处理api的内容来反向对此数据进行地理编码(如果请求它们)。
我不会只依靠谷歌地图。我认为一个好的建议是有一个后备,因为谷歌地图不知道每个地址,你可以轻松退出速率限制(有这么多的数据)。看看[geocoder-php/Geocoder
]包,它支持许多地理编码服务。
Mabye网站说明:我是维护这个项目的人之一。