0

ジオローカライズされた一連のドキュメントがCouchDBにあります。つまり、次のような構造になっています。

{
  _id: ...,
  ...
  coords: {
    lat: 45.204149214,
    long: 40.284712972
  }
}

それらを地図上に表示できるようにしたいと思います。これには、特定の正方形内のすべてのドキュメントを取得する必要があります。指定された間隔で経度を持つすべてのドキュメントを取得するのは簡単です。

// map function
function(doc) {
  emit(doc.coords.long, doc.other_stuff);
}

次のようなクエリを使用する

// query
/path/to/view/?startkey=40&endkey=50

問題は、多次元制約を実行する方法がわからないことです。緯度が20〜30 、経度が40〜50のすべてのドキュメントを取得するにはどうすればよいですか?複数のキーを指定できるようですが、それまたは結果です。

1つのオプションは、クライアントでさらにフィルタリングを実行することですが、データのサイズを考えると、これは実行不可能な場合があります。

免責事項:SOについても同様の質問がいくつかあり、基本的にこれは不可能であると述べています。それらはすべて古くなっているように見えるので、CouchDBの最新リリースで何かが変更されたかどうかを知りたいと思います。

4

1 に答える 1

2

正解です。多次元クエリを実行することはできません。しかし、GeoCouchがあります。build-couchdbを使用してcouchdbに追加するのは非常に簡単です。または、デフォルトでベイクインされているiriscouchホスティングを使用することもできます。

ご覧のとおり、 Geocouchの使用は非常に簡単で、クエリは次のようなバウンディングボックスを使用します。

http://localhost:5984/places/_design/main/_spatial/points?bbox=0,0,180,90

(何らかの理由で)ジオカウチを使用したくない場合は、2次元を1次元空間にマッピング するGeoHashを使用することに成功しました。これがビューコードで、これがクエリです。ご覧のとおり、エレガントではありませんが、couchdbのバージョン間で移植可能であり、機能します。

于 2012-05-31T17:39:27.567 に答える