2

私はmongodbが初めてです。

mongodb の地理空間機能を使用して、Google マップから取得した境界内の場所を照会したいと考えています。それは withinBox(swLng, swLat, neLng, neLat) のようなものです。しかし、neLng/neLat は swLng/swLat よりも小さいため、マップをズームアウトすると正しい結果が得られません。これは、地図投影を考慮せずに、x > swLng および x < neLng および y > swLat および y < neLat を使用して計算されているようです。

withinBoxでクエリを実行できますか、座標を調整する必要がありますか、それともnearを使用する必要がありますか?

4

1 に答える 1

1

上でコメントしたように、北東と南西のポイントが国際日付変更線を超えると、右上の y が左下の y よりも小さいため、クエリは失敗します。

php と doctrine で mongodb を使用している場合、2 つのクエリを作成し、以下のようにクライアント側で結果をマージする必要があります。

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 に答える