mongoDB - 检查许多位置的进入/退出多边形事件的最佳方法是什么?

时间:2017-04-05 20:17:36

标签: mongodb geolocation polygon

我正在开展一个项目,我有很多车辆(大约2000)和我的DB上的几个多边形(使用mongo)。

我有不同种类的多边形(城市,国家,交叉点......),让我们说4种类型。

每分钟我都会获得车辆的新位置,我需要在客户端的桌子上显示当前的国家,城市和交叉路口(或最后的交叉路口)。我真正想知道的是当车辆进入/退出多边形时。

我知道可以查询当前多边形的特定车辆位置,但我需要获得2000辆车的当前4种多边形类型。

这是每分钟8000(!!!)DB的查询。

做我想做的最好的方法是什么? 谢谢:))

1 个答案:

答案 0 :(得分:0)

我认为有更好的解决方案,因为车辆在飞行前不能经常改变他们的城市/国家。我正在考虑下面的架构 -

Country={
      id: ObjectId or String, 
      name: String, 
      cities: [<array of city subdocuments>],
      near_country: [<array of IDs of neighbour countries>],
      boundary: location boundary for city <city would be polygon or your choice of geoType>
}

国家/地区内的城市子文档可以包含{id, name, boundary, near_city}.这样的架构我将选择我的Vehicle架构为{id, location_cordinates, curr_city, curr_country}

现在,当您获得车辆位置数据时,只需从存储的车辆文档中获取curr_city并检查位置是否仍在curr_city内。如果它没有问题,否则你只需要检查该位置是否在near_city中。

如果城市/国家因车辆移动而发生变化,则需要使用最新数据更新车辆。

通过这种方式,您可以最大限度地减少对DB的查询。它需要一些代码,因为一切都不会在DB中完成。

我在这里做了一些假设,比如 -

  • 车辆的位置将存储在车辆文件中。如果不是你的情况,那就把它删除吧。您可能会从GPS或类似物品获取位置,而无需根据您的需要存储它。
  • 我无法理解交叉路口。它是过渡还是交叉?通常国家有州,州有城市等。城市名称可以在州内或州内重复。但是一个城市将只是单一州的一部分。如果情况并非如此,那么您只需要将同一个城市放在多个国家/地区,并使用代码逻辑来处理这些城市。
  • 在靠近城市的同时,您需要考虑在国家边界的城市,并且可能有来自其他国家的城市。

希望我理解您的问题,解决方案对您有所帮助。如果我得到更多信息,我很乐意进一步提供帮助。