2017-04-05 116 views
0

我正在研究一个项目,其中有许多车辆(2000年左右)和我的数据库(与mongo一起工作)上的多个多边形。mongoDB - 检查多个位置的进入/退出多边形事件的最佳方法是什么?

我有不同种类的多边形(城市,国家,十字路口...),让我们说4种类型的事情。

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

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

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

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

回答

0

我认为有一个更好的解决方案,因为车辆不能经常更改他们的城市/国家,直到他们飞行。我正在考虑以下内国家schema-

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}.我会选择我的车辆架构为{id, location_cordinates, curr_city, curr_country}

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

如果城市/国家由于车辆移动而改变,那么您需要使用最新数据更新车辆。

以这种方式,您将尽量减少对数据库的查询。这将需要一些代码,因为一切都不会在数据库中完成。

喜欢 - 车辆

  • 位置在这里,我已经采取了一些假设将被存储的车辆文件内。如果不是你的情况,那就把它删除。您可能会从GPS或类似的东西获取位置,并且不需要根据您的需要进行存储。
  • 我无法理解相交部分。它是过渡还是交叉?通常国家有州,州有城市等。城市名称可以在州内或州内复制。但是一个城市将成为唯一一个国家的一部分。如果情况并非如此,那么你只需要在多个国家放置同一个城市,并将代码逻辑放在这些城市中。
  • 在靠近城市的同时,您需要考虑位于国家边界的城市,并且可能会从另一个国家/地区到达城市附近。

希望我明白你的问题和解决方案对你有帮助。如果获得更多信息,我会很乐意提供帮助。

相关问题