google maps - MongoDB搜索多边形中包含lat和lng的所有文档



我正在阅读的教程,看看如何获得文档的位置在一个多边形由谷歌地图多边形抽屉。

在本教程中,它将位置存储在一个数组中,如:

pos:{lat:xxx,lng:yyy}

这不是我的情况,因为在我的文档中值是这样存储的:

{...
"hotel_lat":"xxx",
"hotel_lng":"yyy",
...
},
{...
"hotel_lat":"xxx",
"hotel_lng":"yyy",
...
},
{...
"hotel_lat":"xxx",
"hotel_lng":"yyy",
...
},
...

在本教程中,我们使用这个查询来查找多边形

中的所有文档
$query = array("pos" => array(
               '$within' => array('$polygon' => $poly)));
$cursor = $collection->find($query);

我把它改成:

$query = array(
array("hotel_lat","hotel_lng") => array(
'$within' => array('$polygon' => $poly)))

但是它给了我这个错误:Illegal offset type in.....

错误是什么?

谢谢!

在寻找进一步的教程之前,我想你已经做了,因为你想用PHP编写的东西,MongoDB网站有你需要的基本教程信息:

http://docs.mongodb.org/manual/tutorial/query-a-2d-index/

在你说"这不是PHP"之前,看看下面的代码:
$result = '{"$pos": { "$within": { "$polygon": "$poly" } } }';
print_r( json_decode( $result ) );

输出

stdClass Object
(
    [$pos] => stdClass Object
        (
            [$within] => stdClass Object
                (
                    [$polygon] => $poly
                )
        )
)

这让你们了解了如何用PHP写这个。反过来转换为JSON,看看你的编码形式是否正确。

所以你实际写的代码,甚至不是一个有效的PHP结构,更不用说偏离所需的语法。

在核心文档中,它解释了您的存储必须看起来像什么,并且MongoDB存储中的首选形式是数组形式,以便一致地维护跨语言的顺序,可能无法维护a的所需顺序<<strong>散列/strong>:

pos : [ <longitude> , <latitude> ]

不能有两个单独的字段为"经度"one_answers"纬度"值,因为MongoDB 不能创建所需的地理空间索引在多个字段。如果你已经设法接收你的数据在哪里的值在离散的字段,那么它是由你重新塑造数据为MongoDB正确的存储要求。

请先阅读所有的MongoDB文档,然后再转到其他教程任务。修复您的数据,使其格式正确,并索引所需字段。然后你可以使用地理空间查询。

请在你的开发过程中经常使用json_encodejson_decode,因为这是一个非常清楚的方法来比较文档样本和可视化,你正在做正确的事情:

$poly = array();
array_push(
  $poly, floatval(51.52081391707402), floatval(-0.12737274169921875),
  floatval(51.487582985843034), floatval(-0.13578414916992188));
$test = array("pos" => array('$within' => array('$polygon' => $poly)));
echo json_encode( $test, JSON_PRETTY_PRINT ) ."n"

导致:

{
    "pos": {
        "$within": {
            "$polygon": [
                51.520813917074,
                -0.12737274169922,
                51.487582985843,
                -0.13578414916992
            ]
        }
    }
}

作为结构实际上如何传输到服务器转换为BSON的JSON表示

最新更新