2012-03-16 7 views
0

mongodbの地理空間データを照会することは、シェルスクリプトを通して十分に真っ直ぐに見えますが、私はmorphia(playmorphia)でいくつかのコードを複製しようとしています。このjs Geospatialクエリをmorphiaでどのように複製できますか?

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

ここに私のピークモデルで私のコードです:

一定の半径内のすべてのポイントを取得し、ドキュメントが言う

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 ..?ありがとう!

答えて

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

+0

感謝。私はそれがutils import com.google.code.morphia.utils.IndexDirectionにあったことを認識しませんでした。 – zenoexo

+0

これまでmongodbシェルを使ってこのフィールドを手動で索引付けしていましたが、これが最初のところで働いていました。他人を助けることができるので、あなたの答えを正確にマークしてください。 – zenoexo

+0

[マニュアルはここにあります](https://github.com/mongodb/morphia/wiki/Query#geo-spatial) – nostromo

0

** @索引(IndexDirection.GEO2D) 公共ダブル[] GEO =新しいダブル[2]。そのため

public static string getResult`enter code here`() { 
     DB datastore = ConnectionFactory.getInstance().getDatabaseMongo(); 
     double[] near = { 20.593684, 78.96288 }; 
     BasicDBObject basicDBObject = new BasicDBObject(); 
     basicDBObject.put("type", "Point"); 
     basicDBObject.put("coordinates", near); 
     BasicDBObject geoNearParams = new BasicDBObject(); 
     geoNearParams.append("geoNear", <collection name>); 
     geoNearParams.append("near", basicDBObject); 
     geoNearParams.append("spherical", true); 
     geoNearParams.append("maxDistance", 100); 
     geoNearParams.append("limit", 10); 
     CommandResult commandResult = datastore.command(geoNearParams); 
     commandResult.getErrorMessage(); 
     Object data = commandResult.get("results"); 
     System.out.println(data.toString()); 
    }** 
関連する問題