0

mongodb での地理空間データのクエリは、シェル スクリプトを介して十分に簡単に見えますが、モルフィア (プレイモーフィア) でいくつかのコードを複製しようとしています。

特定の半径内のすべてのポイントを取得すると、ドキュメントは次のように述べています。

> center = [50, 50]
> radius = 10
> db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

私の Peak モデルのコードは次のとおりです。

Double[] loc = new Double(2);
// it's set to my [Longitude, Latitude]

List<Peak> peaks = play.modules.morphia.Model.ds().find(Peak.class).field("loc").near(loc[0], loc[1], 10/111.12).limit(50).asList();

それは機能しますが、ds().find() を使用して何か間違ったことをしていますか? Peak.find.. などのモデルを使用してこれを行うよりエレガントな方法はありますか? ありがとう!

4

2 に答える 2

0

地理フィールドにインデックスを配置する必要があります。

私のプロジェクトのサンプルコード:

@Indexed(IndexDirection.GEO2D)
public Double[] geo = new Double[2];


List<User> pharmacist = MorphiaQuery.ds()
.createQuery(User.class)
.filter("isPharmacist",true)
.field("geo")
.within(nelat, nelng, swlat, swlng)
.field("geo")
.near(u.geo[0], u.geo[1])
.limit(limit)
.asList();

マニュアルを確認してください: http://code.google.com/p/morphia/wiki/Query#Geo-spatial

于 2012-03-17T18:15:25.957 に答える