GeoCouchの拡張は、バケット内のポイントデータから2次元のインデックスを構築するためにCouchbaseの標準のインデックスシステムを使用しています。インデックス情報のフォーマットはGeoJSON仕様に基づいています。
地理空間インデックスを作成するには、記述している点の座標を含むGeoJSONのPointの値を出力するため、emit()
関数を使用してください。
たとえば、次の関数では、以前の空間レコードの例で地理空間インデックスを作成しています。
function(doc, meta) { if (doc.loc) { emit( { type: "Point", coordinates: doc.loc, }, [meta.id, doc.loc]); } }
空間ビューインデックスのキーは、points、multipoints、linestrings、polygonsとgeometryコレクション.を含む、任意の有効なGeoJSONジオメトリ値にすることができます。
ビューのmap()
関数は、ビュー定義の性質を示すためにspatial
接頭辞を使用してデザインドキュメントに配置されるべきです。たとえば、次のようなデザインドキュメントが、points
ビューとして上記関数を含みます。
{ "spatial" : { "points" : "function(doc, meta) { if (doc.loc) { emit({ type: \"Point\", coordinates: [doc.loc[0], doc.loc[1]]}, [meta.id, doc.loc]);}}", } }
地理空間クエリーを実行するには、埋め込まれた空間インデックスを使用して、デザインドキュメント形式を使用します。たとえば、デザインドキュメントがバケットplaces
内でmain
と呼ばれている場合、URLはhttp://localhost:8092/places/_design/main/_spatial/points
となります。
空間クエリは、ビューへのリクエストのための様々な追加引数のサポートを含みます。完全なリストは次の概要の表に記載されています。
メソッド | GET /bucket/_design/[デザインドキュメント]/_spatial/[空間ビュー名] |
リクエストデータ | なし |
レスポンスデータ | ビューから返されるドキュメントのJSON |
認証情報の要否 | 不要 |
クエリ引数 | |
bbox | 空間クエリのバウンディングボックスを指定します |
パラメータ:文字列、任意 | |
limit | 指定した数字で返却するドキュメントの数を制限します |
パラメータ:数値、任意 | |
skip | 結果を返し始める前にこの数のレコードをスキップします |
パラメータ:数値、任意 | |
stale | staleビューからの結果を使用できるようにします |
パラメータ:文字列、任意 | |
サポートされる値 | |
false :結果を返す前にビューインデックスを強制的に更新します | |
ok :staleビューを許可します | |
update_after :staleビューを許可し、アクセス後ビューを更新します |
バウンディングボックスを指定しない場合は、完全なデータセットが返されます。空間インデックスに問い合わせるとき、指定された値での問い合わせ検索の境界を指定するバウンディングボックスを使用することができます。仕様では、クエリの実行中に使用する座標をカンマで区切ったリストの形式でなければなりません。
これらの座標はGeoJSONフォーマットを使用して指定されているので、最初の2つの数字は左下の座標であり、最後の2つの数値は、右上の座標です。
例えば、上述したデザインドキュメントを使用する場合:
GET http://localhost:8092/places/_design/main/_spatial/points?bbox=0,0,180,90 Content-Type: application/json
次の情報を返します:
{ "update_seq" : 3, "rows" : [ { "value" : [ "oakland", [ 10.898333, 48.371667 ] ], "bbox" : [ 10.898333, 48.371667, 10.898333, 48.371667 ], "id" : "augsburg" } ] }
戻り値のデータには、デザインドキュメントのビュー関数で指定された値と、個々の一致するドキュメントのバウンディングボックスを含むことに注意してください。空間インデックスが仕様の一部としてbbox
バウンディングボックスのプロパティを含む場合、この情報は自動で計算されたバージョンの代わりに出力されます。