2

我对 mongodb 有点陌生。

我想使用 mongodb 的地理空间功能来查询从谷歌地图获得的边界中的位置。这就像 insideBox(swLng, swLat, neLng, neLat)。但是当地图缩小时它无法给我正确的结果,因为 neLng/neLat 小于 swLng/swLat。似乎这是使用 x > swLng 和 x < neLng 和 y > swLat 和 y < neLat 计算的,没有考虑地图投影。

那么我可以通过insideBox实现查询,还是我必须调整坐标,或者我应该使用near?

4

1 回答 1

1

正如我上面评论的,当东北点和西南点穿过国际日期变更线时,查询将失败,因为右上角的 y 小于左下角的 y。

如果您将 mongodb 与 php 和教义一起使用,则需要在客户端进行两次查询并合并结果,如下所示:

if ($x1 > $x2) {
    $qb->field('coordinates')->withinBox(-180, $y1, $x2, $y2);
    $result1 = $qb->getQuery()->execute();
    $qb->field('coordinates')->withinBox($x1, $y1, 180, $y2);
    $result2 = $qb->getQuery()->execute();
    $result = $result1->toArray() + $result2->toArray();
} else {
    $qb->field('coordinates')->withinBox($x1, $y1, $x2, $y2);
    $result = $qb->getQuery()->execute();
    $result = $result->toArray();
}
于 2013-04-04T12:28:44.030 回答