MongoDB 地理定位与 Spring MVC 结合使用

MongoDB Geolocation using with Spring MVC

我尝试为我的应用程序实施 GPS 跟踪服务。我有一项将地理位置数据推送到 mongodb 的服务,效果很好。问题是每辆车必须每 20 秒发送一次数据。

作为一项要求,我应该在 google 地图中显示最新的 24 小时数据,这使得接收庞大的数据集成为一个问题。 (一辆车 4320)。 mongo 或 google 地图中是否有任何最佳实践来接收较少的数据并显示一条线作为历史记录? (回复是"json")

我假设你的 JSON 看起来像这样:

{
  id: 42,
  car_id: 102,
  coordinates: [
    { lat: ..., lon: ..., timestamp: ... },
    { lat: ..., lon: ..., timestamp: ... },
    { lat: ..., lon: ..., timestamp: ... },
    ...
  ]
}

如果使用JSON,只有4种方法可以减小尺寸:

  1. 删除未使用的数据

    1. 您可以从列表中删除重复的条目。如果汽车静止不动一个小时,您将连续获得 180 个相同的条目。你只能保留一个,因为在地图上画的线看起来不会有什么不同。

    2. 如果不需要,请删除 timestamp。如果数组是有序的,你可能不需要时间戳来排序。

  2. 缩小数据表示

    1. 如果您有 4320 个条目,每个字符都会有所不同。因此,您可以将 latlon 替换为 xy。这将大小减少 4*4320 = 17280 个字符。

    2. 更改表示。如果您不需要时间戳,您可以简单地将数据结构缩减为 coordinates: [[1,2],[3,4],[5,6],...](其中 135lat 部分,并且246是坐标的lon部分)。这可能会将 JSON 大小再减少 20-40%。

  3. 压缩数据

    1. 如果可能,请使用 GZIP(或任何其他压缩算法)。这样您就可以轻松地将 JSON 输出缩小到原始大小的 10-20%。
  4. 使用更紧凑的数据格式

    1. 查看 Protocol Buffers(来自 Google)。 Spring 支持它,还有一个 JavaScript 库。

    2. 还有一些其他协议可以减少数据大小。 IE。 Thrift(来自Apache / Facebook),但我不知道Spring / JavaScript是否支持它。

基本上你能做的就是这些了。