Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
将地理空间路径与MongoDB进行比较_Mongodb_Geospatial_Bson - Fatal编程技术网

将地理空间路径与MongoDB进行比较

将地理空间路径与MongoDB进行比较,mongodb,geospatial,bson,Mongodb,Geospatial,Bson,我正在开发一款移动应用程序,它可以定期跟踪用户的位置,让用户在地图上标出旅行路线。我们想添加一个可选功能,告诉他在他看到的时间范围内,该应用程序的其他用户有哪些进行过类似的旅行,无论是今天的通勤还是最后一个月的旅行。我们称之为“路径匹配” 这些数据目前以二进制格式登录到iOS和Android上应用程序私有存储目录中的文件中,可以轻松快速地扫描到读取位置。每个文件包含一天的位置,通常运行到大约80KB 为了能够实现路径匹配功能,我们显然需要开始将这些位置日志上传到我们正在运行PHP的服务器上(当然

我正在开发一款移动应用程序,它可以定期跟踪用户的位置,让用户在地图上标出旅行路线。我们想添加一个可选功能,告诉他在他看到的时间范围内,该应用程序的其他用户有哪些进行过类似的旅行,无论是今天的通勤还是最后一个月的旅行。我们称之为“路径匹配”

这些数据目前以二进制格式登录到iOS和Android上应用程序私有存储目录中的文件中,可以轻松快速地扫描到读取位置。每个文件包含一天的位置,通常运行到大约80KB

为了能够实现路径匹配功能,我们显然需要开始将这些位置日志上传到我们正在运行PHP的服务器上(当然是在用户许可的情况下)。有人建议MongoDB使用其地理空间能力,但我有几个问题,也许大家可以帮助我:

  • 似乎我们可以将位置日志改为使用BSON。第一个字段是设备或用户ID,后面是特定日期的位置列表。然后可以将该文件上载到我们的服务器并推送到MongoDB存储区。然而,在线文档似乎只涉及导入mongodump创建的BSON文件。格式是否足够稳定,任何应用程序都可以编写MongoDB可以直接读取的BSON文件

  • MongoDB是否能够在包含多个位置的文档上运行地理空间查询,或者在跨多个文档形成路径的位置上运行地理空间查询?或者,在PHP方面,这是否会让您觉得需要数据库之外的过度逻辑

  • 格式是完全稳定的,但是没有太多工具来完成您描述的工作。通常,您会将它上传到后端,然后它会最终出现在,比如说
    $\u POST['locations']
    或是一个关联数组的数组中。对其进行清理并将其保存到数据库中,类似于:

    $locs=消毒($_POST['locations']); $doc=array('path'=>array('type'=>'LineString','coordinates'=>$locs),'user'=>$userId); $collection->insert($doc)

    在上面的示例中,我使用了一些最新的geo工具(),您需要一个夜间构建来实现这一点,但它应该在大约一个月后进入稳定构建。如果在此之前需要,可以使用较旧的geo API:

    MongoDB不读取BSON文件,但您可以使用mongorestore手动加载它们。不过,我强烈建议让司机为你做一些低级的事情

  • 您可以拥有一个文档,其中包含一条线(在新的geo stuff中)和一个点数组(在旧的geo stuff中)。我不知道你所说的“跨多个文档的路径”是什么意思

    编辑以添加:根据您的评论,您可能希望尝试
    {path:{$near:{$geometry:userPath}}}
    查找“附近”路径。您还可以尝试围绕用户的路径创建一个多边形,并在多边形中查询docs$


  • “LineString”这个东西看起来非常适合存储路径。所谓多文档路径,我的意思是Mongo商店可能最终包含多个文档,每个文档在某一天都有用户的位置路径。因此,每个用户每天有一个文档。我需要弄清楚的是,如何在多天内将用户的路径与其他用户的路径进行比较。最终,我们想告诉用户“在这段时间内,这些人往往离你很近”。看起来Mongo很适合这个!酷!编辑以添加有关查找附近路径的更多信息。请指定此查询中userpath的格式{path:{$near:{$geometry:userpath}}我有同样的要求,但我不知道如何通过userpath我看过文档,似乎$gemetry for$near只接受点而不是路径我在这方面是对的吗?你解决问题了吗?我有一个类似的问题,我需要通过给出一组点来找到一条匹配的路径。但是我用$GEOSINTERSECTS和LineString没有得到任何结果。