Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找靠近或包含特定位置的POI_Algorithm_Performance_Architecture_Geolocation_Geospatial - Fatal编程技术网

Algorithm 查找靠近或包含特定位置的POI

Algorithm 查找靠近或包含特定位置的POI,algorithm,performance,architecture,geolocation,geospatial,Algorithm,Performance,Architecture,Geolocation,Geospatial,我有一个执行以下操作的应用程序: 接收设备的位置 获取分配给该设备的路由(POI或兴趣点集合) 确定设备是否靠近路由中的任何POI 路线的POI可以是具有半径的点,在这种情况下,应检测设备是否在该点的半径范围内;或者一个多边形,它应该检测设备是否在其中 这是一个具有3个POI的路线示例,其中两个是半径不同的点,另一个是多边形: 我当前的算法是用PHP和MySQL数据库编程的。当设备发送新位置时,脚本将其路由的所有POI从数据库加载到内存中,然后对它们进行迭代。对于作为点的POI,它使用哈弗

我有一个执行以下操作的应用程序:

  • 接收设备的位置
  • 获取分配给该设备的路由(POI或兴趣点集合)
  • 确定设备是否靠近路由中的任何POI
路线的POI可以是具有半径的点,在这种情况下,应检测设备是否在该点的半径范围内;或者一个多边形,它应该检测设备是否在其中

这是一个具有3个POI的路线示例,其中两个是半径不同的点,另一个是多边形:

我当前的算法是用PHP和MySQL数据库编程的。当设备发送新位置时,脚本将其路由的所有POI从数据库加载到内存中,然后对它们进行迭代。对于作为点的POI,它使用哈弗森公式来确定设备是否在POI的半径内,对于作为多边形的POI,它使用“多边形中的点”算法来确定设备是否在POI的半径内

我想重写这个算法,目的是使用比当前算法更少的计算资源。我们每秒接收大约100个位置,每个位置都必须根据平均约40个POI的路线进行检查

我可以使用任何语言和数据库来执行此操作,您会推荐哪种语言和数据库以获得最佳性能?

我会使用支持空间查询的数据库(例如Postgresql)

这将允许您创建一个空间索引,在每个POI周围放置一个边界框。您可以使用此选项进行初始检查,以(通常)消除绝大多数甚至不接近当前位置(即当前位置不在其边界框内)的POI

然后,当您将其缩小到几个poi时,您可以大致使用您现在的算法来测试少数poi,但不是每个点测试40个poi,您可能只测试2或3个poi

这项工作的准确程度将在很大程度上取决于POI与矩形的接近程度。Circular距离足够近,所以它往往会给出相当好的结果


其他的可能取决于——例如,一条几乎南北奔流的河流可能运行得很好。如果你有一条河流大部分是斜流的,那么把它分成若干个正方形/矩形段可能是值得的,而不是把整个东西作为一个单一的特征来处理,因为后者将创建一个有很大空间的边界框,离河流很远。

谢谢,这是一个好主意。我可以明确限制多边形的半径或面积,因为POI表示交付位置。